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

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

GPcH (www.dotfix.net)

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


;создаем секцию с именем 'cool' и длиной 'len'

;функция занесет реальный и виртуальный адреса

;в переменные 'raw' и 'va'.

createsection cool,@len@,raw,va

;вставляем код в EXE-файл по адресу,

;который содержится в переменной 'raw'

putcode @raw@, 60@decoder@6168@va_oep@E800000000C3C3

;изменим oep на адрес начала нашего кода

;в созданной секции

setoep @va@

;разблокируем возможность записи в секции

setflag C0000020

;выведем на экран сообщение

messagebox New oep: @va@,64

Как видишь, то, что пишут Си-кодеры целый день и отлаживают неделю, мы в состоянии наколбасить за полчаса, включая время отладки. Ладно, это мы отвлеклись. Как же работает скрипт? Все просто! Определяем точку входа и ксорим первые 10 байт, затем копируем дескриптор в переменную decoder. Создаем новую секцию и добавляем туда декодер и переход на OEP. Если тебя смутила запись "60@decoder@6168@va_oep@E800000000C3C3", то объясняю:

60 - опкод команды ассемблера pushad

61 - опкод команды ассемблера popad

68@va_oep@ - push @va_oep@

E800000000 - push 0

C3 – ret

Этот извратный jmp используется в некоторых протекторах для того, чтобы скрыть переход. Вот, в общем, и все, что я хотел тебе рассказать.

Немного практики и, вероятно, ты будешь оптимизировать с помощью данного скриптового языка многие свои (и не свои) задачи по обработке PE-файлов.

[использование скриптов]

Ну вот, написал ты скрипты, поставил последнюю команду и первая твоя мысль: а куда это все класть? И правда. О самом главном я так и не сказал. Все скрипты необходимо сохранять в таком формате: "<имя скрипта>.fix". Теперь полученный нами скрипт копируем в папку Scripts. Она находится в той папке, в которую ты установил DotFix FakeSigner (если еще не установил - вставляй ту круглую хренотень, что валялась в пакете вместе с журналом, в корпус или открывай http://fakesigner.dotfix.net).

Теперь самое время запустить DotFix и выбрать любой EXE-файл, затем в списке скриптов выбрать нужный и нажать кнопку Patch. Скрипт начнет выполняться. Рекомендую во всех скриптах вначале писать запрос у пользователя, а то вдруг он не по ошибке запустил скрипт. Это, так сказать, правило хорошего тона. Также рекомендуется в скриптах предусматривать бэкап исходного файла и возможность его восстановления в случае ошибки скрипта (для этого подойдут команды copyfile и delfile). Советую предусмотреть консольный интерфейс и возможность сохранения предпочтений юзера в реестр. Соблюдая эти советы, можно написать действительно невероятно удобный скрипт.

[хочу компилятор]

Разобравшись со скриптовым языком, ты наверняка напишешь что-нибудь мощное, новое, продвинутое. И у тебя возникнет вопрос: а нельзя ли этот скрипт превратить в нормальный PE-экзешник, независимый от FakeSinger’а? Обрадую тебя, над этим вопросом автор уже работает, и, думаю, в одной из ближайших версий DotFix FakeSigner'а появится компилятор скриптов в EXE-файле. Так что можешь уже начинать писать свой суперскрипт! А если не хватает команд - пиши мне, буду расширять язык нужными операторами и командами.

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