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


Куда податься? - часть 2


Это и есть базовый адрес, в нашем случае равный 1000000h. Так же необходимо убедиться, что заголовок действительно распахнут на всю ширину (он лежит в том же разделе в поле "size of headers") и в нашем случае равен 600h. Это значит, что при загрузке файла в память отображаются только первые 600h байт от его начала, а поскольку мы начинаем внедрение с 300h байта, размер бациллы не может превышать 600h –300h == 300h байт. Плохо! Очень плохо! Но при желании это поле можно увеличить до 1000h. Главное, чтобы оно не превышало Section Alignment, указанного ниже. Так же необходимо убедиться, что файл не содержит перемещаемых элементов, которые могут испортить всю малину. Смотрим, если поле "base relocation table" в разделе "optional header: directories" не равно нулю, лучше всего отказаться от внедрения. При большом желании можно внедриться и в перемещаемые файлы, это лишь чуть-чуть труднее, однако, не будем лезть в дебри и для начала разберемся с малым.

Контрольную сумму (checksum) править необязательно. Windows все равно ее игнорирует. Антивирусы, кстати говоря, тоже. Я всегда говорил, что они тупые создания! Впрочем, для перестраховки это поле можно обнулить или рассчитать новую контрольную сумму с помощью утилиты editbin, поставляемой с компилятором Microsoft Visual C++.

 

Рисунок 3 основные поля дрозофилы, ответственные за внедрение бациллы

Так же можно внедряться в конец кодой секции, в хвосте которой "пасется" до FFFFh свободных байт, оставленных для выравнивания, однако, чаще всего их количество не превышает 50h, чего для полноценной программы явно недостаточно, но на всякий случай будем иметь эту заначку ввиду.

Берем все тот же HTE, привычным движением руки давим <F6>(mode), "pe/header" и смотрим атрибуты секции .text (в некоторых случаях она называется CODE или как-то еще). Как быстро перейти в конец секции .text? Очевидно, необходимо переместиться на начало следующей секции (в нашем случае эта секция .data), а затем вернуться на один байт назад.

Переводим HTE в режим страничного имиджа (<F6>, "pe/image"), давим <F5> (goto) и говорим "section(".data")", заставляя редактор перейти к началу секции ".data". Переводим курсор на несколько строк вверх и… здравствуй, хвост секции .text! Нулевые байты (которым соответствует ассемблерная команда add [eax],al) никем не заняты и могут использоваться по нашему усмотрению. В данном случае здесь содержится 38h байт. Хм, не слишком-то длинный хвост. Бывают хвосты и подлиннее!

 

Рисунок 4 незанятый хвост секции .text, готовый к внедрению бациллы




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