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

AcProtect 之 EMbedded 和 RSA protect 探讨

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

008DE2A4    90              NOP 
008DE2A5    90              NOP 
008DE2A6    90              NOP 
008DE2A7    90              NOP 
008DE2A8    41              INC ECX                                  ; // 不匹配, 下一个 
008DE2A9  ^ EB E8           JMP SHORT cx2.008DE293 
008DE2AB    C7848D B3234000>MOV DWORD PTR SS:[EBP+ECX*4+4023B3],0    ; // 找到了, 清零,  第一次 ECX=15A 
008DE2B6    8DB5 93524000   LEA ESI,DWORD PTR SS:[EBP+405293]        ; // 8E1293 放加密后的代码 
008DE2BC    B8 0A000000     MOV EAX,0A                               ; // 加密代码 A 个字节一段 
008DE2C1    F7E1            MUL ECX 
008DE2C3    03F0            ADD ESI,EAX                              ; // 8E1293 + A*15A = 8E2017 
008DE2C5    56              PUSH ESI                                 ; // 第一次调用对应的加密代码 
008DE2C6    51              PUSH ECX 
008DE2C7    8A85 CD204000   MOV AL,BYTE PTR SS:[EBP+4020CD]          ; // 解密字节保存处 
008DE2CD    0AC0            OR AL,AL           
008DE2CF    75 28           JNZ SHORT cx2.008DE2F9         ; // 已经计算过了,就跳过 

008DE2D5    8B85 7BCF4000   MOV EAX,DWORD PTR SS:[EBP+40CF7B]        ; // 文件头 VA 
008DE2DB    8B70 3C         MOV ESI,DWORD PTR DS:[EAX+3C]            ; // PE头 RVA 
008DE2DE    03B5 7BCF4000   ADD ESI,DWORD PTR SS:[EBP+40CF7B]        ; // PE头 VA 
008DE2E4    83C6 28         ADD ESI,28                               ; // OEP VA 
008DE2E7    AD              LODS DWORD PTR DS:[ESI]                  ; // OEP 
008DE2E8    8AD8            MOV BL,AL 
008DE2EA    02DC            ADD BL,AH 
008DE2EC    C1E8 10         SHR EAX,10 
008DE2EF    02D8            ADD BL,AL 
008DE2F1    02DC            ADD BL,AH                                ; // OEP 四字节和 = 10 
008DE2F3    889D CD204000   MOV BYTE PTR SS:[EBP+4020CD],BL          ; // 解密用字节 



008DE30E    61              POPAD 
008DE30F    8BBD 7FCF4000   MOV EDI,DWORD PTR SS:[EBP+40CF7F]        ; // 代码解密后放到 134708 开始的内存块 
008DE315    B8 0A000000     MOV EAX,0A 
008DE31A    F7E1            MUL ECX 
008DE31C    03F8            ADD EDI,EAX                              ; // 134708 + A*15A = 13548C 
008DE31E    B9 0A000000     MOV ECX,0A 
008DE323    8A9D CD204000   MOV BL,BYTE PTR SS:[EBP+4020CD] 
008DE329    EB 11           JMP SHORT cx2.008DE33C 

008DE32E    61              POPAD 
008DE32F    8BFE            MOV EDI,ESI 
008DE331    B9 0A000000     MOV ECX,0A 
008DE336    8A9D CD204000   MOV BL,BYTE PTR SS:[EBP+4020CD]          ; // 取出解密用字节 10 
008DE33C    AC              LODS BYTE PTR DS:[ESI]                   ; // 密文 
008DE33D    32C3            XOR AL,BL                                ; // 密文 Xor 10 
008DE33F    AA              STOS BYTE PTR ES:[EDI]                   ; // 明文 
008DE340  ^ E2 FA           LOOPD SHORT cx2.008DE33C                 ; // 解密 A 个字节 
008DE342    83EF 0A         SUB EDI,0A 
008DE345    57              PUSH EDI                                 ; // 新的函数入口 13548C 
008DE346    8B7424 24       MOV ESI,DWORD PTR SS:[ESP+24]            ; // 返回地址 499EC5 
008DE34A    83EE 04         SUB ESI,4 
008DE34D    AD              LODS DWORD PTR DS:[ESI] 
008DE34E    81EF DD204000   SUB EDI,cx2.004020DD 
008DE354    2BFD            SUB EDI,EBP 
008DE356    03C7            ADD EAX,EDI                              ; // 地址转换成偏移量 
008DE358    8946 FC         MOV DWORD PTR DS:[ESI-4],EAX             ; // 变成 CALL 13548C. 

// 调整Stack 
// SMC 


008DE3B0    61              POPAD 
008DE3B1    61              POPAD 
008DE3B2    C3              RETN                                     ; // 返回到 13548C 

// 从上述过程可以看到, 如果OEP变了, 那么加密代码解密出来就不对 
// 所以我们恢复 OEP, 用LordPE 查脱壳前OEP= 4DD000, VA=8DD000 
// 用 OD 修改 CX2.EXE 8DD000 处为 JMP 495FA8 
// 用 LordPE 改 OEP= 4DD000, 得到CX3.EXE 

// 用 OD 载入CX3.EXE还是出错, Trace into again, 错在 499EDA  

//bp 499EDA, F9, 第一次中断 
00499EDA  CALL CX3.008DE0DD  

// F8后变成 
00499EDA  CALL 00135496 

00135496    8B43 10         MOV EAX,DWORD PTR DS:[EBX+10] 
00135499    33E6            XOR ESP,ESI 
0013549B    33E6            XOR ESP,ESI 
0013549D    8B10            MOV EDX,DWORD PTR DS:[EAX] 
0013549F    C3              RETN 

// 说明第一次解密正常 
// F9, 第二次中断在00499EDA, F8, 出错 
// 到 00135496 一看, 刚才解密的代码不见了  
// 我跟过没脱壳原程序, 第二次时代码还在 
// 可能是检测不到壳, 把那块内存清零了 

上一页 1 2 3 4 下一页

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