Язык протектора 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. Сомневаешься? Тогда давай напишем с тобой такой скрипт и разберем, как он работает: |