johnroot 发表于 2007-10-20 16:56:51

花指令伪装壳 脱壳

【文章标题】: 花指令伪装壳
【文章作者】: 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

glts 发表于 2007-10-20 18:05:57

这软件不怎么好,但这套系统的歌库倒还不错的/:09

zhaoyafei19 发表于 2007-10-20 20:36:54

还不知道怎么用
谢谢了

yingfeng 发表于 2007-10-21 00:14:44

不错,学习了,/:good

乌鸦 发表于 2007-10-22 19:04:22

多谢LZ分享
学习中/:018
页: [1]
查看完整版本: 花指令伪装壳 脱壳