安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

AcProtect 之 EMbedded 和 RSA protect 探讨

更新时间:2008-4-18 0:09:13
责任编辑:池天
热 点:
【脱文作者】 simonzh2000 

【使用工具】 Peid0.91, Ollydbg1.09d(反Antidbg版), ImportREC1.60, LordPE, UltraEdit 

【破解平台】 Win2000 

【软件名称】 XieXie Master 1.0.10   

【软件简介】 一个法国人的电脑中国象棋,棋力超强,接近大师级水平 

【软件大小】 877K 

【加壳方式】 ACProtect, 使用 Embedded Protect 和 RSA Protect 技术 

【破解声明】 在春节前拿到这个软件时,我还是一个脱壳菜鸟, 连 UPX 手动脱壳也不会, 这种加密壳就别提了, 只好上论坛向各位大侠请教. 
           感谢 heXer , jingulong, fly 等多位大侠的帮助, 帮我脱了壳, 尤其是 heXer 大侠, 还帮我成功破解, 但遗憾的是都没写脱壳笔记. 
           俺只好自己动手尝试, 春节的时候我看了 DFCG 的 13篇手动脱壳入门教程, 11篇手动脱壳进价教程, 总算有点进步了, 感谢 DFCG 的各位大侠. 
           下面是我的一点心得,愿与大家分享, 同时有许多问题向大家请教.  

           本笔记只用于学习交流. 

未脱壳原程序 
http://tongtian.net/pediybbs/viewtopic.php?t=3336 

用peid查壳,UPX 0.89.6 - 1.02 / 1.05 - 1.24 DLL -> Markus & Laszlo.  
但 EP Section 可见到 Perplex, ACProtect的特征, 有Stolen Code. 
OD 异常设置不忽略异常,载入程序,用插件隐藏OD。  


77FA144C    C3              RETN                                     ; // 系统断点, F9运行 
77FA144D >  CC              INT3 
77FA144E    C3              RETN 

// 出来一个 "No License" 警告, 由于 ACP 有RSA保护, 我们没有Key.dat, 点OK后, INT3 异常   

008EBC4B    90              NOP                                      ; // 第1次 INT3 异常, Shift+F9 
008EBC4C    64:67:8F06 0000 POP DWORD PTR FS:[0] 


008EB9F9    CD 01           INT 1                                    ; // 第2次 内寸访问异常, SEH=008EB9DD 
008EB9FB    40              INC EAX                                  ; // 异常处理完毕继续. 这里下断, SHIFT+F9, 取消断点 
008EB9FC    40              INC EAX 


//再来个内寸镜像断点 
 Memory map, item 12 
 Address=00401000    Size=000B2000 (729088.)   Owner=XieXieMa  00400000   Section=.text    
 Contains=code       Type=Imag 01001002        Access=R        Initial access=RWE 

//F9, 断在下面, OEP 就在附近 
00495FAD    68 B07B4B00     PUSH XieXieMa.004B7BB0 
00495FB2    68 50C04900     PUSH XieXieMa.0049C050 
00495FB7    64:A1 00000000  MOV EAX,DWORD PTR FS:[0] 
00495FBD    50              PUSH EAX 
00495FBE    64:8925 0000000>MOV DWORD PTR FS:[0],ESP 

// 495FAD 前面5个字节是 6D 1D 4C A0 E6 
// 根据经验猜测 Stolen Byte 如下 
// 如果各位大侠有更好的办法, 请指点 

00495F9D    A1 B4687F00     MOV EAX,DWORD PTR DS:[7F68B4] 
00495FA2    A3 B0687F00     MOV DWORD PTR DS:[7F68B0],EAX 
00495FA7    C3              RETN 
00495FA8    55              PUSH EBP                                 ; // OEP=495FA8 
00495FA9    8BEC            MOV EBP,ESP 
00495FAB    6A FF           PUSH -1 
00495FAD    68 B07B4B00     PUSH XieXieMa.004B7BB0 
00495FB2    68 50C04900     PUSH XieXieMa.0049C050 

// 用OD插件Dump 得到 cx1.EXE, 不要重建 IAT, OEP = 95FA8 
// 重新运行XXM, 用 ImportREC 跟踪方式3 修复IAT, 得到CX2.EXE 
// 运行出错, 用OD加载 CX2.EXE, 用 Trace into, 很容易跟踪到出错的地方 
// Trace into 时不要跟进系统函数, 设置一下 

00499EBA    E8 DA020000     CALL cx2.0049A199 
00499EBF    59              POP ECX 
00499EC0    E8 18424400     CALL cx2.008DE0DD                        ; // 这里是第一个出错的地方 
00499EC5    8B43 10         MOV EAX,DWORD PTR DS:[EBX+10] 
00499EC8    8338 FF         CMP DWORD PTR DS:[EAX],-1 
00499ECB    75 07           JNZ SHORT cx2.00499ED4 
00499ECD    33C0            XOR EAX,EAX 
00499ECF    E9 0F020000     JMP cx2.0049A0E3 
00499ED4    891D 6C667F00   MOV DWORD PTR DS:[7F666C],EBX 
00499EDA    E8 FE414400     CALL cx2.008DE0DD                        ; // 又一个 CALL cx2.008DE0DD 
00499EDF    83FA FF         CMP EDX,-1 
00499EE2    8955 FC         MOV DWORD PTR SS:[EBP-4],EDX 
00499EE5    74 14           JE SHORT cx2.00499EFB 
00499EE7    8B8C90 C4000000 MOV ECX,DWORD PTR DS:[EAX+EDX*4+C4] 
00499EEE    8B7C90 44       MOV EDI,DWORD PTR DS:[EAX+EDX*4+44] 
00499EF2    E8 E6414400     CALL cx2.008DE0DD                        ; // 一共有 1000 多个, 都调用壳里的代码 


//重新来过, bp 499EC0, F9断下, F7 进入壳代码, 记住返回地址 499EC5 

008DE0DD    60              PUSHAD 
008DE0DE    FC              CLD 
008DE0DF    F9              STC 
008DE0E0    50              PUSH EAX 

// 接下来有一大段花指令, SMC, 循环 
// 按住 F7 不放, 循环用F4, 到这里 

008DE28D    8B4424 20       MOV EAX,DWORD PTR SS:[ESP+20]            ; // 取出返回地址 , 第一次是499EC5 
008DE291    33C9            XOR ECX,ECX                              ; // ECX=0 
008DE293    8B9C8D B3234000 MOV EBX,DWORD PTR SS:[EBP+ECX*4+4023B3]  ; // 这里放返回地址 RVA 
008DE29A    039D 7BCF4000   ADD EBX,DWORD PTR SS:[EBP+40CF7B]        ; // RVA+400000=VA 
008DE2A0    3BC3            CMP EAX,EBX                              ; // 匹配吗? 
008DE2A2    74 07           JE SHORT cx2.008DE2AB 

1 2 3 4 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画