飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3022|回复: 6

申请文章-NsPack3.7分析和静态脱壳机

[复制链接]

该用户从未签到

发表于 2009-8-3 21:35:11 | 显示全部楼层 |阅读模式
壳版本: Nspack3.7.Cracked.exe
工具: IDA, OD

外壳shell简单分析

外壳第一部分:
1.申请堆空间
2.处理shell第二部分,并拷贝到堆空间
3.执行完shell第二部分后循环处理E8
4.填写IAT
5.恢复内存属性
6.跳转到OEP

外壳第二部分:
解压数据并拷贝到原地址


外壳shell分析:
  1. .nsp1:0040A219                 pushf                   ; (1)
  2. .nsp1:0040A21A                 pusha
  3. .nsp1:0040A21B                 call    $+5
  4. .nsp1:0040A220                 pop     ebp
  5. .nsp1:0040A221                 sub     ebp, 7          ; 获得当前(1)处地址
  6. .nsp1:0040A224                 lea     ecx, [ebp-19Dh]
  7. .nsp1:0040A22A                 cmp     byte ptr [ecx], 1 ; 标记位
  8. .nsp1:0040A22D                 jz      loc_40A475
  9. .nsp1:0040A233                 mov     byte ptr [ecx], 1 ; 标记位置1
  10. .nsp1:0040A236                 mov     eax, ebp
  11. .nsp1:0040A238                 sub     eax, [ebp-209h] ; [ebp-209] 存放当前 OEP RVA
  12. .nsp1:0040A23E                 mov     [ebp-209h], eax ; image base
  13. .nsp1:0040A244                 add     [ebp-1D9h], eax ; image base + code seg RVA
  14. .nsp1:0040A24A                 lea     esi, [ebp-195h]
  15. .nsp1:0040A250                 add     [esi], eax      ; image base + code seg RVA
  16. .nsp1:0040A252                 push    ebp             ; 保存ebp(加壳后程序入口点)
  17. .nsp1:0040A253                 push    esi             ; 保存esi(DWORD指针,指向未加壳程序代码段内存偏移)
  18. .nsp1:0040A254                 push    40h             ; 参数(PAGE_EXECUTE_READWRITE 0x40)
  19. .nsp1:0040A256                 push    1000h           ; 参数(MEM_COMMIT 0x1000 )
  20. .nsp1:0040A25B                 push    1000h           ; 参数(dwSize)
  21. .nsp1:0040A260                 push    0               ; 起始地址,为0则系统自动分配
  22. .nsp1:0040A262                 call    dword ptr [ebp-171h] ; CALL kernel32.VirtualAlloc
  23. .nsp1:0040A268                 test    eax, eax        ; 是否申请成功
  24. .nsp1:0040A26A                 jz      loc_40A5D9
  25. .nsp1:0040A270                 mov     [ebp-1E1h], eax ; 保存申请的堆空间首地址
  26. .nsp1:0040A276                 call    $+5
  27. .nsp1:0040A27B                 pop     ebx
  28. .nsp1:0040A27C                 mov     ecx, 367h
  29. .nsp1:0040A281                 add     ebx, ecx
  30. .nsp1:0040A283                 push    eax             ; 目的,申请的堆空间
  31. .nsp1:0040A284                 push    ebx             ; 源数据,shell第二部分代码
  32. .nsp1:0040A285                 call    __ShellDecode   ; 把shell第二部分代码修正并拷贝到堆空间
  33. .nsp1:0040A28A                 pop     esi
  34. .nsp1:0040A28B                 pop     ebp
  35. .nsp1:0040A28C                 mov     esi, [esi]      ; [esi] 00401000
  36. .nsp1:0040A28E                 mov     edi, ebp        ; 加壳后OEP内存偏移
  37. .nsp1:0040A290                 add     edi, [ebp-219h] ; [ebp-219] 取得偏移 906h
  38. .nsp1:0040A296                 mov     ebx, edi
  39. .nsp1:0040A298                 cmp     dword ptr [edi], 0
  40. .nsp1:0040A29B                 jnz     short loc_40A2A7
  41. .nsp1:0040A29D                 add     edi, 4
  42. .nsp1:0040A2A0                 mov     ecx, 0
  43. .nsp1:0040A2A5                 jmp     short loc_40A2BD
  44. .nsp1:0040A2A7 ; ---------------------------------------------------------------------------
  45. .nsp1:0040A2A7
  46. .nsp1:0040A2A7 loc_40A2A7:                             ; CODE XREF: start+82j
  47. .nsp1:0040A2A7                 mov     ecx, 1
  48. .nsp1:0040A2AC                 add     edi, [ebx]
  49. .nsp1:0040A2AE                 add     ebx, 4
  50. .nsp1:0040A2B1
  51. .nsp1:0040A2B1 loc_40A2B1:                             ; CODE XREF: start+CFj
  52. .nsp1:0040A2B1                 cmp     dword ptr [ebx], 0
  53. .nsp1:0040A2B4                 jz      short loc_40A2EA
  54. .nsp1:0040A2B6                 add     [ebx], edx
  55. .nsp1:0040A2B8                 mov     esi, [ebx]
  56. .nsp1:0040A2BA                 add     edi, [ebx+4]
  57. .nsp1:0040A2BD
  58. .nsp1:0040A2BD loc_40A2BD:                             ; CODE XREF: start+8Cj
  59. .nsp1:0040A2BD                 push    edi
  60. .nsp1:0040A2BE                 push    ecx
  61. .nsp1:0040A2BF                 push    ebx
  62. .nsp1:0040A2C0                 push    dword ptr [ebp-16Dh] ; VirtualFree
  63. .nsp1:0040A2C6                 push    dword ptr [ebp-171h] ; [EBP-171] kernel32.VirtualAlloc
  64. .nsp1:0040A2CC                 mov     edx, esi
  65. .nsp1:0040A2CE                 mov     ecx, edi
  66. .nsp1:0040A2D0                 mov     eax, [ebp-1E1h] ; VirtualAlloc返回的首地址
  67. .nsp1:0040A2D6                 add     eax, 5AAh
  68. .nsp1:0040A2DB                 call    eax             ; __Shell_Decode_Data 数据解压并拷贝到原虚拟地址
  69. .nsp1:0040A2DD                 pop     ebx
  70. .nsp1:0040A2DE                 pop     ecx
  71. .nsp1:0040A2DF                 pop     edi
  72. .nsp1:0040A2E0                 cmp     ecx, 0
  73. .nsp1:0040A2E3                 jz      short loc_40A2EA
  74. .nsp1:0040A2E5                 add     ebx, 8
  75. .nsp1:0040A2E8                 jmp     short loc_40A2B1
  76. .nsp1:0040A2EA ; ---------------------------------------------------------------------------
  77. .nsp1:0040A2EA
  78. .nsp1:0040A2EA loc_40A2EA:                             ; CODE XREF: start+9Bj
  79. .nsp1:0040A2EA                                         ; start+CAj
  80. .nsp1:0040A2EA                 push    8000h
  81. .nsp1:0040A2EF                 push    0
  82. .nsp1:0040A2F1                 push    dword ptr [ebp-1E1h]
  83. .nsp1:0040A2F7                 call    dword ptr [ebp-16Dh] ; kernel32.VirtualFree
  84. .nsp1:0040A2FD                 lea     esi, [ebp-1D9h]
  85. .nsp1:0040A303                 mov     ecx, [esi+8]
  86. .nsp1:0040A306                 lea     edx, [esi+10h]
  87. .nsp1:0040A309                 mov     esi, [esi]
  88. .nsp1:0040A30B                 mov     edi, esi
  89. .nsp1:0040A30D                 cmp     ecx, 0          ; 循环处理near call(ecx循环次数)
  90. .nsp1:0040A310                 jz      short loc_40A351
  91. .nsp1:0040A312
  92. .nsp1:0040A312 loc_40A312:                             ; CODE XREF: start+100j
  93. .nsp1:0040A312                                         ; start+10Ej
  94. .nsp1:0040A312                 mov     al, [edi]       ; 处理开始
  95. .nsp1:0040A314                 inc     edi
  96. .nsp1:0040A315                 sub     al, 0E8h        ; E8是near call的机器码
  97. .nsp1:0040A317
  98. .nsp1:0040A317 loc_40A317:                             ; CODE XREF: start+136j
  99. .nsp1:0040A317                 cmp     al, 1
  100. .nsp1:0040A319                 ja      short loc_40A312 ; 大于1跳过
  101. .nsp1:0040A31B                 mov     eax, [edi]
  102. .nsp1:0040A31D                 cmp     byte ptr [edx+1], 0
  103. .nsp1:0040A321                 jz      short loc_40A337 ; 是near call则跳去处理
  104. .nsp1:0040A323                 mov     bl, [edx]
  105. .nsp1:0040A325                 cmp     [edi], bl
  106. .nsp1:0040A327                 jnz     short loc_40A312
  107. .nsp1:0040A329                 mov     bl, [edi+4]
  108. .nsp1:0040A32C                 shr     ax, 8
  109. .nsp1:0040A330                 rol     eax, 10h
  110. .nsp1:0040A333                 xchg    al, ah
  111. .nsp1:0040A335                 jmp     short loc_40A341
  112. .nsp1:0040A337 ; ---------------------------------------------------------------------------
  113. .nsp1:0040A337
  114. .nsp1:0040A337 loc_40A337:                             ; CODE XREF: start+108j
  115. .nsp1:0040A337                 mov     bl, [edi+4]
  116. .nsp1:0040A33A                 xchg    al, ah
  117. .nsp1:0040A33C                 rol     eax, 10h
  118. .nsp1:0040A33F                 xchg    al, ah
  119. .nsp1:0040A341
  120. .nsp1:0040A341 loc_40A341:                             ; CODE XREF: start+11Cj
  121. .nsp1:0040A341                 sub     eax, edi
  122. .nsp1:0040A343                 add     eax, esi
  123. .nsp1:0040A345                 mov     [edi], eax
  124. .nsp1:0040A347                 add     edi, 5
  125. .nsp1:0040A34A                 sub     bl, 0E8h
  126. .nsp1:0040A34D                 mov     eax, ebx
  127. .nsp1:0040A34F                 loop    loc_40A317      ; near call处理结束
  128. .nsp1:0040A351
  129. .nsp1:0040A351 loc_40A351:                             ; CODE XREF: start+F7j
  130. .nsp1:0040A351                 call    __Fill_IAT_Table ; 填IAT表
  131. .nsp1:0040A356                 lea     ecx, [ebp-1C5h]
  132. .nsp1:0040A35C                 mov     eax, [ecx+8]
  133. .nsp1:0040A35F                 cmp     eax, 0
  134. .nsp1:0040A362                 jz      loc_40A3E9
  135. .nsp1:0040A368                 mov     esi, edx
  136. .nsp1:0040A36A                 sub     esi, [ecx+10h]
  137. .nsp1:0040A36D                 jz      short loc_40A3E9
  138. .nsp1:0040A36F                 mov     [ecx+10h], esi
  139. .nsp1:0040A372                 lea     esi, [ebp-195h]
  140. .nsp1:0040A378                 mov     esi, [esi]
  141. .nsp1:0040A37A                 lea     ebx, [esi-4]
  142. .nsp1:0040A37D                 mov     eax, [ecx]
  143. .nsp1:0040A37F                 cmp     eax, 1
  144. .nsp1:0040A382                 jz      short loc_40A38E
  145. .nsp1:0040A384                 mov     edi, edx
  146. .nsp1:0040A386                 add     edi, [ecx+8]
  147. .nsp1:0040A389                 mov     ecx, [ecx+10h]
  148. .nsp1:0040A38C                 jmp     short loc_40A396
  149. .nsp1:0040A38E ; ---------------------------------------------------------------------------
  150. .nsp1:0040A38E
  151. .nsp1:0040A38E loc_40A38E:                             ; CODE XREF: start+169j
  152. .nsp1:0040A38E                 mov     edi, esi
  153. .nsp1:0040A390                 add     edi, [ecx+8]
  154. .nsp1:0040A393                 mov     ecx, [ecx+10h]
  155. .nsp1:0040A396
  156. .nsp1:0040A396 loc_40A396:                             ; CODE XREF: start+173j
  157. .nsp1:0040A396                                         ; start+18Ej
  158. .nsp1:0040A396                 xor     eax, eax
  159. .nsp1:0040A398                 mov     al, [edi]
  160. .nsp1:0040A39A                 inc     edi
  161. .nsp1:0040A39B                 or      eax, eax
  162. .nsp1:0040A39D                 jz      short loc_40A3BF
  163. .nsp1:0040A39F                 cmp     al, 0EFh
  164. .nsp1:0040A3A1                 ja      short loc_40A3A9
  165. .nsp1:0040A3A3
  166. .nsp1:0040A3A3 loc_40A3A3:                             ; CODE XREF: start+19Dj
  167. .nsp1:0040A3A3                                         ; start+1A4j
  168. .nsp1:0040A3A3                 add     ebx, eax
  169. .nsp1:0040A3A5                 add     [ebx], ecx
  170. .nsp1:0040A3A7                 jmp     short loc_40A396
  171. .nsp1:0040A3A9 ; ---------------------------------------------------------------------------
  172. .nsp1:0040A3A9
  173. .nsp1:0040A3A9 loc_40A3A9:                             ; CODE XREF: start+188j
  174. .nsp1:0040A3A9                 and     al, 0Fh
  175. .nsp1:0040A3AB                 shl     eax, 10h
  176. .nsp1:0040A3AE                 mov     ax, [edi]
  177. .nsp1:0040A3B1                 add     edi, 2
  178. .nsp1:0040A3B4                 or      eax, eax
  179. .nsp1:0040A3B6                 jnz     short loc_40A3A3
  180. .nsp1:0040A3B8                 mov     eax, [edi]
  181. .nsp1:0040A3BA                 add     edi, 4
  182. .nsp1:0040A3BD                 jmp     short loc_40A3A3
  183. .nsp1:0040A3BF ; ---------------------------------------------------------------------------
  184. .nsp1:0040A3BF
  185. .nsp1:0040A3BF loc_40A3BF:                             ; CODE XREF: start+184j
  186. .nsp1:0040A3BF                 xor     ebx, ebx
  187. .nsp1:0040A3C1                 xchg    edi, esi
  188. .nsp1:0040A3C3                 mov     eax, [esi]
  189. .nsp1:0040A3C5                 cmp     eax, 0
  190. .nsp1:0040A3C8                 jz      short loc_40A3E9
  191. .nsp1:0040A3CA
  192. .nsp1:0040A3CA loc_40A3CA:                             ; CODE XREF: start+1BCj
  193. .nsp1:0040A3CA                 lodsd
  194. .nsp1:0040A3CB                 or      eax, eax
  195. .nsp1:0040A3CD                 jz      short loc_40A3D7
  196. .nsp1:0040A3CF                 add     ebx, eax
  197. .nsp1:0040A3D1                 add     [edi+ebx], cx
  198. .nsp1:0040A3D5                 jmp     short loc_40A3CA
  199. .nsp1:0040A3D7 ; ---------------------------------------------------------------------------
  200. .nsp1:0040A3D7
  201. .nsp1:0040A3D7 loc_40A3D7:                             ; CODE XREF: start+1B4j
  202. .nsp1:0040A3D7                 xor     ebx, ebx
  203. .nsp1:0040A3D9                 shr     ecx, 10h
  204. .nsp1:0040A3DC
  205. .nsp1:0040A3DC loc_40A3DC:                             ; CODE XREF: start+1CEj
  206. .nsp1:0040A3DC                 lodsd
  207. .nsp1:0040A3DD                 or      eax, eax
  208. .nsp1:0040A3DF                 jz      short loc_40A3E9
  209. .nsp1:0040A3E1                 add     ebx, eax
  210. .nsp1:0040A3E3                 add     [edi+ebx], cx
  211. .nsp1:0040A3E7                 jmp     short loc_40A3DC
  212. .nsp1:0040A3E9 ; ---------------------------------------------------------------------------
  213. .nsp1:0040A3E9
  214. .nsp1:0040A3E9 loc_40A3E9:                             ; CODE XREF: start+149j
  215. .nsp1:0040A3E9                                         ; start+154j ...
  216. .nsp1:0040A3E9                 lea     esi, [ebp-209h]
  217. .nsp1:0040A3EF                 mov     edx, [esi]
  218. .nsp1:0040A3F1                 lea     esi, [ebp-1ADh]
  219. .nsp1:0040A3F7                 mov     al, [esi]
  220. .nsp1:0040A3F9                 cmp     al, 1
  221. .nsp1:0040A3FB                 jnz     short loc_40A43C
  222. .nsp1:0040A3FD                 add     edx, [esi+4]
  223. .nsp1:0040A400                 push    esi
  224. .nsp1:0040A401                 push    edx
  225. .nsp1:0040A402                 push    esi
  226. .nsp1:0040A403                 push    4
  227. .nsp1:0040A405                 push    100h
  228. .nsp1:0040A40A                 push    edx
  229. .nsp1:0040A40B                 call    dword ptr [ebp-175h] ;  kernel32.VirtualProtect
  230. .nsp1:0040A411                 pop     edi
  231. .nsp1:0040A412                 pop     esi
  232. .nsp1:0040A413                 cmp     eax, 1
  233. .nsp1:0040A416                 jnz     loc_40A5D9
  234. .nsp1:0040A41C                 add     esi, 8
  235. .nsp1:0040A41F                 mov     ecx, 8
  236. .nsp1:0040A424                 rep movsb
  237. .nsp1:0040A426                 sub     esi, 0Ch
  238. .nsp1:0040A429                 sub     edi, 8
  239. .nsp1:0040A42C                 push    esi
  240. .nsp1:0040A42D                 push    dword ptr [esi-4]
  241. .nsp1:0040A430                 push    100h
  242. .nsp1:0040A435                 push    edi
  243. .nsp1:0040A436                 call    dword ptr [ebp-175h] ;  kernel32.VirtualProtect
  244. .nsp1:0040A43C
  245. .nsp1:0040A43C loc_40A43C:                             ; CODE XREF: start+1E2j
  246. .nsp1:0040A43C                 push    ebp
  247. .nsp1:0040A43D                 pop     ebx
  248. .nsp1:0040A43E                 sub     ebx, 21h
  249. .nsp1:0040A444                 xor     ecx, ecx
  250. .nsp1:0040A446                 mov     cl, [ebx]
  251. .nsp1:0040A448                 cmp     cl, 0           ; 循环还原属性(cl存放循环次数)
  252. .nsp1:0040A44B                 jz      short loc_40A475
  253. .nsp1:0040A44D                 inc     ebx             ; 原程序 代码块 和 数据块 属性还原
  254. .nsp1:0040A44E                 lea     esi, [ebp-209h]
  255. .nsp1:0040A454                 mov     edx, [esi]
  256. .nsp1:0040A456
  257. .nsp1:0040A456 loc_40A456:                             ; CODE XREF: start+25Aj
  258. .nsp1:0040A456                 push    esi
  259. .nsp1:0040A457                 push    ecx
  260. .nsp1:0040A458                 push    ebx
  261. .nsp1:0040A459                 push    edx
  262. .nsp1:0040A45A                 push    esi
  263. .nsp1:0040A45B                 push    dword ptr [ebx]
  264. .nsp1:0040A45D                 push    dword ptr [ebx+4]
  265. .nsp1:0040A460                 mov     eax, [ebx+8]
  266. .nsp1:0040A463                 add     eax, edx
  267. .nsp1:0040A465                 push    eax
  268. .nsp1:0040A466                 call    dword ptr [ebp-175h] ; kernel32.VirtualProtect
  269. .nsp1:0040A46C                 pop     edx
  270. .nsp1:0040A46D                 pop     ebx
  271. .nsp1:0040A46E                 pop     ecx
  272. .nsp1:0040A46F                 pop     esi
  273. .nsp1:0040A470                 add     ebx, 0Ch
  274. .nsp1:0040A473                 loop    loc_40A456
  275. .nsp1:0040A475
  276. .nsp1:0040A475 loc_40A475:                             ; CODE XREF: start+14j
  277. .nsp1:0040A475                                         ; start+232j
  278. .nsp1:0040A475                 mov     eax, 0
  279. .nsp1:0040A47A                 cmp     eax, 0
  280. .nsp1:0040A47D                 jz      short loc_40A489
  281. .nsp1:0040A47F                 popa
  282. .nsp1:0040A480                 popf
  283. .nsp1:0040A481                 mov     eax, 1
  284. .nsp1:0040A486                 retn    0Ch
  285. .nsp1:0040A489 ; ---------------------------------------------------------------------------
  286. .nsp1:0040A489
  287. .nsp1:0040A489 loc_40A489:                             ; CODE XREF: start+264j
  288. .nsp1:0040A489                 popa
  289. .nsp1:0040A48A                 popf
  290. .nsp1:0040A48B                 jmp     near ptr dword_401000 ; jmp to OEP
  291. .nsp1:0040A48B start           endp
复制代码

本帖子中包含更多资源

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

x
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 623 天

    [LV.9]以坛为家II

    发表于 2009-8-7 12:44:37 | 显示全部楼层
    有没有脱壳机我有一个软件是用这个软件加密的
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-7 20:57:37 | 显示全部楼层
    LZ是科锐学员?
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-8-7 23:27:49 | 显示全部楼层
    大牛有啥指点么
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-8-8 07:33:34 | 显示全部楼层
    原帖由 boy 于 2009-8-7 23:27 发表
    大牛有啥指点么

    没什么,发现在看雪一个科锐学员发的帖子跟你的一样,只是好奇
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-8-8 19:43:42 | 显示全部楼层
    唔,我把我帖子复制然后帖了份...
    还以为大牛对小菜我有单独辅导,激动的一阵子.
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-8-13 19:08
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2015-8-15 21:00:59 | 显示全部楼层
    有没有直接可以在windows下用的工具呢?C++还要安装其他程序。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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