Защита ActiveMark в игре Robot Arena

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Hex

На конкурсе компьтерных вирусов победил новый полиморфный вирус, который 20 раз выводит на экран надпись «Hello World!», а затем уничтожает мир.

Activemark тут ваще наглый, дает поиграться тока 10 минут. Это тока робота собрать успеваешь — уже выходить надо. И даже сейвится не дает 🙁

Инструменты: TRW2000 и Hiew

Веселая такая это вещь. Айс не любит, причем каким-то способом похожим на тот что в SEPP. FrogSice такого не знает. На OpenProcess отвечает самоуничтожением. Т.е. ни дамп тебе снять ни импорт восстановить… Мне это уже надоедать стало как-то… Все норовят одно и тоже сделать.

Раз с айсом под 98 такие проблемы — есть 2 выхода:

1) Уйти в win 2k (там почему-то половина фокусов ActiveMark не пашет)

2) Взять TRW 2k

Магическое 2к 🙂 Я решил взять TRW, потому что он у мя был 🙂 А винду надо ставить.

Для тех кто не видел TRW:

TRW это дебагер по функциональности сравнимый с Softice. Интерфейс один в один, команды тоже на 90% похожи. Многие разработчики защит забывают про это чудо, и направляют все усилия на то чтоб любой ценой поймать айс, чем оставляют огромную дыру для TRW 🙂 Чем хорош TRW? Запускается прям из винды. Т.е. как обычная прога (я знаю что softice из driverstudio тоже можно запустить в manual режиме, а у мя не из DS и еще win98, а не 2k). Когда не нужен — можно его спокойно закрыть и работать без дебагера 🙂 Т.е. запустил прогу без дебагера, а потом запустил TRW и пошел дебагить 🙂 Loader у TRW гораздо круче. Он всегда загружает exe и останавливает на EP, не то что айсовский… пока ему не поставишь атрибут E0000060 на секцию кода — работает через раз 🙁 Чо ж его все не юзают? А потому что сырой он… Нету back trace, нету bpr, proc тоже глючная. Низя делать брейкпоинты с условиями 🙁 И есть еще не мало мелочей софтайса, которые перебивают все достоинства TRW. Жалко что на него(TRW) забили и больше не делают 🙁 Вызыва

ется оно через CTRL-M, ну а выход стабильно F5.

Ищем OEP

Итак отрубаем айс. Запускаем TRW. Загружаем robot_arena.exe через Loader. Теперь для поисков oep заюзаем такую фичу: указатель стека на OEP(после распаковки) должен быть такой же как и в момент когда EIP=EP (который в PE) Т.е. не выполняем ни одной команды, а ставим bpm ESP-4. Ну дальше F5. Первое срабатывание это явно не то, видно что это все еще код распаковщика… А вот потом начнет срабатывать много раз в коде распаковщика по одному и тому же адресу. Это оно в цикле срабатывает. Тут уже ему нужно помочь. После выхода из цикла оно через JMP прыгнет на кусок где будут несколько циклов. Пролистав вниз можно увидеть команду JMP 479DD5 Это и есть OEP.

Тут надо бы прогу зациклить и снять дамп… Но не тут-то. Процдампом не покатит. Прога сразу закроется — это раз. Вовторых вы получите кривой дамп, я так понял этот Activemark гдето запускает чо-то типа thread слежения который все портит 🙁 Дампить надо из TRW. Пришлось найти плагин 🙂 Вот кстати линк на TRW с плагином для дампа:

http://hex.warp0.com/trw122.zip

Дампер, это конечно хорошо, но тут он глюкавый 🙂 Скока я не пытался, но дампы размером более $A0000 этим дампером у мя сделать не вышло, а иногда даже и такого размера делать не дает… С чем связано — хз. Но сам TRW кричит «No free heap» Так что я просто по кусочкам снял дамп, а потом в волкове соединил. Дальше я сделал дампу Rebuild PE в Procdump и принялся за импорт.

Импорт

С импортом я задолбался… И так и эдак, и Imprec и Revirgin — нихрена они не работают 🙁 Попробуйте как-нить сами в win 98 восстановите импорт для Activemark защиты этими реконструкторами… Я обиделся на них и начал уже было писать свою прогу для восстановления импорта, но тут пришла мысля: «А чо б не выдрать кусок который импорт создает внутри самого activemark?». IAT начинается с 647000 ну я и сделал bpm 647000 и начал смотреть, когда ж туда начнут записывать адреса API… А происходит это вот тут:

????????:0064C180 mov eax, [edi]

????????:0064C182 or eax, eax

????????:0064C184 jz short loc_64C1CB

????????:0064C186 mov ebx, [edi 4]

????????:0064C189 lea eax, [eax esi 24DD60h]

????????:0064C190 add ebx, esi

????????:0064C192 push eax

????????:0064C193 add edi, 8

????????:0064C196 call dword ptr [esi 24DEC8h] — LoadLibraryA

????????:0064C19C xchg eax, ebp

????????:0064C19D

????????:0064C19D loc_64C19D: ; CODE XREF: ????????:0064C1C3j

????????:0064C19D mov al, [edi]

????????:0064C19F inc edi

????????:0064C1A0 or al, al

????????:0064C1A2 jz short loc_64C180

????????:0064C1A4 mov ecx, edi

????????:0064C1A6 jns short near ptr loc_64C1AE 1

????????:0064C1A8 movzx eax, word ptr [edi]

????????:0064C1AB inc edi

????????:0064C1AC push eax

????????:0064C1AD inc edi

????????:0064C1AE

????????:0064C1AE loc_64C1AE: ; CODE XREF: ????????:0064C1A6j

????????:0064C1AE mov ecx, 0AEF24857h

????????:0064C1B3 push ebp

????????:0064C1B4 call dword ptr [esi 24DECCh] — GetProcAddress

????????:0064C1BA or eax, eax

????????:0064C1BC jz short loc_64C1C5

????????:0064C1BE mov [ebx], eax

????????:0064C1C0 add ebx, 4

????????:0064C1C3 jmp short loc_64C19D

????????:0064C1C5 ; —————————————————————————

????????:0064C1C5

????????:0064C1C5 loc_64C1C5: ; CODE XREF: ????????:0064C1BCj

????????:0064C1C5 call dword ptr [esi 24DED0h] — никогда не вызывается 🙂

????????:0064C1CB

????????:0064C1CB loc_64C1CB: ; CODE XREF: ????????:0064C184j

????????:0064C1CB popa

????????:0064C1CC jmp near ptr unk_56A02A — а это прыжок на OEP

То есть перед тем как прыгнуть к OEP оно создает импорт. Ну так и прекрасно. Сделаем так чтоб entry point был началом создания импорта а дальше прога сама запустится 🙂 Делаем так:

????????:0064C174 pusha

????????:0064C175 mov esi, offset unk_401000

????????:0064C17A mov edi, offset unk_64A000

????????:0064C17F nop

И oep=0064C174. Это я просто глянул какие значения регистров были в оригинальном exe перед созданием импорта и вот так вот тупо их при старте задал 🙂

Все! Импорт есть!

Дамп запустился… Вылезла табличка о том что ActiveMark нету — не запущусь :Р Это дело 2 джампов 🙂 Первый = 56А252, Второй = 56A2AC. Главное не дать RaiseException сделать. И все рульно работает.

P.S. Если дамп пашет когда проходите дебагером, а когда запускаете файл просто так, то зависает — перезагрузите комп и все будет нормально 🙂 Activemark чо-то такое творит 🙂

P.S.S. Robot Arena на самом деле дважды защищен. Первый слой — распаковка Activemark. Второй слой — сам Activemark(т.е. контроль лицензий и т.д.). И только потом он прыгает на OEP самого Robot Arena. Почему бы не прыгнуть сразу на OEP самого Robot Arena? Не выйдет, т.к. кроме импорта Activemark еще и инициализирует критические секции (Critical Sections) которые Robot Arena уже сразу юзает, не инициализируя. Поэтому приходится проходить через слой Activemark 🙁

P.S.S.S. А ваще игрушка прикольная, по передаче Robotica с Discovery сделана. Строишь боевых роботов, а потом пилишь, режешь, крушишь, протыкаешь насквозь, таранишь… ну в общем хорошо время проводишь 🙂

{/codecitation}

Добавить комментарий