Автор: SouL <art_a @ bk.ru>
04.01.04
Не знаю как вам но мне это напомнило ORiEN - тоесть прога наша запакована ORiEN 2.x. Ну что, будем распаковывать.
0167:00504974 B8DEA00400 MOV EAX,0004A0DE <-в eax заносится OEP, запишим его 0167:00504979 83F800 CMP EAX,00 0167:0050497C 7413 JZ 00504991 0167:0050497E 0500004000 ADD EAX,00400000 0167:00504983 EB08 JMP 0050498D 0167:00504985 49 DEC ECX 0167:00504986 E524 IN EAX,24 0167:00504988 1520FFE0CD ADC EAX,CDE0FF20 0167:0050498D EBFB JMP 0050498A <-здесь идет прыжок на OEP 0167:0050498F EB10 JMP 005049A1 0167:00504991 33C0 XOR EAX,EAX 0167:00504993 EB06 JMP 0050499B 0167:00504995 43 INC EBX 0167:00504996 66B883C0 MOV AX,C083 0167:0050499A 0083E8FFC200 ADD [EBX+00C2FFE8],AL 0167:005049A0 00E9 ADD CL,CHПроходим по F10 до 0050498D. Даем команду айсу: a eip Enter и jmp eip 2 раза enter,F5. Этой командой мы зациклили програму в памяти. Теперь самое время сдампить наш процесс. Открываем LordPe выбираем наш процесс и делаем ему Dump Full... и KillTask...Запускаем нашу прогу(givemetoo.exe) и ImpRec 1.6 FINAL. В imprec выбираем наш процесс(givemetoo), в OEP вводим 0004a0de, жмём IAT Autisearch и GetImport. Из импорта не восстановится только одна функция. Щёлкаем на ней и выбираем Cut thunks. Нажимаем FixDump и указываем наш сдампленый файл(dumped.exe). Теперь нужно загрузить уже распакованый и с восстановленным импортом файл в PE Editor и посмотреть чтобы размер заголовка (Size of Headers) был правильным, тоесть он должен быть =0004a0de. Все программа распакована, запускается и готова для дальнейшего исследования.
|:00408F15(C) <-------------отсюда вызывается наше unregistered * Possible Reference to String Resource ID=57685: "UNREGISTERED VERSION" :00408F2E 6855E10000 push 0000E155 :00408F33 8D4C2408 lea ecx, dword ptr [esp+08]Смотрим что там у нас:
:00408F12 833925 cmp dword ptr [ecx], 00000025 :00408F15 7517 jne 00408F2E :00408F17 6880FB4600 push 0046FB80 :00408F1C 8D8E98040000 lea ecx, dword ptr [esi+00000498] * Reference To: mfc42.HeapFree, Ord:035Ah :00408F22 E831080400 Call 00449758 :00408F27 6850FC4600 push 0046FC50 :00408F2C EB23 jmp 00408F51По адрессу 00408F15 условный переход забиваем nop'ами. Для этого открываем программу в hview и проделываем все выше изложенное. Теперь уберем напоминание о регистрации. Активируем Sice(CTRL+D) и ставим бряк на функцию bpx GetWindowTextA, F5. Запускаем нашу программу, выскакивает айс. Жмем F5 23 раза, потом F12 около 30 раз. Короче должны вы попасть вот здесь:
:004087D2 FF15D8FA4400 Call dword ptr [0044FAD8] :004087D8 A164FC4600 mov eax, dword ptr [0046FC64] :004087DD 833825 cmp dword ptr [eax], 00000025 :004087E0 7441 je 00408823 <-----наш переход :004087E2 8B842498000000 mov eax, dword ptr [esp+00000098] :004087E9 85C0 test eax, eax :004087EB 7536 jne 00408823 :004087ED 6A00 push 00000000 :004087EF 8D8C24C0000000 lea ecx, dword ptr [esp+000000C0] :004087F6 E8F5760100 call 0041FEF0 <-----вызов напоминания :004087FB 8D8C24BC000000 lea ecx, dword ptr [esp+000000BC]Все что нам остатется - это поменять условный переход по адрессу 004087E0 на безусловный.
P.S. изв. за орфагрофические ошибки, синт. и др. Все писалось после нового года
:)
Автор статьи SouL
04.01.04
Материалы находятся на сайте http://cracklab.narod.ru/doc/