Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #87, МАРТ 2006 г.

Язык протектора

GPcH (www.dotfix.net)

Хакер, номер #087, стр. 087-142-4


Последнее, что хотелось бы отметить, - после любой команды в самом конце можно поставить запятую и написать if <variable> = <some text>, где variable - имя переменной, а some text – то, чему переменная может быть равна (кстати, помимо "=", можно использовать и ">" и "<"). При этом команда выполнится только при равенстве переменной тексту. Вот пример:

messagebox Do you wand to patch program?, 4, Patch, retval

Если пользователь нажмет на кнопку Yes:

messagebox You select Yes, 16, Yes, retval1, if retval = 6

Если пользователь нажмет на кнопку No:

messagebox You select No, 16, No, retval2, if retval = 7

Теперь, когда с языком разобрались, попробуем на примерах.

[маскируем EXE-файл под Borland C++ 1999]

Довольно интересно упаковать EXE-файл, скажем, UPX'ом или ASPack'ом, да чтоб при этом PEiD и другие сниферы думали, что это непакованный файл, скомпиленный в борландовом C++. Тут и крэкеры будут смущены немного, и эмулятор команд сглючит в некоторых эмулирующих отладчиках. Короче, довольно полезная штука. Сейчас попробуем ее реализовать.

Определимся с планом работы. Именно с планом, а не алгоритмом. Сначала нам потребуется сформировать сигнатуру - это будут первые байты с OEP нормальной Borland C++ программы, затем нужно выровнить стек и очистить регистры, если они менялись этим кодом и перейти на оригинальную точку входа. Нашу сигнатуру, сформированную по указанному выше плану, необходимо вставить в последнюю секцию и поменять EP на нее. А вот и примерный алгоритм реализации этого на DotFix Script'е.

[профессиональная маскировка]

;спросим у юзера, нужно ли патчить

messagebox Do you want to patch this program?, 4, Patch, retval

;если не нужно - выходим

goto exit , if retval = 7

;узнаем EP

getoep oep, va_oep

;узнаем image base

getimagebase imagebase

;объединяем

add @va_oep@,@imagebase@,va_oep

;инвертируем этот адрес

invert @va_oep@, va_oep

;узнаем длину генерируемой сигнатуры <сигнатура><прыжок на OEP>

length EB1066623A432B2B484F4F4B90E900000000A100000000C1E002A3000000005290B8@va_oep@FFE0,len

;создаем секцию длиной с длину сигнатуры

createsection cool,@len@,raw,va

;определяем рандомный адрес, чтобы смутить анализаторы, чтобы сигнатура не была статичной

add @va@,@imagebase@,address

;инвертируем этот адрес

invert @address@, address

;вставляем сигну в созданную секцию

putcode @raw@, EB1066623A432B2B484F4F4B90E900000000A1@address@C1E002A3@address@5290B8@va_oep@FFE0,len

;меняем EP на адрес новой секции

setoep @va@

;устанавливаем флаги секций в C0000020

setflag C0000020

;выводим новую точку входа на экран

messagebox New oep: @va@,16

label exit

Не правда ли просто?

[определяем пикодовость VB-проекта]

Очень часто реверсеру приходится иметь дело c программами, написанными на Visual Basic. Кто с такими сталкивался, знает, как иногда полезно заранее знать, псевдокод там или нормальный машинный. Это бы упростило скорость подбора инструмента для исследования в несколько раз. Раскрою тебе небольшой секрет: если иметь под рукой DotFix Script, то задача решается минут за 10. Сомневаешься? Тогда давай напишем с тобой такой скрипт и разберем, как он работает:

Назад на стр. 087-142-3  Содержание  Вперед на стр. 087-142-5