Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Манипуляции с Pe заголовком

1.9K
22 января 2005 года
Volly
57 / / 18.10.2003
Здравствуйте!

Есть небольшой вопрос по PE заголовку. Как известно, в секции .text заголовка содержится информация о коде программы. И в соответствии с ним Windows загружает программу в память. Допустим, мы грубо (через бинарный редактор) перенесли код программы куда-то дальше, вставив между PE заголовком и кодом n*16 штук нулей. Потом в соответствии с новой позицией поменяли в секции .text заголовка данные. Будет ли нормально грузиться программа? Зависит ли содержимое секции .text от кода программы?

Большое спасибо.
301
22 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Volly
Здравствуйте!

Есть небольшой вопрос по PE заголовку. Как известно, в секции .text заголовка содержится информация о коде программы. И в соответствии с ним Windows загружает программу в память. Допустим, мы грубо (через бинарный редактор) перенесли код программы куда-то дальше, вставив между PE заголовком и кодом n*16 штук нулей. Потом в соответствии с новой позицией поменяли в секции .text заголовка данные. Будет ли нормально грузиться программа? Зависит ли содержимое секции .text от кода программы?

Большое спасибо.


Я пологаю, что умрут все ссылки типа "Перейти в код по адресу ...". Увы, так вирус писать сложнее.=(

1.9K
22 января 2005 года
Volly
57 / / 18.10.2003
Сразу замечу, что это мне надо не для написания вируса. Скорее, для исследования оных :)

Но почему эти ссылки умрут? Ведь, мне так кажется, на то и существуют секции, чтобы такого не случилось. Как вы считаете?
301
22 января 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Volly
Сразу замечу, что это мне надо не для написания вируса. Скорее, для исследования оных :)

Но почему эти ссылки умрут? Ведь, мне так кажется, на то и существуют секции, чтобы такого не случилось. Как вы считаете?


Проще, по-моему, дописать после файла... Но, раз ты не про это спрашиваешь - значит уже не надо простого.=) Тьфу - сам в фразе запутался.=)

1.8K
24 января 2005 года
gwg605
76 / / 06.03.2003
Цитата:
Originally posted by lord Kelvin

Я пологаю, что умрут все ссылки типа "Перейти в код по адресу ...". Увы, так вирус писать сложнее.=(


Да действительно умрут, но их можно востановить из relocation table. Все необходимые точки там указаны. Есть еще одно но: надо смотреть чтобы код не наложилися на данные, после такого вмешательства.

1.9K
24 января 2005 года
Volly
57 / / 18.10.2003
2lord Kelvin: Ясное дело, не так просто :) Антивирус думаю простой написать. Так надо же разобраться во всем этом.

2gwg605: По-моему, relocation table - это пережиток формата exe, который использовался в MS-DOS и в PE'шных exe'шниках сохранился только для совместимости. А если рассматривать код с точки зрения ассемблера, то в обозначениях адресов используется абсолютные или относительные адреса?
2.0K
24 января 2005 года
Smagen
29 / / 01.05.2003
2Volly:
В relocation table, насколько я помню, записывается, где абсолютные адреса используются в программе. Это нужно, когда программа загружается не по тому image base, по которому была слинкована. Тогда в соответствии с relocation table все абсолютные адреса корректируются. Такое чаще всего происходит с dll'ками, когда при загрузке нужный image base оказывается уже занят. Хранится всё это дело в секции .reloc
А по поводу секции text: Ты хочешь менять её положение в файле или виртуальный адрес? В первом случае тебе не придётся менять ничего в самой секции. Во втором же тебе придётся написать небольшую програмку, которая будет корректировать все ссылки на эту секцию в соответствии с изменениями.
260
24 января 2005 года
Ramon
1.1K / / 16.08.2003
Цитата:
Originally posted by Volly

По-моему, relocation table - это пережиток формата exe, который использовался в MS-DOS и в PE'шных exe'шниках сохранился только для совместимости. А если рассматривать код с точки зрения ассемблера, то в обозначениях адресов используется абсолютные или относительные адреса?



Ну ну - "пережиток". Этот так называемый "прежиток" был и всегда будет в интеловской архитектуре да и не только в ней.

1.9K
24 января 2005 года
Volly
57 / / 18.10.2003
Тогда понятно. Просто в dos тоже был некий relocation table, я подумал, что говорилось о нем. Т.е. если ставить вирь в конце файла, то она должна учитывать свою позицию в exe файле?
2.0K
25 января 2005 года
Smagen
29 / / 01.05.2003
Цитата:
Originally posted by Volly
Тогда понятно. Просто в dos тоже был некий relocation table, я подумал, что говорилось о нем. Т.е. если ставить вирь в конце файла, то она должна учитывать свою позицию в exe файле?


Вирусы, как правило, представляют из себе позиционно-независимый код. Поэтому им не нужно использовать relocation table. Позиционная независимость достигается несложным приёмом:
call label
label:
pop ebp
sub ebp,3
после этого ebp указывает на начало вируса, и вся адресация потом ведётся через ebp.

487
29 января 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by Volly
Здравствуйте!

Есть небольшой вопрос по PE заголовку. Как известно, в секции .text заголовка содержится информация о коде программы. И в соответствии с ним Windows загружает программу в память. Допустим, мы грубо (через бинарный редактор) перенесли код программы куда-то дальше, вставив между PE заголовком и кодом n*16 штук нулей. Потом в соответствии с новой позицией поменяли в секции .text заголовка данные. Будет ли нормально грузиться программа? Зависит ли содержимое секции .text от кода программы?

Большое спасибо.



Поясняю:

Для нормальной загрузки файла требуется правильный RVA секции - а физическое смещение в файле значения не имеет. Вот если ты в виртуальное пространство программы захочешь ручками вставить n данных - тогда у тебя адреса поплывут.

Механизм загрузки:

Загрузчик выделяет память под прогу равную ImageSize указанную в заголовке PE файла.
Потом в эту память грузятся секции из файла.

Положение секции определяется двумя параметрами:
Relative Virtual Address (RVA) - адрес памяти в которую загрузится секция и Physical Offset (RAW) - физическое смещение в файле к данным секции. Отсюда и получается что физическое смещение может быть любым (какая разница откуда грузить) а вот с RVA лучше без лишних нужд не баловать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог