花指令伪装壳 脱壳
【文章标题】: 花指令伪装壳【文章作者】: 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:,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:
7FF7F513 72 03 JB SHORT 7FF7F518
CTRL+M 在 .data段下访问断点,F9断下:
004F1EE1 830D 0C6B5400 F>OR DWORD PTR DS:,FFFFFFFF
004F1EE8 830D 106B5400 F>OR DWORD PTR DS:,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 00000000MOV EAX,DWORD PTR FS:
004F1EC2 50 PUSH EAX
004F1EC3 64:8925 0000000>MOV DWORD PTR FS:,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:,ESP
004F1ED3 33DB XOR EBX,EBX
004F1ED5 895D FC MOV DWORD PTR SS:,EBX
004F1ED8 6A 02 PUSH 2
004F1EDA FF15 9C655100 CALL DWORD PTR DS: ; msvcrt.__set_app_type
004F1EE0 59 POP ECX
004F1EE1 830D 0C6B5400 F>OR DWORD PTR DS:,FFFFFFFF
004F1EE8 830D 106B5400 F>OR DWORD PTR DS:,FFFFFFFF
DUMP下,OEP为 4F1EAD,ImportREC修复API显示全OK!
运行脱了的程序,报4010AA内存读取错误!
OLLYDBG 加载脱了的程序
CTRL+G 到4010AA :
004010AA FF15 29DEF87F CALL DWORD PTR DS: ; GDI32.CreateCompatibleDC
看到有API地址变了,都到壳里去了,手动修复太累了,有200处!找其它办法。
OLLYDBG 加载原主程序,4010AA处下内存写入断点,F9停在:
7FF7EBE4 66:3103 XOR WORD PTR DS:,AX
7FF7EBE7 7A 03 JPE SHORT 7FF7EBEC F4运行到这里
查看内存4010AA,下硬件写入断点byte,F9断在:
7FF7F001 F3:A4 REP MOVS BYTE PTR ES:,BYTE PTR DS:[>
7FF7F003 72 03 JB SHORT 7FF7F008 这里下硬件断点,F9断到着
CTRL+G 到4010AA :
004010AA FF15 10605180 CALL DWORD PTR DS:
现在看到的是真实地址+$80000000
查看内存4010AA,下硬件写入断点byte,F9断在:
7FF7F001 F3:A4 REP MOVS BYTE PTR ES:,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:,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:,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 这软件不怎么好,但这套系统的歌库倒还不错的/:09 还不知道怎么用
谢谢了 不错,学习了,/:good 多谢LZ分享
学习中/:018
页:
[1]