Nisy 发表于 2016-5-20 04:45:03

Baymax Patch Tools 之 DFX 破解方案

先贴程序启动验证的关键位置:


013095A1|> \83BB 40CB0100 00         CMP   DWORD PTR DS:, 0
013095A8|.74 2B                  JE      SHORT DFX.013095D5               ;不能跳
013095AA|.83BB 20CB0100 0A         CMP   DWORD PTR DS:, 0A
013095B1|.75 22                  JNZ   SHORT DFX.013095D5               ;不能跳
013095B3|.C783 E4CA0100 02000000   MOV   DWORD PTR DS:, 2      ;全局变量 等于2代表注册
013095BD|>33C0                     XOR   EAX, EAX                         ;kernel32.BaseThreadInitThunk
013095BF|.5B                     POP   EBX                              ;kernel32.76F7338A
013095C0|.8B8C24 10100000          MOV   ECX, DWORD PTR SS:
013095C7|.33CC                     XOR   ECX, ESP
013095C9|.E8 A2210500            CALL    DFX.0135B770
013095CE|.81C4 14100000            ADD   ESP, 1014
013095D4|.C3                     RETN
013095D5      8B93 F8FA0200            MOV   EDX, DWORD PTR DS:
013095DB|.8D4C24 0C                LEA   ECX, DWORD PTR SS:


这里很容易提出一个特征码来
程序码:83 BB 40 CB 01 00 00 74 2B 83 BB 20 CB 01 00 0A 75 22 C7 83 E4 CA 01 00 02 00 00 00

但由于特征码中有对象成员的偏移值,下一版中可能会发生变化,所以我们这里用 ?? 来替代:
特征码: 83 BB ?? ?? ?? ?? 00 74 2B 83 BB ?? ?? ?? ?? 0A 75 22 C7 83 ?? ?? ?? ?? 02 00 00 00

我们的补丁方法就是:
013095A874 2B==> 74 00
013095B175 22==> 75 00

所以我们的修改数据为:
补丁码:83 BB ?? ?? ?? ?? 00 74 00 83 BB ?? ?? ?? ?? 0A 75 00 C7 83 ?? ?? ?? ?? 02 00 00 00


第一种破解方案:修改代码(偏移补丁)




第二种破解方案:修改寄存器(异常中断补丁)

我们还用特征码来定位,
013095A1|> \83BB 40CB0100 00CMP   DWORD PTR DS:, 0
013095A8|.74 2B                         JE      SHORT DFX.013095D5               ;该指令相对于特征码的偏移为 7
013095AA|.83BB 20CB0100 0A   CMP   DWORD PTR DS:, 0A
013095B1|.75 22                        JNZ   SHORT DFX.013095D5               ;该指令相对于特征码的偏移为 16

设置第一项: 偏移= 7,ZF = 0
伪码为:ZF:0,1,0:0


设置第二项: 偏移= 16,ZF = 1
伪码为:ZF:0,1,0:1



第三种破解方案:修改内存数据(异常中断补丁)

我们把内存 DWORD PTR DS: 修改为 1,使其不跳。
// 补丁地址相对于特征码偏移=0
伪码为:EBX,1CB40:0,1,0:I,D,1


我们把内存 DWORD PTR DS: 修改为 A
// 补丁地址相对于特征码偏移=9
伪码为:EBX,1CB20:0,1,0:I,D,A



第四种方法:NOP掉该指令(异常中断补丁)

第一组伪码为:EIP:0,1,0:NOP
注:这里的NOP不是修改代码,而是将EIP进行加分,跳过该行代码并执行下一行。


第二组伪码为:EIP:0,1,0:NOP



第五种方法:直接修改EIP(异常中断补丁)

我们知道若两个关键调整若失败后会调整到地址 013095D5,该地址相对于特征码偏移为 013095D5 - 013095A1 = 0x34,即十进制的52
我们希望的是进程可以执行到地址 013095B3,去完成赋值, 013095D5 - 013095B3 = 0x22,即十进制的34
由于是往上调,地址变小,所以我们应该填负的34。即十六进制 -22 (界面所有看填写数据的地方非特殊说明均为十六进制),这里和CPU寻址不同,CPU会从该行代码的下一行开始算偏移。
这次我们试一下 INT3 的断点类型
伪码为:EIP:0,1,1:FFFFFFDE


我们制作调试吧补丁,打开DebugView来看一下信息:




OK,条条大道通罗马,Baymax tools 又为大家扩展了一些修改思路及方法,只要想得到,就可以做的到。


Baymax Patch Tools v1.6 Beta 下载
https://www.chinapyg.com/thread-83083-1-1.html

sndncel 发表于 2016-5-20 05:45:57

谢谢老大的教程。。。。又学到一种新的分析思路呀。。。。。

sdnyzjzx 发表于 2016-5-20 07:23:03

又是一个不眠夜,校长太辛苦了!

vipcrack 发表于 2016-5-20 08:02:49

校长,打包个DOC文档,方便收藏。

panpan8848 发表于 2016-5-20 08:54:57

学习了一下,感觉很有收获

liutongbao 发表于 2016-5-20 09:02:12

老大真牛逼呀,膜拜ING。。

zxxiaopi 发表于 2016-5-20 09:52:55

膜拜大神

刀口以后 发表于 2016-5-20 11:05:22

为什么我添加补丁特征数据错误。您输入的数据错误,软件是加壳的。

try258 发表于 2016-5-20 16:14:01

校长威武!太辛苦了!

东海浪子 发表于 2016-5-20 19:13:33

校长,什么时候发布神器啊,等着试用
页: [1] 2 3 4
查看完整版本: Baymax Patch Tools 之 DFX 破解方案