黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 加密解密 - 浏览 - AcProtect 之 EMbedded 和 RSA protect 探讨

AcProtect 之 EMbedded 和 RSA protect 探讨

黑客 发布日期:2008-4-19 1:12:50 共有 658 人次浏览
来源:安全中国

【脱文作者】 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  

所属分类: 加密解密     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极