飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2432|回复: 2

[原创] AHpack 0.1 -> FEUERRADER 的简单分析

[复制链接]
  • TA的每日心情

    2015-11-21 19:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-2 11:36:48 | 显示全部楼层 |阅读模式
    【破文标题】AHpack 0.1 -> FEUERRADER 的简单分析
    【破文作者】yangbing1990[FCT]
    【作者邮箱】yangbing0_0@125.com
    破解工具】OD,LoadPE
    【破解平台】WinXP
    【软件名称】试验小程序
    【保护方式】AHpack 0.1
    【破解声明】照葫芦画瓢 -  -!
    ------------------------------------------------------------------------
    【破解过程】
    1. 004040FF >  60              pushad
    2. 00404100    68 54404000     push    AHpack_0.00404054                  ; ASCII

    3. "KERNEL32.DLL"
    4. 00404105    B8 48404000     mov     eax, <&KERNEL32.GetModuleHandleA>
    5. 0040410A    FF10            call    near dword ptr ds:[eax]            ;

    6. //eax=GetModuleHandle("Kernel32.dll");
    7. 0040410C    68 B3404000     push    AHpack_0.004040B3                  ; //获得 Kernel32.dll

    8. 模块句柄
    9. 00404111    50              push    eax
    10. 00404112    B8 44404000     mov     eax, <&KERNEL32.GetProcAddress>
    11. 00404117    FF10            call    near dword ptr ds:[eax]            ;

    12. //eax=GetProcAddress(eax,"GlobalAlloc");
    13. 00404119    68 00080000     push    800                                ; //获得 ClobalAlloc

    14. 函数地址
    15. 0040411E    6A 40           push    40
    16. 00404120    FFD0            call    near eax                           ; //eax=GlobalAlloc

    17. (GMEM_ZEROINIT,0x800);
    18. 00404122    8905 CA404000   mov     dword ptr ds:[4040CA], eax         ; //申请 内存空间 保

    19. 存在 4040CA
    20. 00404128    89C7            mov     edi, eax
    21. 0040412A    BE 00104000     mov     esi, AHpack_0.00401000
    22. 0040412F    60              pushad                                     ; ----解压函数----
    23. 00404130    FC              cld
    24. 00404131    B2 80           mov     dl, 80
    25. 00404133    31DB            xor     ebx, ebx
    26. 00404135    A4              movs    byte ptr es:[edi], byte ptr ds:[es>
    27. 00404136    B3 02           mov     bl, 2
    28. 00404138    E8 6D000000     call    AHpack_0.004041AA
    29. 0040413D  ^ 73 F6           jnb     short AHpack_0.00404135
    30. 0040413F    31C9            xor     ecx, ecx
    31. 00404141    E8 64000000     call    AHpack_0.004041AA
    32. 00404146    73 1C           jnb     short AHpack_0.00404164
    33. 00404148    31C0            xor     eax, eax
    34. 0040414A    E8 5B000000     call    AHpack_0.004041AA
    35. 0040414F    73 23           jnb     short AHpack_0.00404174
    36. 00404151    B3 02           mov     bl, 2
    37. 00404153    41              inc     ecx
    38. 00404154    B0 10           mov     al, 10
    39. 00404156    E8 4F000000     call    AHpack_0.004041AA
    40. 0040415B    10C0            adc     al, al
    41. 0040415D  ^ 73 F7           jnb     short AHpack_0.00404156
    42. 0040415F    75 3F           jnz     short AHpack_0.004041A0
    43. 00404161    AA              stos    byte ptr es:[edi]
    44. 00404162  ^ EB D4           jmp     short AHpack_0.00404138
    45. 00404164    E8 4D000000     call    AHpack_0.004041B6
    46. 00404169    29D9            sub     ecx, ebx
    47. 0040416B    75 10           jnz     short AHpack_0.0040417D
    48. 0040416D    E8 42000000     call    AHpack_0.004041B4
    49. 00404172    EB 28           jmp     short AHpack_0.0040419C
    50. 00404174    AC              lods    byte ptr ds:[esi]
    51. 00404175    D1E8            shr     eax, 1
    52. 00404177    74 4D           je      short AHpack_0.004041C6
    53. 00404179    11C9            adc     ecx, ecx
    54. 0040417B    EB 1C           jmp     short AHpack_0.00404199
    55. 0040417D    91              xchg    eax, ecx
    56. 0040417E    48              dec     eax
    57. 0040417F    C1E0 08         shl     eax, 8
    58. 00404182    AC              lods    byte ptr ds:[esi]
    59. 00404183    E8 2C000000     call    AHpack_0.004041B4
    60. 00404188    3D 007D0000     cmp     eax, 7D00
    61. 0040418D    73 0A           jnb     short AHpack_0.00404199
    62. 0040418F    80FC 05         cmp     ah, 5
    63. 00404192    73 06           jnb     short AHpack_0.0040419A
    64. 00404194    83F8 7F         cmp     eax, 7F
    65. 00404197    77 02           ja      short AHpack_0.0040419B
    66. 00404199    41              inc     ecx
    67. 0040419A    41              inc     ecx
    68. 0040419B    95              xchg    eax, ebp
    69. 0040419C    89E8            mov     eax, ebp
    70. 0040419E    B3 01           mov     bl, 1
    71. 004041A0    56              push    esi
    72. 004041A1    89FE            mov     esi, edi
    73. 004041A3    29C6            sub     esi, eax
    74. 004041A5    F3:A4           rep     movs byte ptr es:[edi], byte ptr d>
    75. 004041A7    5E              pop     esi
    76. 004041A8  ^ EB 8E           jmp     short AHpack_0.00404138
    77. 004041AA    00D2            add     dl, dl
    78. 004041AC    75 05           jnz     short AHpack_0.004041B3
    79. 004041AE    8A16            mov     dl, byte ptr ds:[esi]
    80. 004041B0    46              inc     esi
    81. 004041B1    10D2            adc     dl, dl
    82. 004041B3    C3              retn
    83. 004041B4    31C9            xor     ecx, ecx
    84. 004041B6    41              inc     ecx
    85. 004041B7    E8 EEFFFFFF     call    AHpack_0.004041AA
    86. 004041BC    11C9            adc     ecx, ecx
    87. 004041BE    E8 E7FFFFFF     call    AHpack_0.004041AA
    88. 004041C3  ^ 72 F2           jb      short AHpack_0.004041B7
    89. 004041C5    C3              retn
    90. 004041C6    61              popad                                      ; ---解压函数---
    91. 004041C7    B9 FC070000     mov     ecx, 7FC                           ; //解压数据的 大小
    92. 004041CC    8B1C08          mov     ebx, dword ptr ds:[eax+ecx]
    93. 004041CF    8999 00104000   mov     dword ptr ds:[ecx+401000], ebx
    94. 004041D5  ^ E2 F5           loopd   short AHpack_0.004041CC            ; //将解压后的数据 由

    95. 后向前拷贝到 401000
    96. 004041D7    90              nop
    97. 004041D8    90              nop
    98. 004041D9    BA 00004000     mov     edx, AHpack_0.00400000             ; //基址
    99. 004041DE    BE 70200000     mov     esi, 2070                          ; //输入表地址 也是第

    100. 一个DLL的ORG保存的地址的RVA
    101. 004041E3    01D6            add     esi, edx                           ; //获得VA
    102. 004041E5    8B46 0C         mov     eax, dword ptr ds:[esi+C]          ; //获得DllName的RVA
    103. 004041E8    85C0            test    eax, eax
    104. 004041EA    0F84 87000000   je      AHpack_0.00404277                  ; //判断DLLName是否为

    105. 空(为空说明所有DLL都遍历了)
    106. 004041F0    01D0            add     eax, edx                           ; //获得DllName的VA
    107. 004041F2    89C3            mov     ebx, eax
    108. 004041F4    50              push    eax
    109. 004041F5    B8 48404000     mov     eax, <&KERNEL32.GetModuleHandleA>  ;

    110. //eax=GetModuleHandle(DllName);
    111. 004041FA    FF10            call    near dword ptr ds:[eax]            ; //获得DllName的 模

    112. 块句柄
    113. 004041FC    85C0            test    eax, eax
    114. 004041FE    75 08           jnz     short AHpack_0.00404208            ; //判断 句柄是否获得

    115. 成功
    116. 00404200    53              push    ebx
    117. 00404201    B8 4C404000     mov     eax, <&KERNEL32.LoadLibraryA>      ; //失败就用

    118. LoadLibrary 再次获取
    119. 00404206    FF10            call    near dword ptr ds:[eax]
    120. 00404208    8905 CE404000   mov     dword ptr ds:[4040CE], eax         ; //DllName的模块句柄

    121. 保存在 4040CE
    122. 0040420E    C705 D2404000 0>mov     dword ptr ds:[4040D2], 0           ; //4040D2(偏移值 大

    123. 小DWORD 即 =4*循环次数(从0开始)) 清零
    124. 00404218    BA 00004000     mov     edx, AHpack_0.00400000             ; //基址
    125. 0040421D    8B06            mov     eax, dword ptr ds:[esi]            ; //获得ORG的RVA
    126. 0040421F    85C0            test    eax, eax
    127. 00404221    75 03           jnz     short AHpack_0.00404226            ; //判断ORG 是否为零
    128. 00404223    8B46 10         mov     eax, dword ptr ds:[esi+10]         ; //如果为零 则取

    129. FirstThunk
    130. 00404226    01D0            add     eax, edx                           ; //获得 VA
    131. 00404228    0305 D2404000   add     eax, dword ptr ds:[4040D2]
    132. 0040422E    8B18            mov     ebx, dword ptr ds:[eax]            ; //获得 函数名RVA
    133. 00404230    8B7E 10         mov     edi, dword ptr ds:[esi+10]         ; //获得FirstThunk
    134. 00404233    01D7            add     edi, edx                           ; //获得 FirstThunk的

    135. VA
    136. 00404235    033D D2404000   add     edi, dword ptr ds:[4040D2]
    137. 0040423B    85DB            test    ebx, ebx
    138. 0040423D    74 2B           je      short AHpack_0.0040426A            ; //判断保存函数名的

    139. 地址的 RVA是否为空 如果为空说明这个DLL的函数都遍历完了
    140. 0040423F    F7C3 00000080   test    ebx, 80000000
    141. 00404245    75 04           jnz     short AHpack_0.0040424B            ; //判断是以序号方式

    142. 还是函数名方式
    143. 00404247    01D3            add     ebx, edx                           ; //获得VA
    144. 00404249    43              inc     ebx
    145. 0040424A    43              inc     ebx                                ; //去了 开头序号
    146. 0040424B    81E3 FFFFFF0F   and     ebx, 0FFFFFFF
    147. 00404251    53              push    ebx                                ; //函数名
    148. 00404252    FF35 CE404000   push    dword ptr ds:[4040CE]              ; //当前DLL的模块句柄
    149. 00404258    B8 44404000     mov     eax, <&KERNEL32.GetProcAddress>
    150. 0040425D    FF10            call    near dword ptr ds:[eax]            ; //获得函数 地址
    151. 0040425F    8907            mov     dword ptr ds:[edi], eax            ; //用函数地址 填充

    152. FirstThunk
    153. 00404261    8305 D2404000 0>add     dword ptr ds:[4040D2], 4
    154. 00404268  ^ EB AE           jmp     short AHpack_0.00404218            ; //循环 取函数地址

    155. 填充 FirstThunk
    156. 0040426A    83C6 14         add     esi, 14                            ; //获得 下一个dll保

    157. 存ORG的地址的RVA
    158. 0040426D    BA 00004000     mov     edx, AHpack_0.00400000             ; //基址
    159. 00404272  ^ E9 6EFFFFFF     jmp     AHpack_0.004041E5                  ; //循环 遍历DLL
    160. 00404277    68 54404000     push    AHpack_0.00404054                  ; ASCII

    161. "KERNEL32.DLL"
    162. 0040427C    B8 48404000     mov     eax, <&KERNEL32.GetModuleHandleA>
    163. 00404281    FF10            call    near dword ptr ds:[eax]            ; //获得

    164. "Kernel32.dll"的模块句柄
    165. 00404283    68 BF404000     push    AHpack_0.004040BF                  ; ASCII "GlobalFree"
    166. 00404288    50              push    eax
    167. 00404289    B8 44404000     mov     eax, <&KERNEL32.GetProcAddress>
    168. 0040428E    FF10            call    near dword ptr ds:[eax]            ; //获得 GlobalFree

    169. 函数地址
    170. 00404290    8B15 CA404000   mov     edx, dword ptr ds:[4040CA]
    171. 00404296    52              push    edx
    172. 00404297    FFD0            call    near eax                           ; //释放 申请空间
    173. 00404299    61              popad                                      ; //还原 寄存器
    174. 0040429A    BA 00104000     mov     edx, AHpack_0.00401000             ; //OEP
    175. 0040429F    FFE2            jmp     near edx                           ; //
    176. 004042A1    90              nop
    177. 004042A2    C3              retn
    复制代码


    最后膜拜YAYA兽 附上程序

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情

    2017-7-19 15:45
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-5-2 15:52:11 | 显示全部楼层
    你把aspack分析一下吧/:018
    PYG19周年生日快乐!
  • TA的每日心情

    2015-11-21 19:12
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-5-2 15:56:32 | 显示全部楼层
    收到 现在就去/:001
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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