7大侠发布了个游戏,没事玩了下,写了个过程,给大家参考参考。。希望不要BS。。
游戏地址 http://www.52pojie.cn/thread-84939-1-1.html
其实没有什么技术含量,完全是参考cektop大牛的作品才有这个过硬件锁定。
一、找跳向VM的第一个jmp
OD载入程序运行,弹出对话框,暂停程序。翻堆栈。。找到如下0012FF18 |00C5FC77 返回到 00C5FC77 来自 00C75806
0012FF1C |00000000
0012FF20 |00549193 ASCII "This application has been registered to Pass HWD - Unpack.CN"
0012FF24 |0040E6A1 ASCII "WinLicense"
0012FF28 |00000040
0012FF2C |00000000
0012FF30 |FFFFFFFF
0012FF34 \F24CD014
0012FF38 00463D27 返回到 迷宫7_se.00463D27==========》反汇编窗口跟随
0012FF3C 00000000
0012FF40 00549193 ASCII "This application has been registered to Pass HWD - Unpack.CN"
0012FF44 0040E6A1 ASCII "WinLicense"
0012FF48 00000040
0012FF4C 00000000
0012FF50 000206E9
0012FF54 00549192 ASCII "5This application has been registered to Pass HWD - Unpack.CN"
00463D27 61 POPAD=============》硬件执行断点
00463D28 C3 RETN
继续运行程序,点确定断在 00463D27,F8单步2下,就返回到跳向VM的jmp00549393 00E9 ADD CL,CH
00549395 14 0F ADC AL,0xF
00549397 0000 ADD BYTE PTR DS:[EAX],AL
00549399 68 DCC7070E PUSH 0xE07C7DC
0054939E ^ E9 66C2ECFF JMP 迷宫7_se.00415609
005493A3 68 A9C9070E PUSH 0xE07C9A9
005493A8 ^ E9 5CC2ECFF JMP 迷宫7_se.00415609
005493AD 68 19CB070E PUSH 0xE07CB19
005493B2 ^ E9 52C2ECFF JMP 迷宫7_se.00415609
005493B7 68 D7CB070E PUSH 0xE07CBD7================》停在这里,向上找
005493BC ^ E9 48C2ECFF JMP 迷宫7_se.00415609
005493C1 68 60CE070E PUSH 0xE07CE60
005493C6 ^ E9 3EC2ECFF JMP 迷宫7_se.00415609
005493CB 68 0ED0070E PUSH 0xE07D00E
005493D0 ^ E9 34C2ECFF JMP 迷宫7_se.00415609
二进制编辑00549393的第一个字节00,编辑为90,代码变为如下00549393 90 NOP
00549394 E9 140F0000 JMP 迷宫7_se.0054A2AD
00549399 68 DCC7070E PUSH 0xE07C7DC
0054939E ^ E9 66C2ECFF JMP 迷宫7_se.00415609
005493A3 68 A9C9070E PUSH 0xE07C9A9
00549394就是第一个jmp的地址这个地址我们脚本要用到。
二、找cmp ecx,eax地址
在上面找到的第一个jmp地址下硬件执行断点,然后重载程序。运行,停在第一个jmp处,如下00549394 /E9 140F0000 JMP 迷宫7_se.0054A2AD=========》停在这里
00549399 |68 DCC7070E PUSH 0xE07C7DC
0054939E ^|E9 66C2ECFF JMP 迷宫7_se.00415609=========》在这里按回车跟随代码
005493A3 |68 A9C9070E PUSH 0xE07C9A9
005493A8 ^|E9 5CC2ECFF JMP 迷宫7_se.00415609
005493AD |68 19CB070E PUSH 0xE07CB19
005493B2 ^|E9 52C2ECFF JMP 迷宫7_se.00415609
005493B7 |68 D7CB070E PUSH 0xE07CBD7
005493BC ^|E9 48C2ECFF JMP 迷宫7_se.00415609
005493C1 |68 60CE070E PUSH 0xE07CE60
005493C6 ^|E9 3EC2ECFF JMP 迷宫7_se.00415609
005493CB |68 0ED0070E PUSH 0xE07D00E
005493D0 ^|E9 34C2ECFF JMP 迷宫7_se.00415609
到这里,搜索命令序列
cmp ecx,eax
pushfd00415609 9C PUSHFD=================》上面跟到这里,然后搜索命令序列
0041560A 68 44490000 PUSH 0x4944
0041560F 893C24 MOV DWORD PTR SS:[ESP],EDI
00415612 54 PUSH ESP
00415613 8B3C24 MOV EDI,DWORD PTR SS:[ESP]
找到的第一处
00417CA0 3BC8 CMP ECX,EAX =======下硬件执行断点
00417CA2 9C PUSHFD
找到的第二处
0041A0CD 3BC8 CMP ECX,EAX =======下硬件执行断点
0041A0CF 9C PUSHFD
一般情况下,找两个就够了,往往第二处就是正确的比较地址
运行程序,断在0041A0CD,这个地址就是我们脚本要用到的第二个地址。
三、找正确的DWORD
清除所有断点,重载程序,运行,出现对话框后,不要点,然后在上面找到的比较地址0041A0CD,F2下断点(PS:不知道77做了什么处理,下硬件断点断不下来),然后点确定,顺利断在0041A0CD
0041A0CD 3BC8 CMP ECX,EAX========>断在这里
0041A0CF 9C PUSHFD
取消断点,载入脚本log.txt,运行完后会在程序目录生成logAll.txt,里面记录着所有从暂停到最后的ecx和eax的比较值。
部分值如下eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:0 ecx:0
eax:26C72347 ecx:6AEB9E99========》注意这里,这里eax的值就是正确的DWORD值
eax:4BF3EEBB ecx:6B1F90FC
eax:51B47CF6 ecx:6B1F90FC
eax:3323772C ecx:6B1F90FC
eax:6D0EAE93 ecx:6B1F90FC
eax:7E907D6F ecx:6B1F90FC
eax:2AF284A2 ecx:6B1F90FC
eax:310FC1D1 ecx:6B1F90FC
eax:310FC1D1 ecx:310FC1D1
eax:0 ecx:0
四、找到上面三个值之后,修改脚本bypassHWLock.txt对应值,
把上面找到的三个值写入脚本,重载程序,清除所有断点,载入脚本,脚本跑完之后,程序就bypass了。
五、WL2.1.332,那个也可以用同样的手法搞定,就不再罗嗦了。
六、Bypass之后,就可以inline patch或者lpk了。。这里就不罗嗦了。。
最后再次感谢cektop大牛!
要用到的脚本.rar
(443 Bytes, 下载次数: 270)
|