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

ACProtect 1.21 之 Embedded 和 RSA Protect 探讨 (二)

更新时间:2008-4-16 0:22:37
责任编辑:流火
热 点:
【脱文作者】 simonzh2000 

【使用工具】 Peid0.92, Ollydbg1.10B(反Antidbg版), ImportREC1.60, LordPE, Winhex 

【破解平台】 Win2000SP4 English 

【软件名称】 XieXie Master 1.0.10  

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

【软件大小】 912K 

【加壳方式】 ACProtect 1.21  
     使用Stolen Code, API Relocation, Code Replace, SEH等技术 
     特殊技术有 Dynamic Encrypt, Embedded Protect, RSA_Lock Code 

【作者声明】 上次那篇文章是关于 ACProtect 1.10 ,  1.21 相比 1.10 主要有两点改进 
            1. Stolen Code 长度大了 
            2. 不能直接用 ImportREC 

           同时我的上篇文章中有好多错误, 现在看看都不好意思了, 这次更正. 感谢论坛的各位大侠.   
           本笔记只用于学习交流, 初学Crack,只是感兴趣技术,没有其他目的, 如有不妥之处, 请谅解. 


008E8000 >  60              PUSHAD                                             ; // 加壳后OEP, F7 
008E8001    BA E95B5FF5     MOV EDX,F55F5BE9 
008E8006    42              INC EDX 
008E8007    85D7            TEST EDI,EDX 

008E8035    8B1F            MOV EBX,DWORD PTR DS:[EDI] 
008E8037    2BD9            SUB EBX,ECX 
008E8039    C1CB 09         ROR EBX,9 
008E803C    2B5F 04         SUB EBX,DWORD PTR DS:[EDI+4] 
008E803F    891F            MOV DWORD PTR DS:[EDI],EBX 
008E8041    81E9 55CA3D99   SUB ECX,993DCA55 
008E8047    83C7 04         ADD EDI,4 
008E804A    4D              DEC EBP 
008E804B  ^ 0F85 E4FFFFFF   JNZ XieXieMa.008E8035                              ; // 0F85 XXFFFFFF, 循环 
                                                                        // 恢复下面一段代码 
                                                                        // 后面还有很多, ACProtect 的死穴  
                                                                        // 找0F85 XXFFFFFF, 找到后下一语句 F4 过 
008E8BE4  ^\0F85 DDFFFFFF   JNZ XieXieMa.008E8BC7 
008E8BEA    E9 74080100     JMP XieXieMa.008F9463 

008F9463    61              POPAD 

这句结束后, 将有一些 Stolen Code 
记下STACK, Register 
同时在 008F9463 下一硬件执行断点, 以方便多次重启 

STACK 
0012FFC4   7C5987E7  RETURN to KERNEL32.7C5987E7 
0012FFC8   005516A8  XieXieMa.005516A8 
0012FFCC   00000056 
0012FFD0   7FFDF000 
0012FFD4   00000200 
0012FFD8   0012FFC8 
0012FFDC   00000200 
0012FFE0   FFFFFFFF  End of SEH chain 
0012FFE4   7C5C1BB4  SE handler 
0012FFE8   7C572B00  KERNEL32.7C572B00 
0012FFEC   00000000 
0012FFF0   00000000 
0012FFF4   00000000 
0012FFF8   008E8000  XieXieMa.<ModuleEntryPoint> 
0012FFFC   00000000 

EAX 00000000 
ECX 00010101 
EDX FFFFFFFF 
EBX 7FFDF000 
ESP 0012FFC4 
EBP 0012FFF0 
ESI 00000056 
EDI 005516A8  


008F9464    57              PUSH EDI 
008F9465    8F05 488C8E00   POP DWORD PTR DS:[8E8C48]                          ; XieXieMa.005516A8 
008F946B    FF35 488C8E00   PUSH DWORD PTR DS:[8E8C48]                         ; XieXieMa.005516A8 
008F9471    50              PUSH EAX 
008F9472    C70424 6C8C8E00 MOV DWORD PTR SS:[ESP],XieXieMa.008E8C6C 
008F9479    8F05 2C8C8E00   POP DWORD PTR DS:[8E8C2C]                          ; XieXieMa.008E8C6C 
008F947F    8B3D 2C8C8E00   MOV EDI,DWORD PTR DS:[8E8C2C]                      ; XieXieMa.008E8C6C 
008F9485    892F            MOV DWORD PTR DS:[EDI],EBP                         ; // EBP Save in 8E8C6C 
008F9487    90              NOP 
008F9488    90              NOP 
008F9489    90              NOP 
008F948A    90              NOP 
008F948B    90              NOP 
008F948C    60              PUSHAD 
008F948D    E8 03BDFFFF     CALL XieXieMa.008F51DC                             ; // EBP = 4E7000 
008F9492    E8 00000000     CALL XieXieMa.008F9497 
008F9497    5B              POP EBX 
008F9498    2B9D 68214000   SUB EBX,DWORD PTR SS:[EBP+402168] 
008F949E    81EB 97140100   SUB EBX,11497                                      ; // EBX=400000 
008F94A4    899D 26D04000   MOV DWORD PTR SS:[EBP+40D026],EBX                  ; // save in 8F4026 
008F94AA    61              POPAD 
008F94AB    8F05 448C8E00   POP DWORD PTR DS:[8E8C44]                          ; XieXieMa.005516A8 
008F94B1    FF35 448C8E00   PUSH DWORD PTR DS:[8E8C44]                         ; XieXieMa.005516A8 
008F94B7    5F              POP EDI 
008F94B8    FF35 6C8C8E00   PUSH DWORD PTR DS:[8E8C6C]                         ; // Push EBP, Stolen Code 1 
008F94BE    8F05 848C8E00   POP DWORD PTR DS:[8E8C84] 
008F94C4    FF35 848C8E00   PUSH DWORD PTR DS:[8E8C84] 
008F94CA    8925 808C8E00   MOV DWORD PTR DS:[8E8C80],ESP                      ; // ESP save in 8E8C80 
008F94D0    90              NOP 
008F94D1    90              NOP 
008F94D2    90              NOP 
008F94D3    60              PUSHAD 
008F94D4    E8 03BDFFFF     CALL XieXieMa.008F51DC                             ; // EBP = 4E7000 
008F94D9    E8 9CBAFFFF     CALL XieXieMa.008F4F7A                             ; // EAX 取随机数 
008F94DE    8985 81DF4000   MOV DWORD PTR SS:[EBP+40DF81],EAX 
008F94E4    61              POPAD 
008F94E5    FF35 808C8E00   PUSH DWORD PTR DS:[8E8C80] 
008F94EB    8B2C24          MOV EBP,DWORD PTR SS:[ESP]                         ; // MOV EBP, ESP , Stolen Code 2 
008F94EE    8F05 688C8E00   POP DWORD PTR DS:[8E8C68] 
008F94F4    50              PUSH EAX                                           ; // 先压一个数入栈 
008F94F5    893C24          MOV DWORD PTR SS:[ESP],EDI 
008F94F8    890C24          MOV DWORD PTR SS:[ESP],ECX 
008F94FB    8F05 648C8E00   POP DWORD PTR DS:[8E8C64] 
008F9501    FF35 648C8E00   PUSH DWORD PTR DS:[8E8C64] 
008F9507    893C24          MOV DWORD PTR SS:[ESP],EDI 
008F950A    90              NOP 
008F950B    90              NOP 
008F950C    90              NOP 
008F950D    60              PUSHAD 
008F950E    E8 C9BCFFFF     CALL XieXieMa.008F51DC 
008F9513    C685 4CCF4000 0>MOV BYTE PTR SS:[EBP+40CF4C],0 
008F951A    61              POPAD 
008F951B    C70424 FFFFFFFF MOV DWORD PTR SS:[ESP],-1                          ; // PUSH -1, Stolen Code 3 
008F9522    52              PUSH EDX 
008F9523    BA 408C8E00     MOV EDX,XieXieMa.008E8C40 
008F9528    893A            MOV DWORD PTR DS:[EDX],EDI                         ; // EDI save in 8E8C40 
008F952A    5A              POP EDX 
008F952B    FF35 408C8E00   PUSH DWORD PTR DS:[8E8C40]                         ; // 先压一个数入栈 
008F9531    890C24          MOV DWORD PTR SS:[ESP],ECX 
008F9534    8F05 748C8E00   POP DWORD PTR DS:[8E8C74] 
008F953A    FF35 748C8E00   PUSH DWORD PTR DS:[8E8C74] 
008F9540    90              NOP 
008F9541    90              NOP 
008F9542    90              NOP 
008F9543    60              PUSHAD 
008F9544    E8 CDDEFFFF     CALL XieXieMa.008F7416                             ; // 壳所用的函数 
008F9549    61              POPAD 
008F954A    C70424 B0DB4B00 MOV DWORD PTR SS:[ESP],XieXieMa.004BDBB0           ; // PUSH 4BDBB0, Stolen Code 4 
008F9551    51              PUSH ECX 
008F9552    893C24          MOV DWORD PTR SS:[ESP],EDI 
008F9555    68 608C8E00     PUSH XieXieMa.008E8C60 
008F955A    5F              POP EDI 
008F955B    8907            MOV DWORD PTR DS:[EDI],EAX 
008F955D    8B3C24          MOV EDI,DWORD PTR SS:[ESP] 
008F9560    8F05 3C8C8E00   POP DWORD PTR DS:[8E8C3C]                          ; XieXieMa.005516A8 
008F9566    FF35 608C8E00   PUSH DWORD PTR DS:[8E8C60] 
008F956C    891C24          MOV DWORD PTR SS:[ESP],EBX 
008F956F    90              NOP 
008F9570    90              NOP 
008F9571    90              NOP 
008F9572    60              PUSHAD 
008F9573    E8 3BDCFFFF     CALL XieXieMa.008F71B3                             ; // 解压 401000 代码有关, F7 


// 到 8F9573,  F7 进入 8F71B3, SMC 后 
008F735D    47              INC EDI 
008F735E    E8 79DEFFFF     CALL XieXieMa.008F51DC                            ; // EBP = 4E7000 
008F7363    C685 B3014100 C>MOV BYTE PTR SS:[EBP+4101B3],0C3 
008F736A    8DB5 2ED04000   LEA ESI,DWORD PTR SS:[EBP+40D02E] 
008F7370    56              PUSH ESI 
008F7371    AD              LODS DWORD PTR DS:[ESI]                           ; // 8F402E = 1000 
008F7372    0BC0            OR EAX,EAX 
008F7374    74 49           JE SHORT XieXieMa.008F73BF 
008F7376    90              NOP 
008F7377    90              NOP 
008F7378    90              NOP 
008F7379    90              NOP 
008F737A    50              PUSH EAX 
008F737B    AD              LODS DWORD PTR DS:[ESI]                           ; // 8F4032 = 4ED26 
008F737C    91              XCHG EAX,ECX 
008F737D    51              PUSH ECX 
008F737E    51              PUSH ECX 
008F737F    6A 40           PUSH 40 
008F7381    FF95 DFD44000   CALL DWORD PTR SS:[EBP+40D4DF]                    ; // 8F44DF = GlobalAlloc(40, 4ED26) 
008F7387    8985 2AD04000   MOV DWORD PTR SS:[EBP+40D02A],EAX                 ; // 1346F8 save in 8F402A 
008F738D    59              POP ECX 
008F738E    58              POP EAX 
008F738F    0385 26D04000   ADD EAX,DWORD PTR SS:[EBP+40D026]                 ; // 1000+400000, text section 
008F7395    8BF0            MOV ESI,EAX                                       ; // ESI = 401000 
008F7397    50              PUSH EAX 
008F7398    8BBD 2AD04000   MOV EDI,DWORD PTR SS:[EBP+40D02A]                 ; // EDI = 1346F8 
008F739E    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]      ; // ECX = 4ED26 
008F73A0    58              POP EAX 
008F73A1    50              PUSH EAX 
008F73A2    FFB5 2AD04000   PUSH DWORD PTR SS:[EBP+40D02A] 
008F73A8    E8 FEE80000     CALL XieXieMa.00905CAB                            ; // 解压缩到 401000 
008F73AD    FFB5 2AD04000   PUSH DWORD PTR SS:[EBP+40D02A] 
008F73B3    FF95 E3D44000   CALL DWORD PTR SS:[EBP+40D4E3]                    ; // GlobalFree 
008F73B9    5E              POP ESI 
008F73BA    83C6 08         ADD ESI,8 
008F73BD  ^ EB B1           JMP SHORT XieXieMa.008F7370                       ; // 还要解压一次, 807100, rsrc section 
008F73BF    5E              POP ESI 
008F73C0    68 30750000     PUSH 7530 
008F73C5    6A 40           PUSH 40 
008F73C7    FF95 DFD44000   CALL DWORD PTR SS:[EBP+40D4DF]                    ; // GlobalAlloc(40, 7530) 
008F73CD    8985 2AD04000   MOV DWORD PTR SS:[EBP+40D02A],EAX 
008F73D3    60              PUSHAD 
008F73D4    E8 00000000     CALL XieXieMa.008F73D9 
008F73D9    5E              POP ESI                                           ; XieXieMa.008F73D9 
008F73DA    83EE 06         SUB ESI,6 
008F73DD    B9 75000000     MOV ECX,75 
008F73E2    29CE            SUB ESI,ECX 
008F73E4    BA 92917284     MOV EDX,84729192 
008F73E9    C1E9 02         SHR ECX,2 
008F73EC    83E9 02         SUB ECX,2 
008F73EF    83F9 00         CMP ECX,0 
008F73F2    7C 1A           JL SHORT XieXieMa.008F740E 
008F73F4    8B048E          MOV EAX,DWORD PTR DS:[ESI+ECX*4] 
008F73F7    8B5C8E 04       MOV EBX,DWORD PTR DS:[ESI+ECX*4+4] 
008F73FB    2BC3            SUB EAX,EBX 
008F73FD    C1C0 1F         ROL EAX,1F 
008F7400    2BC2            SUB EAX,EDX 
008F7402    81F2 EB11730F   XOR EDX,0F7311EB 
008F7408    89048E          MOV DWORD PTR DS:[ESI+ECX*4],EAX 
008F740B    49              DEC ECX 
008F740C  ^ EB E1           JMP SHORT XieXieMa.008F73EF 
008F740E    61              POPAD 
008F740F    61              POPAD 
008F7410    E8 011F0000     CALL XieXieMa.008F9316                            
008F7415    C3              RETN                                              ; // return 8F9578 

1 2 3 下一页

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