'1.3.08.24'에 해당되는 글 1건

  1. 2009.01.24 ASProtect 1.23 RC4 - 1.3.08.24 by CEOinIRVINE 1

############################################

stolen bytes가 있는 버전에 대한 해법입니다.

############################################

 

대상 : 입문용+

타겟 : Web Stream Recorder v1.0 Beta 3 (http://www.sytexis.com/) or here

도구 : Soft-Ice 4.05 B334

       Ice-Dump

       Pe-Editor 1.7

       ImportRec & Revergine 1.6 final

       Hiew 6.x (핵스 에디터)

환경 : Win 98 SE

 

 이번에 살펴볼 것은 ASProtect 1.23 RC4 - 1.3.08.24 입니다. 가장 최근 버전이죠. 이 버전의 가장 큰 어려움은 stolen bytes 를 찾는 것입니다. 사실 stolen bytes 는 예전 copywrite님이 올리신 '새로운 형태의 Asprotect' 라는 글에서 예견되었던 것입니다. 다만 그 문서의 타겟이 되었던 프로그램의 경우 stolen bytes 가 지워지지 않아, iceDump 의 LastBranch를 통해 찾아갈 수 있었습니다. 하지만 지금의 경우는 조금 다릅니다. 즉 stolen bytes가 OEP로 점프된 이후에는 junk code 들로 인해 코드가 변경되기 때문에 알 수가 없습니다. 그럼 이제 stolen bytes 에 대해 알아보죠.
 
 

원래 프로그램은 통상,
 

55              PUSH EBP
8BEC            MOV EBP,ESP
6AFF            PUSH FFFFFFFF
6800000000      PUSH 00000000  ; needs updating
6800000000      PUSH 00000000  ; needs updating
some codes.........

 

 이런식으로 시작됩니다. 그런데 asprotect의 경우 이러한 시작부분을 미리 실행시킨 후 some codes 부분으로 바로 점프해옵니다. 또한 위 코드 중 push 00000000 부분에서 00000000 는 프로그램마다 다른 값이 들어가므로, 이것을 아는 것이 중요합니다. 즉 stolen bytes를 모른체로 덤프를 해봤자 소용이 없음을 뜻하죠. 또한 사실 새로운 형태의 asprotect의 경우에도 이러한 stolen bytes만 밝혀내면 예전과 동일한 방식으로 언팩킹이 가능합니다. 그럼 실제적인 작업을 시작해보죠.

 

1. 우선은 OEP를 찾아야 합니다. 이 OEP는 기존의 방법대로 /tracex를 이용해서 찾을 수 있습니다. 다만 새로운 버전의 경우 auto tracer trick(ATT)가 여러번 있어, 여러번 리턴을 해줘야 하는 번거로움이 있습니다. 이 ATT라는 것은 사실 별 문제가 되지 않습니다. 그것들의 루틴을 살펴보면, 바로 리턴되는 것이 특징이죠. 귀찮을 뿐이지 문제가 되진 않습니다. 하지만 /tracex를 사용할 경우 시간이 오래 걸립니다. 언팩킹에서 이러한 작업은 상당히 지루한 것이죠. 특히나 다시 덤프해야 할 때 정말 짜증납니다.

그래서 우린 copywrite 님의 빠른 OEP 접근법을 사용할 겁니다. 자 시작해보죠. 우선 다음과 같이 중단점을 설정하고,

bpx createfilea do "dd esp+38"

그리고 나서 프로그램을 실행시킨 후 데이터 윈도창의 주소가 asprotect 루틴이 나올 때까지 F5를 눌러줍시다. 그러고 나면,

 

EAX=0068FCE9   EBX=0003676B   ECX=01015E18   EDX=0003676B   ESI=0003676B        

EDI=FFFFFFFF   EBP=0068FCC0   ESP=0068FC80   EIP=BFF77B5B   o d I S z a P c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FCB8 01015E18  01003CBB  0068FDF4  01003D6A      .^...<....h.j=..      

0177:0068FCC8 000015A6  0068FF68  01003F4B  0068FDF4      ....h.h.K?....h.      

0177:0068FCD8 00FF0000  00FD0000  01004138  00000000      ........8A......      

0177:0068FCE8 5C3A4390  474F5250  204D4152  454C4946      .C:\PROGRAM FILE      

0177:0068FCF8 59535C53  49584554  4F532053  41575446      S\SYTEXIS SOFTWA      

0177:0068FD08 575C4552  53204245  41455254  4552204D      RE\WEB STREAM RE      

0177:0068FD18 44524F43  575C5245  43455253  4544524F      CORDER\WSRECORDE      

-----KERNEL32!GetFullPathNameA+0046--------------------------------------PROT32-

016F:BFF77B56  E94C500000          JMP       BFF7CBA7                           

KERNEL32!CreateFileA                                                            

016F:BFF77B5B  57                  PUSH      EDI                                

016F:BFF77B5C  6827010000          PUSH      00000127                           

016F:BFF77B61  2BD2                SUB       EDX,EDX                            

016F:BFF77B63  684320FABF          PUSH      BFFA2043                           

016F:BFF77B68  64FF32              PUSH      DWORD PTR FS:[EDX]                 

016F:BFF77B6B  648922              MOV       FS:[EDX],ESP                       

016F:BFF77B6E  8B7C2414            MOV       EDI,[ESP+14]                       

016F:BFF77B72  2BC0                SUB       EAX,EAX                            

016F:BFF77B74  8D48FF              LEA       ECX,[EAX-01]                       

016F:BFF77B77  F2AE                REPNZ SCASB                                  

016F:BFF77B79  8B4C2420            MOV       ECX,[ESP+20]                       

016F:BFF77B7D  E305                JECXZ     BFF77B84                           

016F:BFF77B7F  8A01                MOV       AL,[ECX]                           

016F:BFF77B81  8A410B              MOV       AL,[ECX+0B]                        

016F:BFF77B84  648F02              POP       DWORD PTR FS:[EDX]                 

016F:BFF77B87  83C408              ADD       ESP,08                             

016F:BFF77B8A  5F                  POP       EDI                                

016F:BFF77B8B  E978790000          JMP       BFF7F508                           

KERNEL32!SetFileAttributesA                                                     

016F:BFF77B90  2BD2                SUB       EDX,EDX                            

016F:BFF77B92  68EB1FFABF          PUSH      BFFA1FEB                           

016F:BFF77B97  64FF32              PUSH      DWORD PTR FS:[EDX]                 

016F:BFF77B9A  648922              MOV       FS:[EDX],ESP                       

016F:BFF77B9D  8B4C240C            MOV       ECX,[ESP+0C]                       

016F:BFF77BA1  E302                JECXZ     BFF77BA5                           

------------------------------------KERNEL32!_FREQASM+6B56----------------------

WINICE: Load32  Obj=0001 Add=016F:BFE11000 Len=0000A000 Mod=IMM32               

WINICE: Load32  Obj=0002 Add=0177:BFE1B000 Len=00001000 Mod=IMM32               

WINICE: Load32  Obj=0003 Add=0177:BFE1C000 Len=00001000 Mod=IMM32               

WINICE: Load32  Obj=0004 Add=0177:BFE1D000 Len=00005000 Mod=IMM32               

WINICE: Load32  Obj=0005 Add=0177:BFE22000 Len=00001000 Mod=IMM32               

Break due to BPX KERNEL32!CreateFileA  DO "dd esp+38"                           

Break due to BPX KERNEL32!CreateFileA  DO "dd esp+38"                           

:/screendump c:\dump\wsr_1.txt                                                  

                                                                                

Invalid command                                                         Wsrecord

 

그리고 나서 데이터 창에 나타난 주소가 실행되는 순간을 잡아봅시다. 그전에 다른 중단점은 모두 지워 버리구요.

bpr 1015E18 1015E18+2 rw if eip==1015E18 do "d esp"

그리고 다시 F5 하고 데이터 창을 봅시다. 그러면 400000 이라는 값이 들어가 있을 겁니다.

 

EAX=00444886   EBX=01004138   ECX=01019A1C   EDX=0068FF68   ESI=00FD0000        

EDI=00FF0000   EBP=0068FE08   ESP=0068FDD8   EIP=01015E18   o d I s Z a P c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  D58A0195  0068FE1C      ..@..HD.......h.      

0177:0068FE08 0068FE10  01003A48  00444476  00000000      ..h.H:..vDD.....      

0177:0068FE18 0044486E  00000000  8193BC10  0068FF78      nHD.........x.h.      

0177:0068FE28 0068FE3C  00580000  8193BC70  8193BC30      <.h...X.p...0...      

0177:0068FE38 00401000  BFF8B6E6  00000000  8193BC10      ..@.............      

-------------------------------------------------------------------------PROT32-

016F:01015E18  E80D000000          CALL      01015E2A                           

016F:01015E1D  91                  XCHG      EAX,ECX                            

016F:01015E1E  F6F7                DIV       BH                                 

016F:01015E20  64CD82              INT       82                                 

016F:01015E23  93                  XCHG      EAX,EBX                            

016F:01015E24  D0C9                ROR       CL,1                               

016F:01015E26  CE                  INTO                                         

016F:01015E27  EF                  OUT       DX,EAX                             

016F:01015E28  FC                  CLD                                          

016F:01015E29  858BD858E80C        TEST      [EBX+0CE858D8],ECX                 

016F:01015E2F  0000                ADD       [EAX],AL                           

016F:01015E31  00943D32830039      ADD       [EDI+EBP+39008332],DL              

016F:01015E38  7EDF                JLE       01015E19                           

016F:01015E3A  2CF5                SUB       AL,F5                              

016F:01015E3C  8AFB                MOV       BH,BL                              

016F:01015E3E  6856173319          PUSH      19331756                           

016F:01015E43  58                  POP       EAX                                

016F:01015E44  5A                  POP       EDX                                

016F:01015E45  0FBFF9              MOVSX     EDI,CX                             

016F:01015E48  81C288150000        ADD       EDX,00001588                       

016F:01015E4E  66BF9238            MOV       DI,3892                            

016F:01015E52  682B050000          PUSH      0000052B                           

016F:01015E57  81EBD5D3A77B        SUB       EBX,7BA7D3D5                       

016F:01015E5D  5E                  POP       ESI                                

016F:01015E5E  0F8912000000        JNS       01015E76                           

016F:01015E64  0F890C000000        JNS       01015E76                           

016F:01015E6A  E907000000          JMP       01015E76                           

--------------------------------------------------------------------------------

Break due to BPX KERNEL32!CreateFileA  DO "dd esp+38"                           

Break due to BPX KERNEL32!CreateFileA  DO "dd esp+38"                           

:/screendump c:\dump\wsr_1.txt                                                  

:bc *                                                                           

:bpr 1015e18 1015e18+2 rw if eip==1015e18                                       

Break due to BPR #0177:01015E18 #0177:01015E1A RW IF (EIP==0x1015E18)           

:d esp                                                                          

:/screendump c:\dump\wsr_2.txt                                                  

                                                                                

Invalid command                                                         Wsrecord

 

그리고 나서,

bpm esp

다시 F5 하면 ,

 

EAX=5A007EB5   EBX=00400000   ECX=4605585B   EDX=01015F0E   ESI=00000000        

EDI=4605585B   EBP=0068FE08   ESP=0068FDDC   EIP=01015F13   o d I s z A p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  D58A0195  0068FE1C      ..@..HD.......h.      

0177:0068FE08 0068FE10  01003A48  00444476  00000000      ..h.H:..vDD.....      

0177:0068FE18 0044486E  00000000  8193BC10  0068FF78      nHD.........x.h.      

0177:0068FE28 0068FE3C  00580000  8193BC70  8193BC30      <.h...X.p...0...      

0177:0068FE38 00401000  BFF8B6E6  00000000  8193BC10      ..@.............      

-------------------------------------------------------------------------PROT32-

016F:01015F12  5B                  POP       EBX                                

016F:01015F13  58                  POP       EAX                                

016F:01015F14  05469F54A7          ADD       EAX,A7549F46                       

016F:01015F19  5C                  POP       ESP                                

016F:01015F1A  EB44                JMP       01015F60                           

016F:01015F1C  EB01                JMP       01015F1F                           

016F:01015F1E  9A51579CFCBF00      CALL      00BF:FC9C5751                      

016F:01015F25  0000                ADD       [EAX],AL                           

016F:01015F27  00B900000000        ADD       [ECX+00000000],BH                  

016F:01015F2D  F3AA                REPZ STOSB                                   

016F:01015F2F  9D                  POPFD                                        

016F:01015F30  5F                  POP       EDI                                

016F:01015F31  59                  POP       ECX                                

016F:01015F32  C3                  RET                                          

016F:01015F33  55                  PUSH      EBP                                

016F:01015F34  8BEC                MOV       EBP,ESP                            

016F:01015F36  53                  PUSH      EBX                                

016F:01015F37  56                  PUSH      ESI                                

016F:01015F38  8B750C              MOV       ESI,[EBP+0C]                       

016F:01015F3B  8B5D08              MOV       EBX,[EBP+08]                       

016F:01015F3E  EB11                JMP       01015F51                           

016F:01015F40  0FB703              MOVZX     EAX,WORD PTR [EBX]                 

016F:01015F43  03C6                ADD       EAX,ESI                            

016F:01015F45  83C302              ADD       EBX,02                             

016F:01015F48  8BD0                MOV       EDX,EAX                            

016F:01015F4A  8BC6                MOV       EAX,ESI                            

016F:01015F4C  E80C000000          CALL      01015F5D                           

--------------------------------------------------------------------------------

:/screendump c:\dump\wsr_2.txt                                                  

:bl                                                                             

00)   BPR #0177:01015E18 #0177:01015E1A RW IF (EIP==0x1015E18)                  

:bc *                                                                           

:bpm esp                                                                        

Break due to BPMB #0177:0068FDD8 RW DR3                                         

:bc *                                                                           

:/screendump c:\dump\wsr_3.txt                                                  

                                                                                

Invalid command                                                         Wsrecord

 

여기에 중단점이 걸립니다.

여기서 바로 OEP로 가시려면 무수한 00 가 나올 때까지 코드창을 밑으로 내려봅시다. 그러면 아마도,
 

 

push 00000000

ret    

0000

0000

0000

.......

 

이런식으로 나올 겁니다. 그러면 push 00000000 에 중단점을 걸고 넘어가시면 되겠습니다. 하지만 우리의 경우 stolen bytes를 찾아야 하므로 F8을 눌러 진행합시다. 그러면 아래의 루틴이 나올건데요.

 

EAX=01016212   EBX=01017418   ECX=01016212   EDX=010162A4   ESI=01016212        

EDI=4605585B   EBP=0068FE0C   ESP=0068FE04   EIP=01016194   o d I s z a P c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=4297   GS=0000   DS:01017418=009C    

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  0101606C      ....8A......l`..      

0177:0068FDF8 00400000  00444886  010161A5  00000000      ..@..HD..a......      

0177:0068FE08 00000323  00B5807E  01016211  01017412      #...~....b...t..      

0177:0068FE18 01016212  00000000  8193A3A0  0068FF78      .b..........x.h.      

0177:0068FE28 0068FE3C  00580000  8193A400  8193A3C0      <.h...X.........      

0177:0068FE38 00401000  BFF8B6E6  00000000  8193A3A0      ..@.............      

-------------------------------------------------------------------------PROT32-

016F:01016186  C3                  RET                                          

016F:01016187  55                  PUSH      EBP                                

016F:01016188  8BEC                MOV       EBP,ESP                            

016F:0101618A  53                  PUSH      EBX                                

016F:0101618B  56                  PUSH      ESI                                

016F:0101618C  8B750C              MOV       ESI,[EBP+0C]                       

016F:0101618F  8B5D08              MOV       EBX,[EBP+08]                       

016F:01016192  EB11                JMP       010161A5                           

016F:01016194  0FB703              MOVZX     EAX,WORD PTR [EBX]                 

016F:01016197  03C6                ADD       EAX,ESI                            

016F:01016199  83C302              ADD       EBX,02                             

016F:0101619C  8BD0                MOV       EDX,EAX                            

016F:0101619E  8BC6                MOV       EAX,ESI                            

016F:010161A0  E80C000000          CALL      010161B1                           

016F:010161A5  66833B00            CMP       WORD PTR [EBX],00                  

016F:010161A9  75E9                JNZ       01016194                           

016F:010161AB  5E                  POP       ESI                                

016F:010161AC  5B                  POP       EBX                                

016F:010161AD  5D                  POP       EBP                                

016F:010161AE  C20800              RET       0008                               

016F:010161B1  0102                ADD       [EDX],EAX                          

016F:010161B3  C3                  RET                                          

016F:010161B4  03C3                ADD       EAX,EBX                            

016F:010161B6  BB23030000          MOV       EBX,00000323                       

016F:010161BB  0BDB                OR        EBX,EBX                            

016F:010161BD  7507                JNZ       010161C6                           

016F:010161BF  8944241C            MOV       [ESP+1C],EAX                       

--------------------------------------------------------------------------------

:/screendump c:\dump\wsr_2.txt                                                  

:bc *                                                                           

:bpm esp                                                                        

Break due to BPMB #0177:0068FDD8 RW DR3                                         

:bc *                                                                           

:/screendump c:\dump\wsr_3.txt                                                  

:bl                                                                             

:/screendump c:\dump\wsr_4.txt                                                  

                                                                                

Invalid command                                                         Wsrecord

 

저기서 jnz 다음의 명령에 브뽀를 걸어 반복루틴을 벗어납니다. 그리고 리턴후 도착해서 몇 번의 스텝인을 하다보면,

 

EAX=0101600A   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FF78   ESP=0068FE38   EIP=0101601E   o d I s z a P c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  01015F51  00000000      ..@..HD.Q_......      

0177:0068FE08 00000323  00B57E2A  01015FBD  010171BE      #...*~..._...q..      

0177:0068FE18 01015FBE  00000000  8193BC10  0068FF78      ._..........x.h.      

0177:0068FE28 0068FE3C  00580000  8193BC70  0101600A      <.h...X.p....`..      

0177:0068FE38 00401000  BFF8B6E6  00000000  8193BC10      ..@.............      

-------------------------------------------------------------------------PROT32-

016F:0101601E  EB01                JMP       01016021                (JUMP )    

016F:01016020  9A8D83D86F4883      CALL      8348:6FD8838D                      

016F:01016027  2EEB01              JMP       0101602B                           

016F:0101602A  0F81E888DA50        JNO       51DBE918                           

016F:01016030  CC                  INT       3                                  

016F:01016031  58                  POP       EAX                                

016F:01016032  6A60                PUSH      60                                 

016F:01016034  6830694200          PUSH      00426930                           

016F:01016039  2EEB01              JMP       0101603D                           

016F:0101603C  9A2EEB02CD2057      CALL      5720:CD02EB2E                      

016F:01016043  EB08                JMP       0101604D                           

016F:01016045  C9                  LEAVE                                        

016F:01016046  1F                  POP       DS                                 

016F:01016047  0D0BC91F0D          OR        EAX,0D1FC90B                       

016F:0101604C  0B6681              OR        ESP,[ESI-7F]                       

016F:0101604F  2D56600101          SUB       EAX,01016056                       

016F:01016054  DF8B                ESC                                          

016F:01016056  CA8D9A              RETF      9A8D                               

016F:01016059  6845600101          PUSH      01016045                           

016F:0101605E  5F                  POP       EDI                                

016F:0101605F  26EB01              JMP       01016063                           

016F:01016062  F083EC21            LOCK SUB  ESP,21                             

016F:01016066  EB02                JMP       0101606A                           

016F:01016068  CD20                INT       20 VXDCall 1D24,648D               

016F:0101606E  F2EB01              REPNZ JMP 01016072                           

016F:01016071  F289442400          REPNZ MOV [ESP+00],EAX                       

016F:01016076  EB01                JMP       01016079                           

--------------------------------------------------------------------------------

:bpm esp                                                                        

Break due to BPMB #0177:0068FDD8 RW DR3                                         

:bc *                                                                           

:/screendump c:\dump\wsr_3.txt                                                  

Break due to BPX #016F:01015F57                                                 

:bc *                                                                           

:.                                                                              

:/screendump c:\dump\wsr_stolen.txt                                             

                                                                                

Invalid command                                                         Wsrecord

 

 

 

위처럼 stolen bytes를 발견하게 됩니다. 이 값들을 잘 적어둡시다. 사실 이러한 stolen bytes를 발견하는 것은 코드하나하나를 집중해서 바라보아야 합니다. 그리고 나서 OEP로 가는 도중엔 다음과 같은 루틴이 존재하게 됩니다.

 

EAX=00401000   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FF78   ESP=0068FE34   EIP=01016191   o d I s z a p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000   DS:01016049=0040BE15

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  01015F51  00000000      ..@..HD.Q_......      

0177:0068FE08 00000323  00B57E2A  B62FE226  00580000      #...*~..&./...X.      

0177:0068FE18 01016045  8193BC70  8193BC30  8193BC10      E`..p...0.......      

0177:0068FE28 0040BE15  00401000  00000000  00426930      ..@...@.....0iB.      

0177:0068FE38 00000060  BFF8B6E6  00000000  8193BC10      `...............      

-------------------------------------------------------------------------PROT32-

016F:01016188  8F442700            POP       DWORD PTR [EDI+00]                 

016F:0101618C  58                  POP       EAX                                

016F:0101618D  5F                  POP       EDI                                

016F:0101618E  EB01                JMP       01016191                           

016F:01016190  E8FF354960          CALL      614A9794                           

016F:01016191  FF3549600101        PUSH      DWORD PTR [01016049]               

016F:01016197  685C384100          PUSH      0041385C                           

016F:0101619C  64A100000000        MOV       EAX,FS:[00000000]                  

016F:010161A2  2EEB01              JMP       010161A6                           

016F:010161A5  9A8D6424EDF3EB      CALL      EBF3:ED24648D                      

016F:010161AC  02CD                ADD       CL,CH                              

016F:010161AE  208D643C782B        AND       [EBP+2B783C64],CL                  

016F:010161B4  E783                OUT       83,EAX                             

016F:010161B6  EC                  IN        AL,DX                              

016F:010161B7  6966812DC16101      IMUL      ESP,[ESI-7F],0161C12D              

016F:010161BE  01C0                ADD       EAX,EAX                            

016F:010161C0  D1E6                SHL       ESI,1                              

016F:010161C2  BC01F05066          MOV       ESP,6650F001                       

016F:010161C7  8135D061010179FEEB7BXOR       DWORD PTR [010161D0],7BEBFE79      

016F:010161D1  3320                XOR       ESP,[EAX]                          

016F:010161D3  8F442400            POP       DWORD PTR [ESP+00]                 

016F:010161D7  8B442410            MOV       EAX,[ESP+10]                       

016F:010161DB  896C2410            MOV       [ESP+10],EBP                       

016F:010161DF  8D6C2410            LEA       EBP,[ESP+10]                       

016F:010161E3  2BE0                SUB       ESP,EAX                            

016F:010161E5  2EEB01              JMP       010161E9                           

016F:010161E8  9A8D6424EDF3EB      CALL      EBF3:ED24648D                      

--------------------------------------------------------------------------------

:.                                                                              

:.                                                                              

:.                                                                              

:.                                                                              

:.                                                                              

:.                                                                              

:.                                                                              

:/screendump c:\dump\wsr_oep_1.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

EAX=0040BE15   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FE38   ESP=0068FDB8   EIP=010162AD   o d I S z a p C     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDB4 01000B37  00000000  00000000  8193BC10      7...............      

0177:0068FDC4 00580000  0068FDD8  01000B4D  19331756      ..X...h.M...V.3.      

0177:0068FDD4 073ED94C  00400000  D58A0195  0068FE1C      L.>...@.......h.      

0177:0068FDE4 00FF0000  00FD0000  01004138  01019A1C      ........8A......      

0177:0068FDF4 01015E18  00400000  00444886  01015F51      .^....@..HD.Q_..      

0177:0068FE04 00000000  00000323  00B57E2A  B62FE226      ....#...*~..&./.      

0177:0068FE14 00580000  01016045  8193BC70  0068FDBC      ..X.E`..p.....h.      

-------------------------------------------------------------------------PROT32-

016F:0101628E  8D6424ED            LEA       ESP,[ESP-13]                       

016F:01016292  F3EB02              REPZ JMP  01016297                           

016F:01016295  CD20                INT       20 VXDCall 783C,648D               

016F:0101629B  2BE7                SUB       ESP,EDI                            

016F:0101629D  83EC69              SUB       ESP,69                             

016F:010162A0  66812DA9620101C0D1  SUB       WORD PTR [010162A9],D1C0           

016F:010162A9  26EB01              JMP       010162AD                           

016F:010162AC  F050                LOCK PUSH EAX                                

016F:010162AD  50                  PUSH      EAX                                

016F:010162AE  668135B862010179FE  XOR       WORD PTR [010162B8],FE79           

016F:010162B7  EB7B                JMP       01016334                           

016F:010162B9  3320                XOR       ESP,[EAX]                          

016F:010162BB  8F442400            POP       DWORD PTR [ESP+00]                 

016F:010162BF  8B45FC              MOV       EAX,[EBP-04]                       

016F:010162C2  C745FCFFFFFFFF      MOV       DWORD PTR [EBP-04],FFFFFFFF        

016F:010162C9  8945F8              MOV       [EBP-08],EAX                       

016F:010162CC  8D45F0              LEA       EAX,[EBP-10]                       

016F:010162CF  64A300000000        MOV       FS:[00000000],EAX                  

016F:010162D5  64EB01              JMP       010162D9                           

016F:010162D8  69EB01696862        IMUL      EBP,EBX,62686901                   

016F:010162DE  D84000              FADD      REAL4 PTR [EAX+00]                 

016F:010162E1  681C5F0101          PUSH      01015F1C                           

016F:010162E6  C3                  RET                                          

016F:010162E7  0000                ADD       [EAX],AL                           

016F:010162E9  0000                ADD       [EAX],AL                           

016F:010162EB  0000                ADD       [EAX],AL                           

016F:010162ED  0000                ADD       [EAX],AL                           

--------------------------------------------------------------------------------

:.                                                                              

:d eax                                                                          

:.                                                                              

:d esp                                                                          

:.                                                                              

:.                                                                              

:.                                                                              

:/screendump c:\dump\wsr_oep_2.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

 

 

 

EAX=0068FE28   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FE38   ESP=0068FDB8   EIP=010162DC   o d I S z a p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDB4 0040BE15  0040BE15  00000000  8193BC10      ..@...@.........      

0177:0068FDC4 00580000  0068FDD8  01000B4D  19331756      ..X...h.M...V.3.      

0177:0068FDD4 073ED94C  00400000  D58A0195  0068FE1C      L.>...@.......h.      

0177:0068FDE4 00FF0000  00FD0000  01004138  01019A1C      ........8A......      

0177:0068FDF4 01015E18  00400000  00444886  01015F51      .^....@..HD.Q_..      

0177:0068FE04 00000000  00000323  00B57E2A  B62FE226      ....#...*~..&./.      

0177:0068FE14 00580000  01016045  8193BC70  0068FDBC      ..X.E`..p.....h.      

-------------------------------------------------------------------------PROT32-

016F:010162A0  66812DA9620101C0D1  SUB       WORD PTR [010162A9],D1C0           

016F:010162A9  26EB01              JMP       010162AD                           

016F:010162AC  F050                LOCK PUSH EAX                                

016F:010162AE  668135B862010179FE  XOR       WORD PTR [010162B8],FE79           

016F:010162B7  EB02                JMP       010162BB                           

016F:010162B9  CD20                INT       20 VXDCall 0024,448F               

016F:010162BF  8B45FC              MOV       EAX,[EBP-04]                       

016F:010162C2  C745FCFFFFFFFF      MOV       DWORD PTR [EBP-04],FFFFFFFF        

016F:010162C9  8945F8              MOV       [EBP-08],EAX                       

016F:010162CC  8D45F0              LEA       EAX,[EBP-10]                       

016F:010162CF  64A300000000        MOV       FS:[00000000],EAX                  

016F:010162D5  64EB01              JMP       010162D9                           

016F:010162D8  69EB01696862        IMUL      EBP,EBX,62686901                   

016F:010162DC  6862D84000          PUSH      0040D862                           

016F:010162E1  681C5F0101          PUSH      01015F1C                           

016F:010162E6  C3                  RET                                          

016F:010162E7  0000                ADD       [EAX],AL                           

016F:010162E9  0000                ADD       [EAX],AL                           

016F:010162EB  0000                ADD       [EAX],AL                           

016F:010162ED  0000                ADD       [EAX],AL                           

016F:010162EF  0000                ADD       [EAX],AL                           

016F:010162F1  0000                ADD       [EAX],AL                           

016F:010162F3  0000                ADD       [EAX],AL                           

016F:010162F5  0000                ADD       [EAX],AL                           

016F:010162F7  0000                ADD       [EAX],AL                           

016F:010162F9  0000                ADD       [EAX],AL                           

016F:010162FB  0000                ADD       [EAX],AL                           

--------------------------------------------------------------------------------

:d eax                                                                          

:.                                                                              

:d esp                                                                          

:.                                                                              

:.                                                                              

:.                                                                              

:/screendump c:\dump\wsr_oep_2.txt                                              

:/screendump c:\dump\wsr_oep_3.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

EAX=0068FE28   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FE38   ESP=0068FDB8   EIP=0040D862   o d I S z a p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDB8 0040BE15  00000000  8193BC10  00580000      ..@...........X.      

0177:0068FDC8 0068FDD8  01000B4D  19331756  073ED94C      ..h.M...V.3.L.>.      

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  01015F51  00000000      ..@..HD.Q_......      

0177:0068FE08 00000323  00B57E2A  B62FE226  00580000      #...*~..&./...X.      

0177:0068FE18 01016045  8193BC70  0068FDBC  0068FF68      E`..p.....h.h.h.      

-------------------------------------------------------------------------PROT32-

016F:0040D85C  64A300000000        MOV       FS:[00000000],EAX                  

016F:0040D862  C3                  RET                                          

016F:0040D863  8B4DF0              MOV       ECX,[EBP-10]                       

016F:0040D866  64890D00000000      MOV       FS:[00000000],ECX                  

016F:0040D86D  59                  POP       ECX                                

016F:0040D86E  5F                  POP       EDI                                

016F:0040D86F  5E                  POP       ESI                                

016F:0040D870  5B                  POP       EBX                                

016F:0040D871  C9                  LEAVE                                        

016F:0040D872  51                  PUSH      ECX                                

016F:0040D873  C3                  RET                                          

016F:0040D874  8B4604              MOV       EAX,[ESI+04]                       

016F:0040D877  85C0                TEST      EAX,EAX                            

016F:0040D879  7444                JZ        0040D8BF                           

016F:0040D87B  8D5008              LEA       EDX,[EAX+08]                       

016F:0040D87E  803A00              CMP       BYTE PTR [EDX],00                  

016F:0040D881  743C                JZ        0040D8BF                           

016F:0040D883  8B4F04              MOV       ECX,[EDI+04]                       

016F:0040D886  3BC1                CMP       EAX,ECX                            

016F:0040D888  7410                JZ        0040D89A                           

016F:0040D88A  83C108              ADD       ECX,08                             

016F:0040D88D  51                  PUSH      ECX                                

016F:0040D88E  52                  PUSH      EDX                                

016F:0040D88F  E8BC0D0000          CALL      0040E650                           

016F:0040D894  85C0                TEST      EAX,EAX                            

016F:0040D896  59                  POP       ECX                                

016F:0040D897  59                  POP       ECX                                

------------------------------------WSRECORDER!+C85C----------------------------

:.                                                                              

:/screendump c:\dump\wsr_oep_2.txt                                              

:/screendump c:\dump\wsr_oep_3.txt                                              

:d esp                                                                          

:.                                                                              

:d esp                                                                          

:d esp                                                                          

:/screendump c:\dump\wsr_oep_4.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

EAX=0068FE28   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=8193BC10        

EDI=00000000   EBP=0068FE38   ESP=0068FDBC   EIP=0040BE15   o d I S z a p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

--------------------------------------------------dword-------------PROT---(0)--

0177:0068FDB8 0040BE15  00000000  8193BC10  00580000      ..@...........X.      

0177:0068FDC8 0068FDD8  01000B4D  19331756  073ED94C      ..h.M...V.3.L.>.      

0177:0068FDD8 00400000  D58A0195  0068FE1C  00FF0000      ..@.......h.....      

0177:0068FDE8 00FD0000  01004138  01019A1C  01015E18      ....8A.......^..      

0177:0068FDF8 00400000  00444886  01015F51  00000000      ..@..HD.Q_......      

0177:0068FE08 00000323  00B57E2A  B62FE226  00580000      #...*~..&./...X.      

0177:0068FE18 01016045  8193BC70  0068FDBC  0068FF68      E`..p.....h.h.h.      

-------------------------------------------------------------------------PROT32-

016F:0040BDFC  68FF000000          PUSH      000000FF                           

016F:0040BE01  E866FCFFFF          CALL      0040BA6C                           

016F:0040BE06  59                  POP       ECX                                

016F:0040BE07  59                  POP       ECX                                

016F:0040BE08  C3                  RET                                          

016F:0040BE09  0000                ADD       [EAX],AL                           

016F:0040BE0B  0000                ADD       [EAX],AL                           

016F:0040BE0D  0000                ADD       [EAX],AL                           

016F:0040BE0F  00E8                ADD       AL,CH                              

016F:0040BE11  131A                ADC       EBX,[EDX]                          

016F:0040BE13  0000                ADD       [EAX],AL                           

016F:0040BE15  BF94000000          MOV       EDI,00000094                       

016F:0040BE1A  8BC7                MOV       EAX,EDI                            

016F:0040BE1C  E8CFF7FFFF          CALL      0040B5F0                           

016F:0040BE21  8965E8              MOV       [EBP-18],ESP                       

016F:0040BE24  8BF4                MOV       ESI,ESP                            

016F:0040BE26  893E                MOV       [ESI],EDI                          

016F:0040BE28  56                  PUSH      ESI                                

016F:0040BE29  FF159C224200        CALL      [0042229C]                         

016F:0040BE2F  8B4E10              MOV       ECX,[ESI+10]                       

016F:0040BE32  890DECFA4200        MOV       [0042FAEC],ECX                     

016F:0040BE38  8B4604              MOV       EAX,[ESI+04]                       

016F:0040BE3B  A3F8FA4200          MOV       [0042FAF8],EAX                     

016F:0040BE40  8B5608              MOV       EDX,[ESI+08]                       

016F:0040BE43  8915FCFA4200        MOV       [0042FAFC],EDX                     

016F:0040BE49  8B760C              MOV       ESI,[ESI+0C]                       

016F:0040BE4C  81E6FF7F0000        AND       ESI,00007FFF                       

------------------------------------WSRECORDER!+ADFC----------------------------

:/screendump c:\dump\wsr_oep_2.txt                                              

:/screendump c:\dump\wsr_oep_3.txt                                              

:d esp                                                                          

:.                                                                              

:d esp                                                                          

:d esp                                                                          

:/screendump c:\dump\wsr_oep_4.txt                                              

:/screendump c:\dump\wsr_oep_5.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

 

 

 

바로 위의 부분이 대망의 OEP입니다. 하지만 이곳은 소위 말하는 fake OEP입니다. 따라서 덤프를 하기전에 우리가 실제 OEP로 eip를 옮깁시다.

 

r eip eip-7

 

왜 eip-7 인지는 stolen bytes의 수를 세어보면 알 수 있습니다. 따라서 실제 OEP는 40BE15 - 7 = 40BE0E 가 되겠습니다. 덤프를 하실까요!

 

/dump 400000 58000 c:\dump\wsr_dump.exe

 

로 하시면 되겠습니다. 그리고 당근 PE editor를 열어 OEP와 색션을 수정해주셔야겠죠. 그리고 중요한 것은 덤프한 파일엔 stolen bytes가 없으므로 직접 심어줘야 한다는 것입니다. 전 Hiew를 사용해서 수정했습니다.

 

 

 

 

 

 

2. 이제 IAT를 복구해봅시다. Import Reconstruct를 가동하시고 OEP를 BE0E에 넣고 IAT search를 하신후, show invalid를 눌러 trace level1, trace asprotect 1.22를 해줍시다. 그러면 아마도 하나의 미해결 임포를 제외하고 다 풀릴 겁니다. 이제 미해결 임포트가 뭔지 봐야겠죠.

faults on 에 명령을 주시고 실행하면 아마 오류가 날겁니다. 그러면 R 키를 누른후, u *esp해서 봅시다. 어디서 오류가 나나요? 아마도 OEP 밑부분의 명령어 중

 

016F:0040BE29  FF159C224200        CALL      [0042229C]                         

 

여기에서 에러가 뜰겁니다. 그러면 프로그램을 다시 실행시켜서 저기에 무엇이 있나보죠. [0042229C] = 01010CB0 입니다. 이곳으로 가보시면 아래처럼 나올 겁니다.

 

 

 

EAX=0040BE21   EBX=00580000   ECX=8193BC30   EDX=8193BC70   ESI=0068FD28        

EDI=00000094   EBP=0068FD1C   ESP=0068FD08   EIP=01010CB8   o d I s z a p c     

CS=016F   DS=0177   SS=0177   ES=0177   FS=34CF   GS=0000                       

-----KERNEL32!GetVersionExA+0008------------------dword-------------PROT---(0)--

0177:BFF917B2 8B08758B  009C3D06  0E740000  0000943D      .u...=....t.=...      

0177:BFF917C2 33077400  00F6E9C0  04BF0000  8D000000      .t.3............      

0177:BFF917D2 8950F845  46C7047E  00000A08  0C46C700      E.P.~..F......F.      

0177:BFF917E2 040A08AE  011046C7  68000000  BFF79450      .....F.....hP...      

0177:BFF917F2 00000268  00116880  D3E80001  85FFFDFB      h....h..........      

0177:BFF91802 816675C0  00009C3E  8D287500  7D89FC45      .uf.>....u(.E..}      

0177:BFF91812 F47D8DF4  FF335057  98685757  FFBFF794      ..}.WP3.WWh.....      

-------------------------------------------------------------------------PROT32-

016F:01010CB0  55                  PUSH      EBP                                

016F:01010CB1  8BEC                MOV       EBP,ESP                            

016F:01010CB3  83EC0C              SUB       ESP,0C                             

016F:01010CB6  56                  PUSH      ESI                                

016F:01010CB7  57                  PUSH      EDI                                

016F:01010CB8  E9F50AF8BE          JMP       BFF917B2                (JUMP )    

016F:01010CBD  0000                ADD       [EAX],AL                           

016F:01010CBF  000E                ADD       [ESI],CL                           

016F:01010CC1  0000                ADD       [EAX],AL                           

016F:01010CC3  00E9                ADD       CL,CH                              

016F:01010CC5  C4E4                LES       ESP,ESP                            

016F:01010CC7  F8                  CLC                                          

016F:01010CC8  BE3700000E          MOV       ESI,0E000037                       

016F:01010CCD  0000                ADD       [EAX],AL                           

016F:01010CCF  0055E9              ADD       [EBP-17],DL                        

016F:01010CD2  56                  PUSH      ESI                                

016F:01010CD3  15F7BE0000          ADC       EAX,0000BEF7                       

016F:01010CD8  0E                  PUSH      CS                                 

016F:01010CD9  0000                ADD       [EAX],AL                           

016F:01010CDB  00E9                ADD       CL,CH                              

016F:01010CDD  18D6                SBB       DH,DL                              

016F:01010CDF  F7BE3700000E        IDIV      DWORD PTR [ESI+0E000037]           

016F:01010CE5  0000                ADD       [EAX],AL                           

016F:01010CE7  006808              ADD       [EAX+08],CH                        

016F:01010CEA  44                  INC       ESP                                

016F:01010CEB  F7BFC300000E        IDIV      DWORD PTR [EDI+0E0000C3]           

016F:01010CF1  0000                ADD       [EAX],AL                           

--------------------------------------------------------------------------------

:.                                                                              

:d esp                                                                          

:d esp                                                                          

:/screendump c:\dump\wsr_oep_4.txt                                              

:/screendump c:\dump\wsr_oep_5.txt                                              

:/screendump c:\dump\wsr_api_1.txt                                              

:d bff917b2                                                                     

:/screendump c:\dump\wsr_api_1.txt                                              

                                                                                

Invalid command                                                         Wsrecord

 

 

 

 

위에서 볼 수 있듯이 BFF917B2 로 점프하는 것을 알 수 있습니다. BFFxxxxx 은 DLL의 영역입니다. 과연 이 주소가 어디에 속하는지 데이터창으로 봅시다. 그랬더니 데이터 창에 GetVersionExA+008 이라고 나옴을 볼 수 있습니다. 위의 녹색부분에 해당하는 코드 수는 정확히 8바이트입니다. 즉 asprotect가 GetVersionExA의 8바이트를 미리 실행하고 해당 함수로 점프를 하는군요. 즉 마치 OEP의 stolen bytes같은 것이지요. 머 어차피 자동으로 복구할 것이므로 상관없습니다. 다시 Import Recontruct를 띄우시고, 해당 미해결 임포트를 더블클릭 후 해당함수를 클릭해 줍시다. 이제 더 이상의 미해결 임포트는 없습니다. 기쁜 마음으로 실행해 보세요. 잘 되죠~~~~

 

 

p.s : 임포트 복구는 별다른 문제가 없었기에, 또한 제가 복구하면서 IAT tree를 저장하지 않았기에, 귀찮니즘으로 인해 첨부하지 않습니다. 혹시라도 임포트 복구가 안되는 분 계시면 올려드리도록 하겠습니다.

 

p.s : 이 자리를 빌어 copywrite 님에게 깊은 감사를 드립니다. 사실 저도 이번에 asprotect의 코드를 일일이 스텝인하면서 혈압이 급상승함을 느낀 적이 한두 번이 아니었습니다. 그 수많은 SEH 트릭에 좌절하며, 소아로 풀어낸다는 것이 불가능할 것으로만 여겼습니다. 하지만 copywrite님의 도움을 받아 이렇게 손쉽게 해내는군요. 예전에 copywrite님이 asprotect에 심취하셔서 같이 루틴을 파해해보자고 했을 때 그러지 못한 것이 못내 아쉽고 미안할 따름입니다. 아무튼 아직까지 소아로 풀어낸 public tutorial은 보지 못했기에 더욱 뜻 깊은 것 같습니다. 다시 한번 감사의 뜻을 전하며...

 

p.s : 혹시 위의 과정들에 대한 의미를 파악하실 분은 제 홈페이지의 게시판을 참조하시기 바랍니다. 또한 이것 이외의 정보를 얻고 싶으신 분들은 개인적으로 메일을 주십시요. 결국은 그 자료들이란게 직접 해보지 않는 이상 도움이 전혀 안될 자료들이지만, 분명 길잡이가 되어줄 수 있으리라 생각합니다.

 

'Hacking' 카테고리의 다른 글

Intro to Reverse Engineering-Part 2  (0) 2009.01.24
Intro to Reverse Engineering - No Assembly Required  (0) 2009.01.24
Gunz Original Files  (0) 2009.01.20
Common Hacking Tools  (0) 2009.01.20
IDA PRO beginner tutorial  (0) 2009.01.11
Posted by CEOinIRVINE
l