streamload 发表于 2011-3-29 22:57

ByPass-WinLicense 硬件锁定[2.1.010-2.1.332]

7大侠发布了个游戏,没事玩了下,写了个过程,给大家参考参考。。希望不要BS。。
游戏地址 http://www.52pojie.cn/thread-84939-1-1.html

其实没有什么技术含量,完全是参考cektop大牛的作品才有这个过硬件锁定。
一、找跳向VM的第一个jmp
    OD载入程序运行,弹出对话框,暂停程序。翻堆栈。。找到如下


0012FF18   |00C5FC77返回到 00C5FC77 来自 00C75806
0012FF1C   |00000000
0012FF20   |00549193ASCII "This application has been registered to Pass HWD - Unpack.CN"
0012FF24   |0040E6A1ASCII "WinLicense"
0012FF28   |00000040
0012FF2C   |00000000
0012FF30   |FFFFFFFF
0012FF34   \F24CD014
0012FF38    00463D27返回到 迷宫7_se.00463D27==========》反汇编窗口跟随
0012FF3C    00000000
0012FF40    00549193ASCII "This application has been registered to Pass HWD - Unpack.CN"
0012FF44    0040E6A1ASCII "WinLicense"
0012FF48    00000040
0012FF4C    00000000
0012FF50    000206E9
0012FF54    00549192ASCII "5This application has been registered to Pass HWD - Unpack.CN"
00463D27    61                              POPAD=============》硬件执行断点
00463D28    C3                              RETN

继续运行程序,点确定断在 00463D27,F8单步2下,就返回到跳向VM的jmp


00549393    00E9                              ADD CL,CH
00549395    14 0F                           ADC AL,0xF
00549397    0000                              ADD BYTE PTR DS:,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
pushfd

00415609    9C                              PUSHFD=================》上面跟到这里,然后搜索命令序列
0041560A    68 44490000                     PUSH 0x4944
0041560F    893C24                            MOV DWORD PTR SS:,EDI
00415612    54                              PUSH ESP
00415613    8B3C24                            MOV EDI,DWORD PTR SS:

找到的第一处
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:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:0ecx:0
eax:26C72347ecx:6AEB9E99========》注意这里,这里eax的值就是正确的DWORD值
eax:4BF3EEBBecx:6B1F90FC
eax:51B47CF6ecx:6B1F90FC
eax:3323772Cecx:6B1F90FC
eax:6D0EAE93ecx:6B1F90FC
eax:7E907D6Fecx:6B1F90FC
eax:2AF284A2ecx:6B1F90FC
eax:310FC1D1ecx:6B1F90FC
eax:310FC1D1ecx:310FC1D1
eax:0ecx:0

四、找到上面三个值之后,修改脚本bypassHWLock.txt对应值,
把上面找到的三个值写入脚本,重载程序,清除所有断点,载入脚本,脚本跑完之后,程序就bypass了。

五、WL2.1.332,那个也可以用同样的手法搞定,就不再罗嗦了。

六、Bypass之后,就可以inline patch或者lpk了。。这里就不罗嗦了。。

最后再次感谢cektop大牛!



hao3642270 发表于 2011-3-29 23:29

感谢分享!学习啦

Hmily 发表于 2011-3-30 13:06

streamload把吾爱的悬赏也领了吧.http://www.52pojie.cn/thread-84939-1-1.html

放下 发表于 2011-3-30 16:05

感谢分享,哈哈,学习中

正在测试脚本.

sdsajjkjk 发表于 2011-3-30 17:21

学习学习哈~~~~~~~~~~~~

TheCjw 发表于 2011-3-30 17:56

这个可以有~不错。

火狼の吻 发表于 2011-3-30 18:25

此贴必火,先占位支持了,谢谢分享

chddchf 发表于 2011-3-30 19:42

不错,分析的很详细!

羡小b 发表于 2011-3-30 22:27

学习了。初步接触VM。。。。。

fenjin 发表于 2011-3-31 09:12

感谢分享!辛苦了!
页: [1] 2 3 4 5 6
查看完整版本: ByPass-WinLicense 硬件锁定[2.1.010-2.1.332]