Ручная троянизация приложений под windows


Куда податься?


Проще всего внедряться в свободное место готового файла, который мы будем звать дрозофилой, а сам внедряемый код — бациллой. Если свободного места ни хрена нет, можно раздвинуть последнюю секцию и внедриться в нее, но это намного сложнее, поэтому такой способ здесь не рассматривается, а всех любопытствующих мы отсылаем к "пути воина — техника внедрение в PE-файлы", который можно отыскать на сайте www.wasm.ru.

Типичный PE-заголовок вместе с таблицей секций и OLD-EXE заголовком занимает чуть больше 200h байт, а минимальное физическое выравнивание внутри файла (File Alignment), которое только поддерживает Windows, как раз и составляет 200h! Таким образом, в нашем распоряжении оказывается практически 200h незанятых байт или даже больше того! Для ускорения загрузки файла большинство линкеров выравнивает адрес начала первой секции не по File Alignment, а по Section Alignment, который никак не меньше 1000h. Как следствие — наши "владения" увеличиваются аж до E00h байт. Для ассемблерных программ это целый материк, на котором и слона разместить можно, ну если не слона, то полноценную бациллу — точно! В упакованных файлах, заголовок прижат к первой секции практически вплотную, поэтому, перед началом внедрения их необходимо распаковать.

Отроем notepad.exe в редакторе HTE и будем прокручивать его до тех пор, пока не врежемся в напаханную целину сплошных нулей. В нашел случае она начинается с адреса 2F0h (именно 2F0h, а не 2EFh, поскольку последний нуль служит завершителем строки WINSPOOL.DRV и трогать его нежелательно). Из любви к круглым цифрам, выберем 300h, хотя, выравнивать начало внедряемого кода совершенно необязательно.

 

Рисунок 2 поиск места для внедрения бациллы в редакторе HTE

Теперь необходимо определить базовый адрес загрузки файла. Он содержится в заголовке. Не выходя из HTE нажмем <F6> (mode) и выберем "pe/header". Там, в разделе "optional header: NT fields", будет поле "image base".


- Начало -  - Назад -  - Вперед -