Язык протектора GPcH (www.dotfix.net) Хакер, номер #087, стр. 087-142-3 loadfunction <function name>, <path to dll>, <param1>, <param2>, <param3>, <accumulator> Да, параметров только 3, но это максимум, который можно выжать из динамической загрузки, если не считать asm-вставки. Как и в любом нормальном языке, можно использовать метки и делать на них переходы: label <title> - создать метку title goto <label> - перейти на метку label Напоследок я оставил команды для работы с файлами непосредственно PE-формата и не только. Именно они пригодятся при защите твоей программы. Вот они: - delfile <filename> - удаляет файл с именем filename. - copyfile <filename from>, <filename to> - копирует файл filename from в файл filename to. - addlog <filename>, <string> - в файл filename добавляется строка string (рекомендуется использовать для ведения логов работы скрипта). - shell <filename> - запускает EXE-файл. - putcode <offset>, <HEX_Stub> - помещает по смещению offset, записанному в HEX-виде набор байт, то же самое в HEX-виде - getcode <offset>, <length>, <accumulator> считывает в аккумулятор последовательность байт длиной length по смещению offset. - getfile <accumulator> - считывает все содержимое файла в аккумулятор. - getfilelength <accumulator> - считывает длину файла в аккумулятор. - getoem <accumulator> - считывает OEM-информацию из DOS-заголовка EXE-файла. - setoem <text> - записывает OEM-информацию в dos_header. Рекомендуется юзать это поле для каких-то своих записей типа "Patched by John Smithon" в обрабатываемом PE-файле, все равно загрузчику винды наплевать, что будет в OEM. - getoep <accumulator> - считать адрес точки входа в программу в аккумулятор. - setoep <hex string> - изменить адрес точки входа в программе на ту, что записана в HEX-виде в hex string. - createsection <name>, <size>, accumulator (file offset)>, accumulator (virtual address)> - создает в файле новую секцию с именем name и размером size. При этом смещение секции в PE- файле и виртуальный адрес сохраняются в соответствующих аккумуляторах. - setflag <hex string> - ставит флаг hex string на все секции. Полезно поставить флаг возможности записи на все секции, чтобы не получить Acces Violation при работе записанного в файл кода. - invert <hex string (8 bytes)>, <accumulator> - меняет местами байты (требуется для push'ей, call'ов и других инструкций). Пример: был адрес 00401011, в аккумуляторе после инвертирования будет 11104000. Перед этим числом ставим E8 и получаем относительный jmp, который можно записывать в файл. - getimagebase <accumulator> - получает Image Base. - xorcode <offset>, <length>, <accumulator> - xor'ит <length> байт по смещению <offset> и заносит код декодера в accumulator. - createpath <path> - создает путь из неограниченного числа каталогов или просто одну папку. |