【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 Dfcg官方大本营
【使用工具】 Ollydbg1.10b(反Antidbg版),ImportREC1.42
【破解平台】 Win2000/XP
【软件名称】 PE文件分析器 【下载地址】 附件下载
【软件简介】 Acprotect1.10 Build123“注册”版本加密的一个加密的一个PE文件分析器。
【软件大小】 553k
【加壳方式】 UltraProtect 1.x -> RISCO Software Inc.
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享。
【破解目的】 模拟跟踪寻找Stolen Code具体内容。
前言,这个软件是我用Acprotect1.10 Build123“注册”版本加密的,没有使用RSA生成KEY保护,使用了所有反跟踪选项,关于动态代码替换保护软件已说明只支持C++和Dephi,呵呵,对准敌人的死穴点吧,就是模拟跟踪+内存镜像断点。
先OD载入原程序看看
004B7220 > $Content$nbsp; 55 PUSH EBP //典型Dephi语言入口点,当Acprotect的壳运行到OEP时,你会发现入口点附近的一些代码被修改,如果你直接脱壳会导致不能运行。经过分析几个Acprotect修改入口代码个数,暂时发现一般是6个字节,有待验证。
稍微说明一下:
每一种编译工具例如 : VC++ , Delphi , Borland , etc..
在OEP有一个唯一的/相同的PE头
其中的一些是这样的:
Push EBP //第一句就是我们模拟跟踪的对象,幸运的是,目前Acprotect还没有采用Asprotect的入口代码变形技术,变了也没用?! MOV Ebp,Esp
Add ESP , -010
004B7221 . 8BEC MOV EBP,ESP
004B7223 . 83C4 F0 ADD ESP,-10
004B7226 . B8 A86F4B00 MOV EAX,Pe.004B6FA8
004B722B . E8 6CF4F4FF CALL Pe.0040669C
004B7230 . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4]
004B7235 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004B7237 . E8 C48CFCFF CALL Pe.0047FF00
004B723C . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4]
004B7241 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004B7243 . BA 80724B00 MOV EDX,Pe.004B7280
004B7248 . E8 AB88FCFF CALL Pe.0047FAF8
004B724D . 8B0D F4A14B00 MOV ECX,DWORD PTR DS:[4BA1F4] ; Pe.004BBCAC
004B7253 . A1 C4A04B00 MOV EAX,DWORD PTR DS:[4BA0C4]
004B7258 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004B725A . 8B15 48E44A00 MOV EDX,DWORD PTR DS:[4AE448] ; Pe.004AE494
004B7260 . E8 B38CFCFF CALL Pe.0047FF18
..........................................................................................
我们再次复习Dephi语言入口特征码。
这次EBP=12fff0不管用了,程序运行到入口时,EBP的值根本不是12fff0。
OD异常设置不忽略内存异常,其余全部忽略,载入程序,用插件隐藏OD。 004EF000 > 60 pushad //加壳程序入口点,F9运行。
004EF001 87E9 xchg ecx, ebp
004EF003 F9 stc
004EF004 41 inc ecx
004EF005 BF 08589F45 mov edi, 459F5808
004EF00A 50 push eax
004EF00B E8 01000000 call Pey.004EF011
004EF010 7E 58 jle short Pey.004EF06A
004EF012 58 pop eax
004EF013 C1ED E9 shr ebp, 0E9
004EF016 EB 01 jmp short Pey.004EF019
004EF018 - 76 D3 jbe short Pey.004EEFED
004EF01A ED in eax, dx
004EF01B EB 01 jmp short Pey.004EF01E
004EF01D - 75 85 jnz short Pey.004EEFA4
........................................................................
内存异常
00415719 CD 01 int 1 //典型Acprotect小于1.20版最后一次异常。
004F771B 40 inc eax
004F771C 40 inc eax
004F771D 0BC0 or eax, eax
004F771F 75 05 jnz short Pey.004F7726
004F7721 90 nop
004F7722 90 nop
004F7723 90 nop
004F7724 90 nop
004F7725 61 popad
004F7726 33C0 xor eax, eax
004F7728 64:8F00 pop dword ptr fs:[eax]
004F772B 58 pop eax
004F772C 60 pushad
004F772D E8 00000000 call Pey.004F7732
........................................................................
堆栈内容
0012FF58 0012FFE0 指针到下一个 SEH 记录
0012FF5C 004F76FD SE 句柄 //这里同原来不同,为了跟踪到Stolen Code,选择合适的地点跟踪很关键,在跟踪N个Acprotect程序后,找到了关键点,这些没什么技术可言,只是不断的实际,无数次的失败总结。右键对004F76FD转存中跟随,下内存访问断点。
0012FF60 00000042
0012FF64 59D26602
........................................................................
004156FD 8B5C24 0C mov ebx, dword ptr ss:[esp+C] //下断点Shift+F9中断1
004F7701 8383 B8000000 0>add dword ptr ds:[ebx+B8], 2
004F7708 33C0 xor eax, eax
004F770A C3 retn
004F770B 64:67:FF36 0000 push dword ptr fs:[0]
004F7711 64:67:8926 0000 mov dword ptr fs:[0], esp
004F7717 33C0 xor eax, eax
004F7719 CD 01 int 1
004F771B 40 inc eax
004F771C 40 inc eax
004F771D 0BC0 or eax, eax
004F771F 75 05 jnz short Pey.004F7726
004F7721 90 nop
004F7722 90 nop
004F7723 90 nop
004F7724 90 nop
004F7725 61 popad
........................................................................
[1] [2] [3] 下一页 |