Ручная распаковка SPLayer v0.08 by Jibz

Автор......: SMoKE
Перевод....: NiGHTCAT \\ TEAM FIFTY THREE
Цель.......: PEiD v0.93 (build 01.30.2005) (PEiD.exe)
URL........: http://www.peid.tk
Инструменты: OllyDbg, ImpRec, OllyDump (или другой дампер)

Сегодня мы будем распаковывать пакер, который я никогда не видел. Вроде
это какой-то приватный пакер.

Загрузите peid.exe в Оlly...

00425FDA LEA EAX,DWORD PTR DS:[EAX]
00425FDD MOV ECX,PEID.00425FCC
00425FE2 PUSH 0E
00425FE4 POP EAX
00425FE5 ROR BYTE PTR DS:[ECX+EAX],4
00425FE9 DEC EAX
00425FEA JNZ SHORT PEID.00425FE5
00425FEC ADC SI,AX
00425FEF XCHG EAX,ECX
00425FF0 CMP EBX,ECX
00425FF2 CMP EDX,6CFBD0B0
00425FF8 JMP SHORT PEID.00425FCC

Трейсимся до jump'a, если у вас что-то подобое:

00425FCC MOV ECX,24FCC
00425FD1 SUB EAX,ECX
00425FD3 XOR BYTE PTR DS:[EAX+ECX],CL
00425FD6 DB E2
00425FD7 DB FB
00425FD8 DB 50                                    ;  CHAR 'P'
00425FD9 DD PEID.0040D8C3
00425FDD MOV ECX,PEID.00425FCC

Затем делаем так:

правый клик --> Analysis --> Remove analysis from module

теперь вы должны видеть что-то такое:

00425FCC MOV ECX,24FCC
00425FD1 SUB EAX,ECX
00425FD3 XOR BYTE PTR DS:[EAX+ECX],CL
00425FD6 LOOPD SHORT PEID.00425FD3
00425FD8 PUSH EAX
00425FD9 RETN

продолжаем трейсится...

вы можете обойти инструкцию loopd, написав в коммандной строке G EIP+2,
когда вы находитесь как раз на "loopd"...

после "ret" вы увидите...

00401000 MOV EAX,PEID.004797E8
00401005 PUSH EAX
00401006 PUSH DWORD PTR FS:[0]
0040100D MOV DWORD PTR FS:[0],ESP
00401014 XOR EAX,EAX
00401016 MOV DWORD PTR DS:[EAX],ECX

так что загрузчик ставит новый exception handler на адрес 4797E8, а уже
потом пытается записать по адресу 00000000, так что вы получите "access
violation"  и  работа  продолжится  с  4797E8,  как  же  это  отловить?

Вы  можете  просто  поставить  брейкпоинт на 4797E8 и когда вы получите
исключение, нажмите SHIFT+F9 и попадёте на адрес 4797E8, потом трейсясь
(и колбасясь - NCat :) и пропуская "loopd инструкции" с помошью G EIP+2
вы пройдёте через всююююю процедуру декриптовки, в конце окажетесь тут:

00479584 MOV EAX,FFBA8468
00479589 LEA ECX,DWORD PTR DS:[EAX+8D113F]
0047958F MOV DWORD PTR DS:[ECX+1],EAX
00479592 MOV EDX,DWORD PTR SS:[ESP+4]

Однако если вы не изъявляете особо острого желания так долго идти через
"всююююю процедуру декриптовки" (NCat - ;)) - просто  нажмите SHIFT+F8,
когда у вас появилось исключение и вы на паузе.

Вы ТУТ: ->

004795A7 MOV EAX,FFBA8468
004795AC POP DWORD PTR FS:[0]
004795B3 ADD ESP,4
004795B6 PUSH EBP
004795B7 PUSH EBX

Скроллим  вниз (все  call'ы  это  процедуры  распаковки и пропатчивания
import table) и наконец влетаем сюда:

00479647 MOV EAX,ESI
00479649 POP EDX
0047964A POP ESI
0047964B POP EDI
0047964C POP ECX
0047964D POP EBX
0047964E POP EBP
0047964F JMP EAX

последний jmp - это прыжо на вашу OEP, так что тепеь вы на ней ;)

00455F1E PUSH 60
00455F20 PUSH PEID.0042F508
00455F25 CALL PEID.004577DC
00455F2A MOV EDI,94
00455F2F MOV EAX,EDI

Сдампьте  процесс  БЕЗ  перестройки  импорта,  закройте Оlly. Запустите
peid.exe и ImpRec, выберите  этот  процесс  из  списка,  в  строке  OEP
напишите  значение  OEP  RVA,  которое  вы только что получили - 55F1E.
 
Нажмите IAT AutoSearch -> Get Imports, как видим все строки нормальные,
так что нажимайте  "fix dump"  и  выберите  вас  сдампленный  екзешник.

Скрестите пальцы и запускайте дамп... РАБОТАЕТ!
Проверим с помощью PEiD... Microsoft Visual C++ 7.0  :)))


23:02 14.04.05

freenet.am/~softland
smoke@freenet.am

t53cd@gmail.com

=======================================================================
TEAM-53  TUTORiALs  \ \  www.BSUiR.com  \ \  #team-53 ,  IRC.BYNETS.ORG
=======================================================================