- UID
- 13110
注册时间2006-5-14
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
【文章标题】: 花指令伪装壳
【文章作者】: 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 |
评分
-
查看全部评分
|