| 
注册时间2006-5-14
阅读权限20
最后登录1970-1-1UID13110 以武会友  
 
 该用户从未签到 | 
 
| 【文章标题】: 花指令伪装壳 【文章作者】: johnroot
 【软件名称】: 三联ktv6.61单机版 主程序
 【下载地址】: 自己搜索下载
 【加壳方式】: 花指令伪装壳
 【保护方式】: 花指令伪装壳
 【编写语言】: VC
 【使用工具】: OLLYDBG,ImportREC,WINHEX
 【操作平台】: WIN32
 【软件介绍】: 特殊的API加密
 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
 --------------------------------------------------------------------------------
 【详细过程】
 (伪装为PENinja -> +DZA Kracker/TNT! )脱壳
 OLLYDBG加载停在壳人口:
 00650000 >  90              NOP
 00650001    90              NOP
 00650002    90              NOP
 00650003    90              NOP
 00650004    90              NOP
 00650005    90              NOP
 00650006    90              NOP
 00650007    90              NOP
 
 CTRL+M 在 .data段下访问断点,F9断下:
 
 7FF7EBE4    66:3103         XOR WORD PTR DS:[EBX],AX
 7FF7EBE7    7A 03           JPE SHORT 7FF7EBEC
 7FF7EBE9    7B 01           JPO SHORT 7FF7EBEC
 
 CTRL+M 在 .text段下访问断点,F9断下:
 7FF7F510    F2:66:AF        REPNE SCAS WORD PTR ES:[EDI]
 7FF7F513    72 03           JB SHORT 7FF7F518
 
 CTRL+M 在 .data段下访问断点,F9断下:
 004F1EE1    830D 0C6B5400 F>OR DWORD PTR DS:[546B0C],FFFFFFFF
 004F1EE8    830D 106B5400 F>OR DWORD PTR DS:[546B10],FFFFFFFF
 
 往上找:
 
 004F1EAD    55              PUSH EBP                   这里就是OEP
 004F1EAE    8BEC            MOV EBP,ESP
 004F1EB0    6A FF           PUSH -1
 004F1EB2    68 60315200     PUSH 三联ktv6.00523160
 004F1EB7    68 3A204F00     PUSH 三联ktv6.004F203A                     ; JMP to msvcrt._except_handler3
 004F1EBC    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
 004F1EC2    50              PUSH EAX
 004F1EC3    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
 004F1ECA    83EC 68         SUB ESP,68
 004F1ECD    53              PUSH EBX
 004F1ECE    56              PUSH ESI
 004F1ECF    57              PUSH EDI
 004F1ED0    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
 004F1ED3    33DB            XOR EBX,EBX
 004F1ED5    895D FC         MOV DWORD PTR SS:[EBP-4],EBX
 004F1ED8    6A 02           PUSH 2
 004F1EDA    FF15 9C655100   CALL DWORD PTR DS:[51659C]               ; msvcrt.__set_app_type
 004F1EE0    59              POP ECX
 004F1EE1    830D 0C6B5400 F>OR DWORD PTR DS:[546B0C],FFFFFFFF
 004F1EE8    830D 106B5400 F>OR DWORD PTR DS:[546B10],FFFFFFFF
 
 DUMP下,OEP为 4F1EAD,ImportREC修复API显示全OK!
 
 运行脱了的程序,报4010AA内存读取错误!
 
 OLLYDBG 加载脱了的程序
 
 CTRL+G 到4010AA :
 004010AA    FF15 29DEF87F   CALL DWORD PTR DS:[7FF8DE29]             ; GDI32.CreateCompatibleDC
 
 看到有API地址变了,都到壳里去了,手动修复太累了,有200处!找其它办法。
 
 OLLYDBG 加载原主程序,4010AA处下内存写入断点,F9停在:
 
 7FF7EBE4    66:3103         XOR WORD PTR DS:[EBX],AX
 7FF7EBE7    7A 03           JPE SHORT 7FF7EBEC         F4运行到这里
 
 查看内存4010AA,下硬件写入断点byte,F9断在:
 7FF7F001    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
 7FF7F003    72 03           JB SHORT 7FF7F008          这里下硬件断点,F9断到着
 
 CTRL+G 到4010AA :
 004010AA    FF15 10605180   CALL DWORD PTR DS:[80516010]
 现在看到的是真实地址+$80000000
 
 查看内存4010AA,下硬件写入断点byte,F9断在:
 7FF7F001    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
 
 查看内存4010AE,下硬件写入断点byte,F9断在:
 7FF7F5DE   /74 03           JE SHORT 7FF7F5E3
 7FF7F5E0   |75 01           JNZ SHORT 7FF7F5E3
 7FF7F5E2  ^|75 83           JNZ SHORT 7FF7F567
 往上找:
 7FF7F5DC    8937            MOV DWORD PTR DS:[EDI],ESI  就是这里更换了地址:
 7FF7F5DE    74 03           JE SHORT 7FF7F5E3
 7FF7F5E0    75 01           JNZ SHORT 7FF7F5E3
 7FF7F5E2  ^ 75 83           JNZ SHORT 7FF7F567
 
 OLLYDBG重新加载主程序:
 
 7FF7F5DC    8937            MOV DWORD PTR DS:[EDI],ESI 这里nop掉
 7FF7F5DE    74 03           JE SHORT 7FF7F5E3
 7FF7F5E0    75 01           JNZ SHORT 7FF7F5E3
 7FF7F5E2  ^ 75 83           JNZ SHORT 7FF7F567
 
 用最开始的方法找OEP,DUMP,ImportREC修复API.
 
 用WINHEX打开,替换16进制(选择使用通配符:3F):
 FF153F3F5180 为 FF153F3F5100 (全部替换)
 
 运行修复好的程序,功能正常。
 
 --------------------------------------------------------------------------------
 
 2007年10月20日 16:57:59
 | 
 评分
查看全部评分
 |