Распаковка Aspack 1.08.04 Автор : figugegl Перевод и редакция: NightCat^t53 Инструменты : Softice, Procdump, LordPE, Hexeditor, Filescanner Уровень сложности : 4 Как обычно мы загружаем наш файл в любимый анализатор Файлов - я всегда использую FileinsPEctor XL. Мы видим, что программа запакована Aspack 1.08.04. Так же мы глянем на импорты. Их там только 4, среди них есть GetProcAddress. Ленивый крэкер берёт в руки Caspr и аптоматом распаковывает программу, но мы собираемся пойти другим путём. Я сперва всегда пытаюсь распаковать программу руками, и если у меня не получается, то лишь тогда я беру апоматический распаковщик. Итак, у нас есть программа, мы узнали, что она запакована и теперь будем распаковывать. Я буду распаковать крэкми, но на любой программе принцим один и тот же. Загуржаем Icedump, ставим bpx GetProcAddress в Softice и запускаем программу. Softice выскакивает тут: 0167:00413063 53 PUSH EBX 0167:00413064 50 PUSH EAX 0167:00413065 FF95284B4400 CALL [EBP+00444B28] 0167:0041306B 898528404400 MOV [EBP+00444028],EAX ; si тут вот выскакивает 0167:00413071 8D9D4A4A4400 LEA EBX,[EBP+00444A4A] 0167:00413077 53 PUSH EBX 0167:00413078 57 PUSH EDI 0167:00413079 FF95284B4400 CALL [EBP+00444B28] 0167:0041307F 89852C404400 MOV [EBP+0044402C],EAX 0167:00413085 8D85C1394400 LEA EAX,[EBP+004439C1] 0167:0041308B FFE0 JMP EAX 0167:0041308D 00F0 ADD AL,DH Мы начинаем трейститься , всегда нежно искать call к адресу 40xxxx. Вскоре находим call edi, где edi = 401000: 0167:0041311A 8B3E MOV EDI,[ESI] 0167:0041311C 03BD284A4400 ADD EDI,[EBP+00444A28] 0167:00413122 FF37 PUSH DWORD PTR [EDI] 0167:00413124 C607C3 MOV BYTE PTR [EDI],C3 0167:00413127 FFD7 CALL EDI ; call 401000 0167:00413129 8F07 POP DWORD PTR [EDI] Заходим в call с , но видим только комманду ret - похоже, что это маленький трюк, чтобы сбить с толку крэкера. Тут есть еще парочка "задних джампов", в этом случае мы ставим bpx на инструкцию следующую за джампом и запускам Softice с . Но мы должны деактивировать все остальные breakpoints, дабы предотвратить остановку Softice по одному и тому же адресу несколько раз. В конце концов мы попадаем к джампу на оригинальную точку входа(OEP). Ну вообще это не jump а return, но с тем же эффектом: 0167:004133A0 B800100000 MOV EAX,00001000 0167:004133A5 50 PUSH EAX 0167:004133A6 0385284A4400 ADD EAX,[EBP+00444A28] 0167:004133AC 59 POP ECX 0167:004133AD 0BC9 OR ECX,ECX 0167:004133AF 8985F13C4400 MOV [EBP+00443CF1],EAX 0167:004133B6 7508 JNZ 004133C0 0167:004133B8 B801000000 MOV EAX,00000001 0167:004133BD C20C00 RET 000C 0167:004133C0 6800104000 PUSH 00401000 ; адрес OEP 0167:004133C5 C3 RET ; прыжок на OEP Дамп. Теперь мы дампим файл. Но перед тек, как это сделать мы ставим зацикливаем программу. Напечатайте: "a jmp eip ". Теперь давайте сделаем полный дамп с помощью Procdump. В опциях - Import section мы отмечаем "rebuild new import table", обычно это помогает получить полнстью рабочую программу и листинг импортированных функций. МЫ почти закончили: нам осталось только подкорректировать точку входа. Загружаем сдампленный фалй в Procdump'овский PE-Editor и выставляем EP: OEP - Image Base = 401000h - 400000h = 1000h Мы запускаем программу и ОНА РАБОТАЕТ!