聚星亭

吾笨笨且懒散兮 急须改之而奋进
posts - 74, comments - 166, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

 

Notes for process: UnPackMe                              2009-2-15 2:19:52

 

003F157B >/$  BD 082A3F00   mov     ebp003F2A08            ;OD载入的入口点                     
003F1580  |.  C745 00 2C013>mov     dword ptr [ebp], 003F012C                                    
003F1587  |.  FF4D 08       dec     dword ptr [ebp+8]                                            
003F158A  |.  C645 0C 05    mov     byte ptr [ebp+C], 5                                          
003F158E  |.  8D7D 14       lea     edidword ptr [ebp+14]                                      
003F1591  |.  31C0          xor     eaxeax                                                     
003F1593  |.  B4 04         mov     ah, 4                                                        
003F1595  |.  89C1          mov     ecxeax                                                     
003F1597  |.  F3:AB         rep     stos dword ptr es:[edi]                                      
003F1599  |.  BF E4FC3F00   mov     edi, 003FFCE4                                                
003F159E  |.  57            push    edi                                                          
003F159F  |.  BE 6C163F00   mov     esi003F166C            ;
第一次压栈,也可以在这里用ESP定律
   
003F15A4  |> /31C9          xor     ecxecx
003F15A6  |. |41            inc     ecx
003F15A7  |. |FF4D 0C       dec     dword ptr [ebp+C]
003F15AA  |> |8D9C8D A00000>/lea     ebxdword ptr [ebp+ecx*4+A0]   ;  
一个循环

003F15B1  |. |FFD6          |call    esi
003F15B3  |. |10C9          |adc     clcl
003F15B5  |.^|73 F3         \jnb     short 003F15AA
003F15B7  |. |FF45 0C       inc     dword ptr [ebp+C]                ;  
这里F4
003F15BA  |. |91            xchg    eaxecx
003F15BB  |. |AA            stos    byte ptr es:[edi]
003F15BC  |. |83C9 FF       or      ecx, FFFFFFFF
003F15BF  |> |8D5C8D 18     /lea     ebxdword ptr [ebp+ecx*4+18]
003F15C3  |. |FFD6          |call    esi
003F15C5  |.^\74 DD         |je      short 003F15A4                  ;  
又调回去了,不让它跳
003F15C7  |.  E3 17         |jecxz   short 003F15E0                  ;  
这里F4
003F15C9  |.  8D5D 1C       |lea     ebxdword ptr [ebp+1C]
003F15CC  |.  FFD6          |call    esi
003F15CE  |.  74 10         |je      short 003F15E0
003F15D0  |.  8D9D A0080000 |lea     ebxdword ptr [ebp+8A0]
003F15D6  |.  E8 EC000000   |call    003F16C7
003F15DB  |.  8B45 10       |mov     eaxdword ptr [ebp+10]
003F15DE  |.  EB 42         |jmp     short 003F1622
003F15E0  |>  8D9D A0040000 |lea     ebxdword ptr [ebp+4A0]
003F15E6  |.  E8 DC000000   |call    003F16C7
003F15EB  |.  49            |dec     ecx
003F15EC  |.  49            |dec     ecx
003F15ED  |.  78 40         |js      short 003F162F
003F15EF  |.  8D5D 20       |lea     ebxdword ptr [ebp+20]
003F15F2  |.  74 03         |je      short 003F15F7
003F15F4  |.  83C3 40       |add     ebx, 40
003F15F7  |>  31D2          |xor     edxedx
003F15F9  |.  42            |inc     edx
003F15FA  |>  E8 BE000000   |/call    003F16BD
003F15FF  |.  8D0C48        ||lea     ecxdword ptr [eax+ecx*2]
003F1602  |.  F6C2 10       ||test    dl, 10
003F1605  |.^ 74 F3         |\je      short 003F15FA
003F1607  |.  41            |inc     ecx                             ;  
这里F4
003F1608  |.  91            |xchg    eaxecx
003F1609  |.  8D9D A0080000 |lea     ebxdword ptr [ebp+8A0]
003F160F  |.  E8 B3000000   |call    003F16C7
003F1614  |.  3D 00080000   |cmp     eax, 800
003F1619  |.  83D9 FF       |sbb     ecx, -1
003F161C  |.  83F8 60       |cmp     eax, 60
003F161F  |.  83D9 FF       |sbb     ecx, -1
003F1622  |>  8945 10       |mov     dword ptr [ebp+10], eax
003F1625  |.  56            |push    esi
003F1626  |.  89FE          |mov     esiedi
003F1628  |.  29C6          |sub     esieax
003F162A  |.  F3:A4         |rep     movs byte ptr es:[edi], byte pt>
003F162C  |.  5E            |pop     esi
003F162D  |.^ EB 90         \jmp     short 003F15BF
003F162F  |>  BE 3D004000   mov     esi, 0040003D                    ;  
这里F4
003F1634  |.  BB 20293F00   mov     ebx, <&KERNEL32.LoadLibraryA>
003F1639  |.  55            push    ebp
003F163A  |>  46            inc     esi
003F163B  |.  AD            lods    dword ptr [esi]
003F163C  |.  85C0          test    eaxeax
003F163E  |.  74 2A         je      short 003F166A                   ;  
这里跳出去就解密完成了
003F1640  |.  97            xchg    eaxedi
003F1641  |.  56            push    esi
003F1642  |.  FF13          call    dword ptr [ebx]
003F1644  |.  85C0          test    eaxeax
003F1646  |.  74 16         je      short 003F165E
003F1648  |.  95            xchg    eaxebp
003F1649  |>  AC            /lods    byte ptr [esi]
003F164A  |.  84C0          |test    alal
003F164C  |.^ 75 FB         \jnz     short 003F1649
003F164E  |.  3806          cmp     byte ptr [esi], al
003F1650  |.^ 74 E8         je      short 003F163A
003F1652  |.  78 0E         js      short 003F1662
003F1654  |.  56            push    esi
003F1655  |>  55            push    ebp
003F1656  |.  FF53 04       call    dword ptr [ebx+4]
003F1659  |.  AB            stos    dword ptr es:[edi]
003F165A  |.  85C0          test    eaxeax
003F165C  |.^ 75 EB         jnz     short 003F1649
003F165E  |>  40            inc     eax
003F165F  |.  5B            pop     ebx
003F1660  |.  59            pop     ecx
003F1661  |.  C3            retn
003F1662  |>  46            inc     esi
003F1663  |.  31C0          xor     eaxeax
003F1665  |.  66:AD         lods    word ptr [esi]
003F1667  |.  50            push    eax
003F1668  |.^ EB EB         jmp     short 003F1655
003F166A  |>  5D            pop     ebp                              ;  
来到这里解密就完成了,所以就在这里F4比较直接
003F166B  \.  C3            retn                                     ;  
继续F8

     

如果直接在第一个压栈的地方用ESP定律,就可以省去上面的麻烦,好了,继续往下看

 

003FFCE4   .  BF 00104000   mov     edi, 00401000
003FFCE9   .  89FB          mov     ebxedi
003FFCEB   .  81EB 04000000 sub     ebx, 4
003FFCF1   .  895D 58       mov     dword ptr [ebp+58], ebx
003FFCF4   .  31C0          xor     eaxeax
003FFCF6   .  8945 5C       mov     dword ptr [ebp+5C], eax
003FFCF9   .  8945 64       mov     dword ptr [ebp+64], eax
003FFCFC   .  40            inc     eax
003FFCFD   .  8945 60       mov     dword ptr [ebp+60], eax
003FFD00   .  8945 68       mov     dword ptr [ebp+68], eax
003FFD03   .  8D5E 58       lea     ebxdword ptr [esi+58]
003FFD06   .  31C9          xor     ecxecx
003FFD08   >  AD            lods    dword ptr [esi]
003FFD09   .  895C8D 00     mov     dword ptr [ebp+ecx*4], ebx
003FFD0D   .  01C3          add     ebxeax
003FFD0F   .  41            inc     ecx
003FFD10   .  80F9 16       cmp     cl, 16
003FFD13   .^ 75 F3         jnz     short 003FFD08
003FFD15   .  8B75 04       mov     esidword ptr [ebp+4]           ;  
这里F4

003FFD18   .  8775 00       xchg    dword ptr [ebp], esi
003FFD1B   .  57            push    edi
003FFD1C   .  8DBD 68040000 lea     edidword ptr [ebp+468]
003FFD22   .  AC            lods    byte ptr [esi]
003FFD23   .  0FB6C8        movzx   ecxal
003FFD26   .  BB 3DFF3F00   mov     ebx, 003FFF3D
003FFD2B   >  89F0          mov     eaxesi
003FFD2D   .  AB            stos    dword ptr es:[edi]
003FFD2E   .  31C0          xor     eaxeax
003FFD30   .  AC            lods    byte ptr [esi]
003FFD31   .  3C 66         cmp     al, 66
003FFD33   .  75 01         jnz     short 003FFD36
003FFD35   .  AC            lods    byte ptr [esi]
003FFD36   >  3C 0F         cmp     al0F
003FFD38   .  75 03         jnz     short 003FFD3D
003FFD3A   .  AC            lods    byte ptr [esi]
003FFD3B   .  B4 01         mov     ah, 1
003FFD3D   >  D1E8          shr     eax, 1
003FFD3F   .  D7            xlat    byte ptr [ebx+al]
003FFD40   .  73 03         jnb     short 003FFD45
003FFD42   .  C0E8 04       shr     al, 4
003FFD45   >  A8 02         test    al, 2
003FFD47   .  74 01         je      short 003FFD4A
003FFD49   .  46            inc     esi
003FFD4A   >^ E2 DF         loopd   short 003FFD2B                   ;  
这里个循环,就在下面F4就好
003FFD4C   .  5F            pop     edi
003FFD4D   >  31C0          xor     eaxeax
003FFD4F   .  3945 64       cmp     dword ptr [ebp+64], eax
003FFD52   .  74 04         je      short 003FFD58
003FFD54   .  8745 64       xchg    dword ptr [ebp+64], eax
003FFD57   .  96            xchg    eaxesi
003FFD58   >  3B75 00       cmp     esidword ptr [ebp]
003FFD5B   .  0F84 9F190000 je      00401700                         ;  
看到了哦,这里有个长跳,就在这里F4

     

这个跳转没有实现,所以,我们在这个指令上按回车,就可以来到还没有被填好的OEP上了!

 

00401700   > \0000          add     byte ptr [eax], al
00401702   .  0000          add     byte ptr [eax], al
00401704   .  0000          add     byte ptr [eax], al
00401706   .  0000          add     byte ptr [eax], al
00401708   .  0000          add     byte ptr [eax], al
0040170A   .  0000          add     byte ptr [eax], al
0040170C   .  0000          add     byte ptr [eax], al
0040170E   .  0000          add     byte ptr [eax], al
00401710   .  0000          add     byte ptr [eax], al
00401712   .  0000          add     byte ptr [eax], al
00401714   .  0000          add     byte ptr [eax], al
00401716   .  0000          add     byte ptr [eax], al

    在命令行里输入: HE 00401700  下个硬件执行断点,然后SHIFT+F9,就OK了,至于修复没特别的,不多说


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理