飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3417|回复: 1

[原创] 手脱ExeStealth v2.76系列片

[复制链接]
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2010-8-1 19:40:35 | 显示全部楼层 |阅读模式
    本帖最后由 cjteam 于 2010-8-1 19:41 编辑

    本人是壳盲,菜鸟一个,大牛不经意的看到了请指点下,同时希望比我菜的给个引导学习的方法,估计没有比我菜的 :).

    ,加壳保护设置,因为我们是练习手脱.而且我们在脱之前未掌握任何知识,只知道一个观念,避开所有的XX到达OEP就是目标,因此不要回跳,下一行F4,OK,我们的工作吧.

    用看雪的OD即可,大部分的OD应该是ok的,设置忽略所有异常,无需隐藏OD。
    1. 00464060 > /EB 65           jmp     short 004640C7          //OD载入后停在这.F7单步
    2. 00464062   |45              inc     ebp
    3. 00464063   |78 65           js      short 004640CA
    4. 00464065   |53              push    ebx
    5. 00464066   |74 65           je      short 004640CD
    6. 00464068   |61              popad
    7. 00464069   |6C              ins     byte ptr es:[edi], dx
    8. 0046406A   |74 68           je      short 004640D4
    9. 0046406C   |2056 32         and     byte ptr [esi+32], dl
    10. ----------------------------------------------------
    11. 004640C7    60              pushad                                                  //F7单步
    12. 004640C8    E8 00000000     call    004640CD                           //近call,F7,以后一直是单步f7,部分F8会有写出
    13. 004640CD    5D              pop     ebp
    14. 004640CE    81ED 40284000   sub     ebp, 00402840
    15. 004640D4    B9 16000000     mov     ecx, 16
    16. 004640D9    83C1 04         add     ecx, 4
    17. 004640DC    83C1 01         add     ecx, 1
    18. 004640DF    EB 05           jmp     short 004640E6
    19. 004640E1  - EB FE           jmp     short 004640E1
    20. 004640E3    83C7 56         add     edi, 56
    21. 004640E6    EB 00           jmp     short 004640E8
    22. 004640E8    EB 00           jmp     short 004640EA
    23. 004640EA    83E9 02         sub     ecx, 2
    24. 004640ED    81C1 78432765   add     ecx, 65274378
    25. 004640F3    EB 00           jmp     short 004640F5
    26. ......
    27. 0046413F    2C CE           sub     al, 0CE
    28. 00464141    04 10           add     al, 10
    29. 00464143    F9              stc
    30. 00464144    2C 4F           sub     al, 4F
    31. 00464146    AA              stos    byte ptr es:[edi]
    32. 00464147  ^ E2 C7           loopd   short 00464110               这里有个循环。我们在下面F4
    33. 00464149    A9 603E38A1     test    eax, A1383E60
    34. 0046414E    58              pop     eax
    35. 0046414F    36:3091 CC188BE>xor     byte ptr ss:[ecx+EE8B18CC], dl
    复制代码
    1. 0046417D    8D85 D3274000   lea     eax, dword ptr [ebp+4027D3]
    2. 00464183    B9 10070000     mov     ecx, 710
    3. 00464188    E8 41020000     call    004643CE
    4. 0046418D    8985 41304000   mov     dword ptr [ebp+403041], eax
    5. 00464193    8B85 39304000   mov     eax, dword ptr [ebp+403039]
    6. 00464199    83E0 01         and     eax, 1
    7. 0046419C    74 40           je      short 004641DE                                //这里不跳,下面int3异常,这里是经过多次单步跟踪发现的,enter回车,F2,SHIFT+F9.
    8. 0046419E    8DB5 B1314000   lea     esi, dword ptr [ebp+4031B1]
    9. 004641A4    8D85 3E294000   lea     eax, dword ptr [ebp+40293E]
    10. 004641AA    8946 08         mov     dword ptr [esi+8], eax
    11. 004641AD    8BFD            mov     edi, ebp
    12. 004641AF    8D85 CF2F4000   lea     eax, dword ptr [ebp+402FCF]
    13. 004641B5    33DB            xor     ebx, ebx
    14. 004641B7    50              push    eax
    15. 004641B8    64:FF33         push    dword ptr fs:[ebx]
    16. 004641BB    64:8923         mov     dword ptr fs:[ebx], esp
    17. 004641BE    BD 4B484342     mov     ebp, 4243484B
    18. 004641C3    66:B8 0400      mov     ax, 4
    19. 004641C7    EB 01           jmp     short 004641CA
    20. 004641C9    FFCC            dec     esp
    21. 004641CB    8BEF            mov     ebp, edi
    22. 004641CD    33DB            xor     ebx, ebx
    23. 004641CF    64:8F03         pop     dword ptr fs:[ebx]
    24. 004641D2    83C4 04         add     esp, 4
    25. 004641D5    3C 04           cmp     al, 4
    26. 004641D7    74 05           je      short 004641DE
    27. 004641D9    EB 01           jmp     short 004641DC
    28. 004641DB  - E9 61C38B85     jmp     85D20541
    29. 004641E0    3130            xor     dword ptr [eax], esi
    30. 004641E2    40              inc     eax
    31. 004641E3    0003            add     byte ptr [ebx], al
    32. 004641E5    40              inc     eax
    33. 004641E6    3C 05           cmp     al, 5
    34. 004641E8    8000 00         add     byte ptr [eax], 0
    35. 004641EB    008B 08038D31   add     byte ptr [ebx+318D0308], cl
    复制代码
    1. 004641DE    8B85 31304000   mov     eax, dword ptr [ebp+403031]             //到了这里F8走吧,加快点速度,呵呵
    2. 004641E4    0340 3C         add     eax, dword ptr [eax+3C]
    3. 004641E7    05 80000000     add     eax, 80
    4. 004641EC    8B08            mov     ecx, dword ptr [eax]
    5. 004641EE    038D 31304000   add     ecx, dword ptr [ebp+403031]
    6. 004641F4    83C1 10         add     ecx, 10
    7. 004641F7    8B01            mov     eax, dword ptr [ecx]
    8. 004641F9    0385 31304000   add     eax, dword ptr [ebp+403031]
    9. 004641FF    8B18            mov     ebx, dword ptr [eax]
    10. 00464201    899D BD314000   mov     dword ptr [ebp+4031BD], ebx
    11. 00464207    83C0 04         add     eax, 4
    12. 0046420A    8B18            mov     ebx, dword ptr [eax]
    13. 0046420C    899D C1314000   mov     dword ptr [ebp+4031C1], ebx
    14. 00464212    8D85 C5314000   lea     eax, dword ptr [ebp+4031C5]
    15. 00464218    50              push    eax
    16. 00464219    FF95 BD314000   call    dword ptr [ebp+4031BD]
    17. ....
    18. 004646E9    8339 00         cmp     dword ptr [ecx], 0
    19. 004646EC  ^ 0F85 34FFFFFF   jnz     00464626                              //这里一段是处理IAT,  我们选择的保护不涉及这个。回跳
    20. 004646F2    83C6 0C         add     esi, 0C                                       //F4走吧,因为我们是菜鸟,不知道什么叫处理IAT,呵呵
    21. 004646F5    837E 04 00      cmp     dword ptr [esi+4], 0
    22. 004646F9  ^ 0F85 B4FEFFFF   jnz     004645B3
    23. 004646FF    33C0            xor     eax, eax                                      //F4
    24. 00464701    40              inc     eax
    25. 00464702    83F8 01         cmp     eax, 1
    26. 00464705    74 02           je      short 00464709                           //这里跳走了
    27. 00464707    61              popad                                                    //如果在这里F4程序就跑飞,呵呵,别偷懒.慢慢来.
    28. 00464708    C3              retn
    29. ........
    30. 004643CE    8BF8            mov     edi, eax                         ; no.<模块入口点>  //上面还需要走会就来到这里了,
    31. 004643D0    33C0            xor     eax, eax
    32. 004643D2    33DB            xor     ebx, ebx
    33. 004643D4    33D2            xor     edx, edx
    34. 004643D6    8A07            mov     al, byte ptr [edi]
    35. 004643D8    F7E2            mul     edx
    36. 004643DA    03D8            add     ebx, eax
    37. 004643DC    42              inc     edx
    38. 004643DD    47              inc     edi
    39. 004643DE  ^ E2 F6           loopd   short 004643D6                          //循环.不知道他这个是如何检测的,ecx=00000710,直到ecx=1结束循环,
    40. 004643E0    93              xchg    eax, ebx                                                      //F4
    41. 004643E1    C3              retn
    42. 004643E2    53              push    ebx
    43. 004643E3    FF95 40324000   call    dword ptr [ebp+403240]
    44. ...
    45. 00464740   /EB 01           jmp     short 00464743                                   //retn返回到这里
    46. 00464742   |C7              ???                                      ; 未知命令
    47. 00464743   \8B9D 41304000   mov     ebx, dword ptr [ebp+403041]    //jmp到这里,我们在转存跟随看下,发现我们的OEP已经出现了
    48. 00464749    33C3            xor     eax, ebx                                               //异或后
    49. 0046474B    74 08           je      short 00464755                   ;          //这里不跳就去int3了,我们要跳.多次跟踪发现的问题.
    50. ------
    51. 004648BE  00400000  ASCII "MZP"        //转存跟随
    52. 004648C2  00050DA8   //OEP
    53. 004648C6  00000001
    54. 004648CA  00000000
    55. 004648CE  00028867
    56. --------------------------------------------
    57. 00464755    8DBD E32E4000   lea     edi, dword ptr [ebp+402EE3]      //跳过后来到这里.
    58. 0046475B    8BF7            mov     esi, edi
    59. 0046475D    B9 E0000000     mov     ecx, 0E0
    60. 00464762    33DB            xor     ebx, ebx
    61. 00464764    AC              lods    byte ptr [esi]
    62. 00464765    34 61           xor     al, 61
    63. 00464767    2AC3            sub     al, bl
    64. 00464769    C0C0 02         rol     al, 2
    65. 0046476C    AA              stos    byte ptr es:[edi]
    66. 0046476D    43              inc     ebx
    67. 0046476E  ^ E2 F4           loopd   short 00464764                 //此时ecx为固定值,等到为2就快结束循环了.
    68. 00464770    8D85 71324000   lea     eax, dword ptr [ebp+403271]  //直接F4
    69. 00464776    50              push    eax
    70. 00464777    FFB5 D2314000   push    dword ptr [ebp+4031D2]
    71. 0046477D    FF95 C1314000   call    dword ptr [ebp+4031C1]
    72. 00464783    0BC0            or      eax, eax
    73. 00464785    74 08           je      short 0046478F
    74. 00464787    FFD0            call    eax                                                //IsDebuggerPresent出现这个,经过多次,我们可以知道这个是反调试了,可以bp IsDebuggerPresent.
    75. 00464789    0BC0            or      eax, eax
    76. 0046478B    74 02           je      short 0046478F                                 //这里   
    77. 0046478D    61              popad
    78. 0046478E    C3              retn                                                             //返回退出
    79. 0046478F    F785 39304000 0>test    dword ptr [ebp+403039], 1
    80. 00464799    74 4F           je      short 004647EA                              //不跳退出
    81. ......
    82. 00464825    32C0            xor     al, al
    83. 00464827    8DBD D3274000   lea     edi, dword ptr [ebp+4027D3]
    84. 0046482D    B9 93070000     mov     ecx, 793
    85. 00464832    AA              stos    byte ptr es:[edi]
    86. 00464833  ^ E2 FD           loopd   short 00464832
    87. 00464835    8DBD C32F4000   lea     edi, dword ptr [ebp+402FC3]     //F4
    88. 0046483B    B9 C0020000     mov     ecx, 2C0
    89. 00464840    AA              stos    byte ptr es:[edi]
    90. 00464841  ^ E2 FD           loopd   short 00464840
    91. 00464843    61              popad                                                //F4
    92. 00464844    50              push    eax
    93. 00464845    33C0            xor     eax, eax
    94. 00464847    64:FF30         push    dword ptr fs:[eax]
    95. 0046484A    64:8920         mov     dword ptr fs:[eax], esp
    96. 0046484D    EB 01           jmp     short 00464850               //之后就一直F8,虽然有个小异常,但是我们还是到了OEP
    97. 0046484F    87EB            xchg    ebx, ebp
    98. 00464851    04 C6           add     al, 0C6
    99. 00464853    0000            add     byte ptr [eax], al
    100. 00464855    40              inc     eax
    101. 00464856    8038 00         cmp     byte ptr [eax], 0
    102. 00464859  ^ 75 F7           jnz     short 00464852
    103. 0046485B    C3              retn      
    104. -----------------------
    105. 00450DA0    0000            add     byte ptr [eax], al
    106. 00450DA2    0000            add     byte ptr [eax], al
    107. 00450DA4    A0 0B450055     mov     al, byte ptr [5500450B]         //这里是处理了一个字节的OEP,我们可以dump,IRC修复,完工了,
    108. 00450DA9    8BEC            mov     ebp, esp                                     //到了这里,熟悉点OEP就知道是DELPHI了,
    109. 00450DAB    83C4 F0         add     esp, -10
    110. 00450DAE    B8 C80B4500     mov     eax, 00450BC8
    111. 00450DB3    E8 104EFBFF     call    00405BC8
    112. 00450DB8    A1 24204500     mov     eax, dword ptr [452024]
    113. 00450DBD    8B00            mov     eax, dword ptr [eax]
    114. 00450DBF    E8 98E1FFFF     call    0044EF5C
    115. 00450DC4    8B0D 04214500   mov     ecx, dword ptr [452104]          ; no.00453BD0
    116. 00450DCA    A1 24204500     mov     eax, dword ptr [452024]
    117. 00450DCF    8B00            mov     eax, dword ptr [eax]
    118. 00450DD1    8B15 FC044500   mov     edx, dword ptr [4504FC]          ; no.00450548
    119. 00450DD7    E8 98E1FFFF     call    0044EF74
    120. 00450DDC    A1 24204500     mov     eax, dword ptr [452024]
    121. 00450DE1    8B00            mov     eax, dword ptr [eax]
    122. 00450DE3    E8 0CE2FFFF     call    0044EFF4
    123. 00450DE8    E8 332FFBFF     call    00403D20
    124. 00450DED    8D40 00         lea     eax, dword ptr [eax]
    125. 00450DF0    0000            add     byte ptr [eax], al
    126. 00450DF2    0000            add     byte ptr [eax], al
    复制代码
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2010-8-1 19:44:22 | 显示全部楼层
    API重写保护
    -----------------------------
    1. 00464060 > /EB 65           jmp     short 004640C7              OEP载入.在这停下。F7
    2. 00464062   |45              inc     ebp
    3. 00464063   |78 65           js      short 004640CA
    4. 00464065   |53              push    ebx
    5. 00464066   |74 65           je      short 004640CD
    6. 00464068   |61              popad
    7. 00464069   |6C              ins     byte ptr es:[edi], dx
    8. 0046406A   |74 68           je      short 004640D4
    9. 0046406C   |2056 32         and     byte ptr [esi+32], dl
    10. 0046406F   |202D 20909090   and     byte ptr [90909020], ch
    11. 00464075   |90              nop
    12. 00464076   |90              nop
    13. 00464077   |65:62746F 6F    bound   esi, qword ptr gs:[edi+ebp*2+6F]
    14. ..........
    15. 00464145    F9              stc
    16. 00464146    AA              stos    byte ptr es:[edi]
    17. 00464147  ^ E2 C7           loopd   short 00464110                                //可以在这里F4,
    18. 00464149    8B4424 20       mov     eax, dword ptr [esp+20]                       //接着这里F4,因为前面我们已经调试多次了,熟悉了
    19. 0046414D    8B4424 20       mov     eax, dword ptr [esp+20]
    20. 00464151    83C0 0E         add     eax, 0E
    21. 00464154    83E8 0E         sub     eax, 0E
    22. 00464157    83C0 0E         add     eax, 0E
    23. 0046415A    83E8 0E         sub     eax, 0E
    24. 0046415D    40              inc     eax
    25. 0046415E    78 1D           js      short 0046417D
    26. 00464160    C785 45304000 0>mov     dword ptr [ebp+403045], 1
    27. 0046416A    EB 11           jmp     short 0046417D
    28. 0046416C    8B4424 20       mov     eax, dword ptr [esp+20]
    29. 00464170    83C0 0E         add     eax, 0E
    30. 00464173    83E8 0E         sub     eax, 0E
    31. 00464176    83C0 0E         add     eax, 0E
    32. 00464179    83E8 0E         sub     eax, 0E
    33. 0046417C    40              inc     eax
    34. 0046417D    8D85 D3274000   lea     eax, dword ptr [ebp+4027D3]
    35. 00464183    B9 10070000     mov     ecx, 710
    36. 00464188    E8 41020000     call    004643CE
    37. 0046418D    8985 41304000   mov     dword ptr [ebp+403041], eax
    38. 00464193    8B85 39304000   mov     eax, dword ptr [ebp+403039]
    39. 00464199    83E0 01         and     eax, 1
    40. 0046419C    74 40           je      short 004641DE                             //enter
    41. 0046419E    8DB5 B1314000   lea     esi, dword ptr [ebp+4031B1]
    42. 004641A4    8D85 3E294000   lea     eax, dword ptr [ebp+40293E]
    43. 004641AA    8946 08         mov     dword ptr [esi+8], eax
    44. 004641AD    8BFD            mov     edi, ebp
    45. 004641AF    8D85 CF2F4000   lea     eax, dword ptr [ebp+402FCF]
    46. 004641B5    33DB            xor     ebx, ebx
    47. 004641B7    50              push    eax
    48. 004641B8    64:FF33         push    dword ptr fs:[ebx]
    49. 004641BB    64:8923         mov     dword ptr fs:[ebx], esp
    50. 004641BE    BD 4B484342     mov     ebp, 4243484B
    51. 004641C3    66:B8 0400      mov     ax, 4
    52. 004641C7    EB 01           jmp     short 004641CA
    53. 004641C9    FFCC            dec     esp                                        //INT3异常,无论F7,F8都过不去,
    54. 004641CB    8BEF            mov     ebp, edi
    55. 004641CD    33DB            xor     ebx, ebx
    56. 004641CF    64:8F03         pop     dword ptr fs:[ebx]
    57. 004641D2    83C4 04         add     esp, 4
    58. 004641D5    3C 04           cmp     al, 4
    59. 004641D7    74 05           je      short 004641DE
    60. 004641D9    EB 01           jmp     short 004641DC
    61. ------------------------
    62. 004641DE    8B85 31304000   mov     eax, dword ptr [ebp+403031]               //F2,SHIFT+F9 ,继续f8
    63. 004641E4    0340 3C         add     eax, dword ptr [eax+3C]
    64. 004641E7    05 80000000     add     eax, 80
    65. 004641EC    8B08            mov     ecx, dword ptr [eax]
    66. 004641EE    038D 31304000   add     ecx, dword ptr [ebp+403031]
    67. 004641F4    83C1 10         add     ecx, 10
    68. 004641F7    8B01            mov     eax, dword ptr [ecx]
    69. 004641F9    0385 31304000   add     eax, dword ptr [ebp+403031]
    70. 004641FF    8B18            mov     ebx, dword ptr [eax]
    71. 00464201    899D BD314000   mov     dword ptr [ebp+4031BD], ebx
    72. 00464207    83C0 04         add     eax, 4
    73. -----------------------
    74. 004646E9    8339 00         cmp     dword ptr [ecx], 0              
    75. 004646EC  ^ 0F85 34FFFFFF   jnz     00464626
    76. 004646F2    83C6 0C         add     esi, 0C                            //F4
    77. 004646F5    837E 04 00      cmp     dword ptr [esi+4], 0
    78. 004646F9  ^ 0F85 B4FEFFFF   jnz     004645B3
    79. 004646FF    33C0            xor     eax, eax                          //F4,之后一直F8
    80. 00464701    40              inc     eax
    81. 00464702    83F8 01         cmp     eax, 1
    82. 00464705    74 02           je      short 00464709
    83. 00464707    61              popad
    84. 00464708    C3              retn
    85. 00464709    F785 39304000 0>test    dword ptr [ebp+403039], 2
    86. 00464713    74 18           je      short 0046472D
    87. 00464715    8BBD 31304000   mov     edi, dword ptr [ebp+403031]
    88. 0046471B    037F 3C         add     edi, dword ptr [edi+3C]
    89. 0046471E    8B4F 54         mov     ecx, dword ptr [edi+54]
    90. 00464721    8BB5 31304000   mov     esi, dword ptr [ebp+403031]
    91. 00464727    C606 00         mov     byte ptr [esi], 0
    92. 0046472A    46              inc     esi
    93. 0046472B  ^ E2 FA           loopd   short 00464727
    94. 0046472D    8D85 D3274000   lea     eax, dword ptr [ebp+4027D3]
    95. 00464733    B9 10070000     mov     ecx, 710
    96. 00464738    EB 01           jmp     short 0046473B
    97. 0046473A  - E9 E88EFCFF     jmp     0042D627
    98. ...
    99. 0046473B    E8 8EFCFFFF     call    004643CE                         //F8到这里,一般是保险起见的F7,还是几个f8,一个f4
    100. 00464740    EB 01           jmp     short 00464743
    101. 00464742    C7              ???                                      ; 未知命令
    102. 00464743    8B9D 41304000   mov     ebx, dword ptr [ebp+403041]      //ss:[004648CE]=0002966B,ebx=000000F4,eax=0002962A
    103. 00464749    33C3            xor     eax, ebx                         //eax=00000041,下面就不跳了,程序就退出
    104. 0046474B    74 08           je      short 00464755                   ; 000
    105. 0046474D    EB 01           jmp     short 00464750
    106. 0046474F    2C 61           sub     al, 61
    107. 00464751    EB 01           jmp     short 00464754
    108. 00464753    E8 C38DBDE3     call    E403D51B
    109. ------------------------转存跟随可以见OEP,我们可以去OEP看看,应该在这之前注意下,或许就是所谓的OEP,dump时机。
    110. 004648BE  00400000  ASCII "MZP"
    111. 004648C2  00050DA8         //OEP
    112. 004648C6  00000021
    113. 004648CA  00000000
    114. 004648CE  0002966B
    115. 004648D2  00000001
    116. 004648D6  00054700
    117. 004648DA  0005412C
    118. 004648DE  00000000
    119. 004648E2  00054978
    120. 004648E6  000541B8
    121. -----------------------
    122. 00464762    33DB            xor     ebx, ebx
    123. 00464764    AC              lods    byte ptr [esi]
    124. 00464765    34 61           xor     al, 61
    125. 00464767    2AC3            sub     al, bl
    126. 00464769    C0C0 02         rol     al, 2
    127. 0046476C    AA              stos    byte ptr es:[edi]
    128. 0046476D    43              inc     ebx
    129. 0046476E  ^ E2 F4           loopd   short 00464764        
    130. 00464770    8D85 71324000   lea     eax, dword ptr [ebp+403271]         //F4,地址=00464AFE, (ASCII "IsDebuggerPresent"),eax=00000087
    131. 00464776    50              push    eax                                 //反调试了,壳是在进OEP之前进行反调试,及处理OEP的第一个字节
    132. 00464777    FFB5 D2314000   push    dword ptr [ebp+4031D2]
    133. 0046477D    FF95 C1314000   call    dword ptr [ebp+4031C1]
    134. 00464783    0BC0            or      eax, eax
    135. 00464785    74 08           je      short 0046478F                      //跳
    136. 00464787    FFD0            call    eax
    137. 00464789    0BC0            or      eax, eax
    138. 0046478B    74 02           je      short 0046478F
    139. 0046478D    61              popad
    140. 0046478E    C3              retn
    141. 0046478F    F785 39304000 0>test    dword ptr [ebp+403039], 1          //这里[ebp+403039]=000000021的值,改为0就跳了。
    142. 00464799    74 4F           je      short 004647EA                    //不跳就会调用异常退出.
    143. ...............
    144. 004647EA    90              nop
    145. 004647EB    8D85 982F4000   lea     eax, dword ptr [ebp+402F98]      
    146. 004647F1    50              push    eax
    147. 004647F2    C3              retn
    148. 004647F3    55              push    ebp
    149. 004647F4    8BEC            mov     ebp, esp
    150. 004647F6    57              push    edi
    151. 004647F7    8B45 10         mov     eax, dword ptr [ebp+10]
    152. 004647FA    8BB8 C4000000   mov     edi, dword ptr [eax+C4]
    153. 00464800    FF37            push    dword ptr [edi]
    154. 00464802    33FF            xor     edi, edi
    155. 00464804    64:8F07         pop     dword ptr fs:[edi]
    156. 00464807    8380 C4000000 0>add     dword ptr [eax+C4], 8
    157. 0046480E    8BB8 A4000000   mov     edi, dword ptr [eax+A4]
    158. 00464814    C1C7 07         rol     edi, 7
    159. 00464817    89B8 B8000000   mov     dword ptr [eax+B8], edi
    160. 0046481D    B8 00000000     mov     eax, 0
    161. 00464822    5F              pop     edi
    162. 00464823    C9              leave
    163. 00464824    C3              retn
    164. 00464825    32C0            xor     al, al
    165. 00464827    8DBD D3274000   lea     edi, dword ptr [ebp+4027D3]
    166. 0046482D    B9 93070000     mov     ecx, 793
    167. 00464832    AA              stos    byte ptr es:[edi]               //ecx=793,直到2就快结束循环
    168. 00464833  ^ E2 FD           loopd   short 00464832
    169. 00464835    8DBD C32F4000   lea     edi, dword ptr [ebp+402FC3]    //F4
    170. 0046483B    B9 C0020000     mov     ecx, 2C0
    171. 00464840    AA              stos    byte ptr es:[edi]              //直到ecx=2C0,到2就快结束循环
    172. 00464841  ^ E2 FD           loopd   short 00464840
    173. 00464843    61              popad                                  //F4到这里,我们之前的转存显示的可爱的OEP没了。。
    174. 00464844    50              push    eax
    175. 00464845    33C0            xor     eax, eax
    176. 00464847    64:FF30         push    dword ptr fs:[eax]
    177. 0046484A    64:8920         mov     dword ptr fs:[eax], esp
    178. 0046484D    EB 01           jmp     short 00464850                 //此时这之后的00464850的代码被全部晴空了。
    179. 0046484F    87EB            xchg    ebx, ebp
    180. 00464851    04 C6           add     al, 0C6
    181. 00464853    0000            add     byte ptr [eax], al
    182. 00464855    40              inc     eax
    183. 00464856    8038 00         cmp     byte ptr [eax], 0
    184. 00464859  ^ 75 F7           jnz     short 00464852
    185. 0046485B    C3              retn
    186. 0046485C    55              push    ebp
    187. 0046485D    8BEC            mov     ebp, esp
    188. 0046485F    57              push    edi
    189. 00464860    8B45 10         mov     eax, dword ptr [ebp+10]
    190. 00464863    8BB8 9C000000   mov     edi, dword ptr [eax+9C]
    191. 00464869    FFB7 B9314000   push    dword ptr [edi+4031B9]
    192. 0046486F    8F80 B8000000   pop     dword ptr [eax+B8]
    193. 00464875    89B8 B4000000   mov     dword ptr [eax+B4], edi
    194. 0046487B    C780 B0000000 0>mov     dword ptr [eax+B0], 4
    195. 00464885    B8 00000000     mov     eax, 0
    196. 0046488A    5F              pop     edi
    197. ------------------------------------------------------------
    198. 00464850    0000            add     byte ptr [eax], al             //但是空代码可以继续F8,1次就可以来到我们的OEP了。  
    199. 00464852    0000            add     byte ptr [eax], al
    200. -------------------------F8后来到这里.
    201. 7C92E480    8B1C24          mov     ebx, dword ptr [esp]
    202. 7C92E483    51              push    ecx
    203. 7C92E484    53              push    ebx
    204. 7C92E485    E8 F1C00100     call    7C94A57B
    205. 7C92E48A    0AC0            or      al, al
    206. 7C92E48C    74 0C           je      short 7C92E49A
    207. 7C92E48E    5B              pop     ebx
    208. 7C92E48F    59              pop     ecx
    209. 7C92E490    6A 00           push    0
    210. 7C92E492    51              push    ecx
    211. 7C92E493    E8 C6EBFFFF     call    ZwContinue
    212. 7C92E498    EB 0B           jmp     short 7C92E4A5             //继续几次F8来到OEP
    213. ------------------------
    214. 00450DA9    8BEC            mov     ebp, esp                   //ctrl+g,00450DA8,新建eip,dump.
    215. 00450DAB    83C4 F0         add     esp, -10                   //一路走来与第一次没什么差别,只是这次写的补充第一次不详细之处.
    216. 00450DAE    B8 C80B4500     mov     eax, 00450BC8              
    217. 00450DB3    E8 104EFBFF     call    00405BC8
    218. 00450DB8    A1 24204500     mov     eax, dword ptr [452024]
    219. 00450DBD    8B00            mov     eax, dword ptr [eax]
    220. 00450DBF    E8 98E1FFFF     call    0044EF5C
    221. 00450DC4    8B0D 04214500   mov     ecx, dword ptr [452104]          ; no.00453BD0
    222. 00450DCA    A1 24204500     mov     eax, dword ptr [452024]
    223. 00450DCF    8B00            mov     eax, dword ptr [eax]
    224. 00450DD1    8B15 FC044500   mov     edx, dword ptr [4504FC]          ; no.00450548
    225. 00450DD7    E8 98E1FFFF     call    0044EF74
    226. 00450DDC    A1 24204500     mov     eax, dword ptr [452024]
    227. 00450DE1    8B00            mov     eax, dword ptr [eax]
    228. 00450DE3    E8 0CE2FFFF     call    0044EFF4
    229. 00450DE8    E8 332FFBFF     call    00403D20
    230. 00450DED    8D40 00         lea     eax, dword ptr [eax]
    231. 00450DF0    0000            add     byte ptr [eax], al
    232. Import REConstructor,OEP添00050DA8,获取输入表,我们发现很多无效,这就是API重定义保护(iat加密)的效果了,我们可以简单的等级一修复抓取即完工.
    233. 现在我们是学习手工做,那我们来看看IAT,第一个无效的,我们000541B8.重新载入程序dd 004541B8(这里我们要加上基址).下硬件写入或内存写入.
    234. 第一次断下,我们在堆栈窗口可以看到应该是写入输入表的信息放进内存里,连续5次左右
    235. 0012FF7C   004644B2  返回到 no.004644B2 来自 no.004644B4
    236. 0012FF80   00400100  ASCII "PE"
    237. 0012FF84   00400270  ASCII ".idata"
    238. 0012FF88   0006188D
    239. 0012FF8C   0012FFA0
    240. 0012FF90   00000001
    241. 0012FF94   00000003
    242. 0012FF98   0012FF4C
    243. 0012FF9C   00400000  ASCII "MZP"
    244. -----------------------------
    245. 004541B8  77D3119B  user32.GetKeyboardType 转存窗口出现了写入的API,寄存器也显示了。
    246. 004541BC  00054996
    247. 004541C0  000549A4
    248. 004541C4  000549B2
    249. 004541C8  00000000
    250. 004541CC  000549CC
    251. -------------------------------
    252. 00464677   /EB 19           jmp     short 00464692              //删除断点,我们手工来看看是那里出现问题,F7
    253. 00464679   |52              push    edx
    254. 0046467A   |51              push    ecx
    255. 0046467B   |8B01            mov     eax, dword ptr [ecx]
    256. 0046467D   |2D 00000080     sub     eax, 80000000
    257. 00464682   |50              push    eax
    258. 00464683   |53              push    ebx
    259. 00464684   |FF95 C1314000   call    dword ptr [ebp+4031C1]
    260. 0046468A   |85C0            test    eax, eax
    261. 0046468C   |74 74           je      short 00464702
    262. 0046468E   |59              pop     ecx
    263. 0046468F   |5A              pop     edx
    264. 00464690   |8902            mov     dword ptr [edx], eax
    265. 00464692   \F785 39304000 2>test    dword ptr [ebp+403039], 20   //ss:[004648C6]=00000021
    266. 0046469C    74 45           je      short 004646E3               //没跳
    267. 0046469E    83BD 45304000 0>cmp     dword ptr [ebp+403045], 0   ss:[004648D2]=00000001
    268. 004646A5    74 14           je      short 004646BB               //没跳
    269. 004646A7    81FB 00000070   cmp     ebx, 70000000                //ebx=77D10000
    270. 004646AD    72 08           jb      short 004646B7               //没跳
    271. 004646AF    81FB FFFFFF77   cmp     ebx, 77FFFFFF                //ebx=77D10000 (user32.77D10000)
    272. 004646B5    76 0E           jbe     short 004646C5               //跳了   
    273. 004646B7    EB 2A           jmp     short 004646E3
    274. 004646B9    EB 0A           jmp     short 004646C5
    275. 004646BB    81FB 00000080   cmp     ebx, 80000000
    276. 004646C1    73 02           jnb     short 004646C5
    277. 004646C3    EB 1E           jmp     short 004646E3
    278. 004646C5    57              push    edi                         //edi压入     
    279. 004646C6    56              push    esi                          //esi压入
    280. 004646C7    8DBD 9F324000   lea     edi, dword ptr [ebp+40329F]  //函数放入edi
    281. 004646CD    8B77 04         mov     esi, dword ptr [edi+4]       //
    282. 004646D0    8932            mov     dword ptr [edx], esi
    283. 004646D2    2BC6            sub     eax, esi                     //到了这里,转存中的api就没了,程序就是在这里出了问题的。   
    284. 004646D4    83E8 05         sub     eax, 5                       //搞得我们获取不到完整的IAT表。
    285. 004646D7    C606 E9         mov     byte ptr [esi], 0E9
    286. 004646DA    8946 01         mov     dword ptr [esi+1], eax
    287. 004646DD    8347 04 05      add     dword ptr [edi+4], 5
    288. 004646E1    5E              pop     esi
    289. 004646E2    5F              pop     edi
    290. 004646E3    83C1 04         add     ecx, 4
    291. 004646E6    83C2 04         add     edx, 4
    292. 004646E9    8339 00         cmp     dword ptr [ecx], 0
    293. 004646EC  ^ 0F85 34FFFFFF   jnz     00464626
    294. 004646F2    83C6 0C         add     esi, 0C
    295. 004646F5    837E 04 00      cmp     dword ptr [esi+4], 0
    296. 004646F9  ^ 0F85 B4FEFFFF   jnz     004645B3
    297. 004646FF    33C0            xor     eax, eax
    298. 00464701    40              inc     eax
    299. 00464702    83F8 01         cmp     eax, 1
    300. 00464705    74 02           je      short 00464709
    301. 00464707    61              popad
    302. 00464708    C3              retn
    303. 00464709    F785 39304000 0>test    dword ptr [ebp+403039], 2    //
    304. 00464713    74 18           je      short 0046472D
    305. ----------------------------------------------------
    306. 经过了上面我们单步处理,我们就开始尝试如何让他不处理加密IAT,
    307. 0046469C    74 45           je      short 004646E3               //这里修改为jmp就可以了.
    308. ----------------------------------------------------
    309. 00464755    8DBD E32E4000   lea     edi, dword ptr [ebp+402EE3]
    310. 0046475B    8BF7            mov     esi, edi
    311. 0046475D    B9 E0000000     mov     ecx, 0E0
    312. 00464762    33DB            xor     ebx, ebx
    313. 00464764    AC              lods    byte ptr [esi]
    314. 00464765    34 61           xor     al, 61
    315. 00464767    2AC3            sub     al, bl
    316. 00464769    C0C0 02         rol     al, 2
    317. 0046476C    AA              stos    byte ptr es:[edi]
    318. 0046476D    43              inc     ebx
    319. 0046476E  ^ E2 F4           loopd   short 00464764               //再次来到反调试的地方            
    320. 00464770    8D85 71324000   lea     eax, dword ptr [ebp+403271]  //这里变成红色的,与我们最开始反调试保护选项不一样,是解码?不知,f4
    321. 00464776    50              push    eax
    322. 00464777    FFB5 D2314000   push    dword ptr [ebp+4031D2]
    323. 0046477D    FF95 C1314000   call    dword ptr [ebp+4031C1]
    324. 00464783    0BC0            or      eax, eax
    325. 00464785    74 08           je      short 0046478F                  
    326. 00464787    FFD0            call    eax
    327. 00464789    0BC0            or      eax, eax
    328. 0046478B    74 02           je      short 0046478F           //必须跳,他有时候跳,有时候不跳.
    329. 0046478D    61              popad
    330. 0046478E    C3              retn
    331. 0046478F    F785 39304000 0>test    dword ptr [ebp+403039], 1 //这里应该才是反调试的关键,ss:[004648C6]=00000021,仅仅反调试保护的值不一样.
    332. 00464799    74 4F           je      short 004647EA            //不管,这里必须跳.之后就是F8,F4了,跟前面一样,不重复了,
    333. 到达OEP,IAT全部有效。OK。  
    复制代码

    评分

    参与人数 1飘云币 +16 收起 理由
    幽雅的心 + 16 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表