AcProtect 1.41 外壳分析[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 bmd2chen 的 blog

【目    标】: 应作者要求,这里不贴上软件名
【工    具】:olydbg1.1(diy版)、lordpe、importrec1.6f 
【任    务】:分析外壳  
【操作平台】:windows 2003 server 
【作    者】: loveboom[dfcg][fcg][us]
【相关链接】: ......
【简要说明】: 脱acprotect的壳并不多,以前最多只是大概的脱一下,对壳有流程并没有多少认识,前几天帮朋友了一下这个软件,也许
    是我水平太菜了,也许是脱这个东西脱的比较少,在脱这个软件花了我很多时间,搞的过程中还很容易出小问题。还有一个原因是脱了一下新
版的aspr 2.x stolen code让我看到头疼,虽然坚持了,但现在还有一小部分没有解决:-(。没办法两个都壳都是难搞的,本着看aspr的东西稍
微多了点,因此牺牲了睡觉时间,帮自己补了下课。壳的思路比较新,边执行边解壳,解压一段执行后又还原回去,代码替换,embedd protect
等等。这么有吸引力,当然不要错过了。因为我对rsa无key怎么突破之类的没有一点了解,再者也没有见过软件用rsa lock code.,所以这次没
有分析key相关的东西。我这次和以前的文章有点不同,这次为了更细的分析出壳的各模块功能,把相关的模块放在独立的地方,也不像以前那
样,插来插去的。不是很方便自己查看。也很久没有细细的去品尝壳了。也是该“享受”一下。

【详细过程】:
	写在前面的,你只是想知道怎么脱壳的话,那么这你可跳过这一章节,这一章节是分析壳的每个部分,是比较漫长的。如果你完全分析好了,
后面脱就简单了。
	  由于是一步一步的走,所以不用什么特别的设置了。唯一一点就是要很磨得下去。打开od,忽略全部异常。准备眼睛再度近视几度。
泡上一杯水,然后开始这次的旅程:
为了防止壳的检测,这次我没有去除花指令直接动态跟踪分析了下。

	0057c000 >  60              pushad                                   ; ep
	0057c001    e8 01000000     call 0057c007                            ; 程序一开始就反复解壳代码
	0057c006  - 72 83           jb short 0057bf8b
	0057c008    04 24           add al,24
	0057c00a    06              push es
	0057c00b    c3              retn
	0057c00c    85c3            test ebx,eax
	0057c00e    76 01           jbe short 0057c011
	0057c010    4b              dec ebx
	0057c011    87d8            xchg eax,ebx
	0057c013    e8 01000000     call 0057c019
	0057c018  - 76 83           jbe short 0057bf9d
......
	0057c204    64:ff30         push dword ptr fs:[eax]
	0057c207    64:8920         mov dword ptr fs:[eax],esp
	0057c20a    cc              int3
	0057c20b    90              nop
	0057c20c    f8              clc
	0057c20d    90              nop
	0057c20e    fc              cld
......
	0057c29f    64:8f05 0000000>pop dword ptr fs:[0]                     ; 直接f2,然后执行到这里,
	0057c2a6    83c4 04         add esp,4
	0057c2a9    7c 03           jl short 0057c2ae                        ; 这里是开始还原的地址
	0057c2ab    7d 01           jge short 0057c2ae
......
	0057c436    4a              dec edx
	0057c437  ^ 0f85 7fffffff   jnz 0057c3bc                             ; 没有解压完则跳回继续解压
	0057c43d    eb 01           jmp short 0057c440

壳一开始就通过几个异常来循环解压出壳的代码。解压的方法很简单的:

	mov ebx,dword ptr ds:[eax]
	xor ebx,edi
	ror ebx,1f
	add eax,4
	xor ebx,dword ptr ds:[eax]
	add eax,-4
	mov dword ptr ds:[eax],ebx
	xor edi,45ba1300
继续:
......
	0057c7f8    64:8f05 0000000>pop dword ptr fs:[0]                     ; 0012ffe0
	0057c7ff    83c4 04         add esp,4
	0057c802    e9 bb4a0100     jmp 005912c2                             ; 全部解压完了跳去执行壳的代码
......

	005912c2    e8 39aeffff     call <sub_getebp >
; jmp到这里 005912c7 e8 00000000 call 005912cc 005912cc 5b pop ebx 005912cd 2b9d 0e204000 sub ebx,dword ptr ss:[ebp+40200e] ; 计算imagebase 005912d3 81eb cc520100 sub ebx,152cc 005912d9 899d 46f84000 mov dword ptr ss:[ebp+40f846],ebx ; 计算出的imagebase保存到 [ebp+40f846]=[0058a846]=400000 005912df 899d 7bfd4000 mov dword ptr
本文关键:AcProtect 1.41 外壳分析
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top