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

AcProtect 之 EMbedded 和 RSA protect 探讨

更新时间:2008-4-18 0:09:13
责任编辑:池天
热 点:


// 解决办法,用 UltraEdit 打开CX3.EXE, 找到 08 47 13 00, (只有一处) 
// 改成 93 12 8E 00, 叫他就地解密, 嘿嘿. 

// 用 OD 载入CX3.EXE还是出错, Shit, Trace into again, 这次时间要1分钟吧 
// 错在 414272 CALL MessageBoxA 处 
// 难道是 IAT 修复的有问题?  检查了半天, 也没有搞定. 
// 再仔细看看 Trace into 的记录, 00414044 ---> 00414272 

// 用OD 载入未脱壳原程序, 先到OEP 495FAD  
// bp 414044, F9, 断下, F7走 
// 又是一大段花指令, SMC , 循环, 


00414044 

004141FC    83C4 04         ADD ESP,4 
004141FF    66:81F1 D343    XOR CX,43D3 
00414204    F8              CLC 
00414205    4E              DEC ESI 
00414206  ^ 0F85 88FFFFFF   JNZ XieXieMa.00414194                    ; // 循环 
0041420C    E8 01000000     CALL XieXieMa.00414212                   ; // F4 到这里 

00414212    83C4 04         ADD ESP,4 
00414215    E9 04000000     JMP XieXieMa.0041421E 
0041421A    66:BB 1EBA      MOV BX,0BA1E 
0041421E    61              POPAD 
0041421F    8D4D C0         LEA ECX,DWORD PTR SS:[EBP-40] 
00414222    6A 03           PUSH 3 
00414224    E8 8F3FFFFF     CALL XieXieMa.004081B8                   ; // F8 
00414229    C745 FC 0000000>MOV DWORD PTR SS:[EBP-4],0 
00414230    8D4D C0         LEA ECX,DWORD PTR SS:[EBP-40] 
00414233    6A 01           PUSH 1 
00414235    E8 F640FFFF     CALL XieXieMa.00408330                   ; // F8 
0041423A    8D4D C0         LEA ECX,DWORD PTR SS:[EBP-40] 
0041423D    68 A8717F00     PUSH XieXieMa.007F71A8                   ; ASCII "XieXieMaster 1.0.10" 
00414242    68 A0717F00     PUSH XieXieMa.007F71A0                   ; ASCII "XieXie" 
00414247    E8 2441FFFF     CALL XieXieMa.00408370                   ; // F8 
0041424C    6A 10           PUSH 10 
0041424E    FF15 B8544B00   CALL DWORD PTR DS:[4B54B8]               ; // F8, 脱壳后是 GetAsyncKeyState 
00414254    0FBFC0          MOVSX EAX,AX 
00414257    85C0            TEST EAX,EAX 
00414259    0F8C D5010000   JL XieXieMa.00414434 
0041425F    C705 041B4C00 0>MOV DWORD PTR DS:[4C1B04],0 
00414269    60              PUSHAD 
0041426A    6A 02           PUSH 2 
0041426C    6A 00           PUSH 0 
0041426E    6A 00           PUSH 0 
00414270    6A FF           PUSH -1 
00414272    FF15 C4544B00   CALL DWORD PTR DS:[4B54C4]               ; XieXieMa.008DDB6D,  这里脱壳后成了 MessageBoxA,  
                                                                     // 但未脱壳程序不是, F7 进去看看, 发现来到了壳代码,奇怪??? 
                                                                     

008E951E    60              PUSHAD 
008E951F    F8              CLC 
008E9520    7A 03           JPE SHORT XieXieMa.008E9525 
008E9522    7B 01           JPO SHORT XieXieMa.008E9525 
008E9524    7A D3           JPE SHORT XieXieMa.008E94F9 

// 请看 Acprotect.h (附件中), 各位看官就会明白的... 
// 原来这个程序使用了 ACProtect 的 EMbedded protector 技术 
// 该技术具体见 Acprotect 的帮助 
// 我的解决办法, 再次修改 008DD000 代码, 如下, 也去调用壳代码 

008DD000 >  B8 1E958E00     MOV EAX,008E951E 
008DD005    8705 C4544B00   XCHG DWORD PTR DS:[<&user32.MessageBoxA>],EAX 
008DD00B  - E9 988FBBFF     JMP 00495FA8 

// CX3.EXE 终于可以运行了, 不过别高兴得太早. 
// 只要你一走棋, 或点注册, game over... 
// 用OD 载入CX3.EXE , F9运行, 点注册"OK", 出错 

008E9E5C    8BCE            MOV ECX,ESI 
008E9E5E    8BB48D EC1B4000 MOV ESI,DWORD PTR SS:[EBP+ECX*4+401BEC] 
008E9E65    03B5 7BCF4000   ADD ESI,DWORD PTR SS:[EBP+40CF7B] 
008E9E6B    8B948D 7C1D4000 MOV EDX,DWORD PTR SS:[EBP+ECX*4+401D7C] 
008E9E72    8BBC8D 0C1F4000 MOV EDI,DWORD PTR SS:[EBP+ECX*4+401F0C] 
008E9E79    87CA            XCHG EDX,ECX 
008E9E7B    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]     ; // 内寸访问错误 
008E9E7D    60              PUSHAD 


// 这时 ECX=3445, ESI=004090AF, EDI=00142348 
// 出错的地方从 004090AF 拷贝 3445 字节到 00142348 
// 到内存镜像一看 

Memory map, item 4 
 Address=00130000       Size=0000B000 (45056.)        Owner=         00130000 (itself) 
 Section=               Type=Priv 00021004            Access=RW     Initial access=RW 

// 程序只对 130000 到 13B000-1 有读写权限, 不能访问 00142348 
// 跟踪未脱壳原程序,  Size=0001C000 
// 那我们就在有读写权限的地方加点空间 

// 用LordPE 打开 CX3.EXE,  修改 .mackt 段的 VSize 为 10000, 原来 2000,  
// .mackt 的 VA = 00903000 
// 新加空间对应的 VA = 00905000 

// 用 UltraEdit 打开CX3.EXE, 找到 48 23 14 00, (只有一处) 
// 注意前面还有 0013BC40, 0013EF78, 不清楚用处, 一并修改 
// 改成 00 50 90 00 ,00 90 90 00, 00 D0 90 00  

// 呵呵, 现在再点注册, 弹出一个"Incorret Register Code"的对话框 
// 跟未脱壳原程序一样了. 

// 这里我还发现了一个Bug (或许就是这样设计的) 
// 你一走棋, 叫你注册, 你点OK, "Incorrect Register code", 你再走棋 
// 几次反复后, 程序出错, 一开始以为脱壳不对, 后来试了原程序也是这样. 

// 下面开始暴破, 对 MessageBoxA  下断 

// 第一个关键比较 
// 注册对话框, 点注册, 断在 4A5232, 看看STACK 

0012F9DC   001A0146  |hOwner = 001A0146 (’XieXieMaster 1.0.10> Unregist...’,class=’AfxFrameOrView42s’) 
0012F9E0   007FE5AC  |Text = "Incorrect registration code !" 
0012F9E4   007FCE3C  |Title = "XieXie Error" 
0012F9E8   00000030  \Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL 
0012F9EC   0012FB60 
0012F9F0   00418FED  RETURN to cx3.00418FED from cx3.004A520A 
0012F9F4   007FE5AC  ASCII "Incorrect registration code !" 
0012F9F8   007FCE3C  ASCII "XieXie Error" 
0012F9FC   00000030 

上一页 1 2 3 4 下一页

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