今早看到看雪上某人的请求,突发奇想写下这篇技巧。
那个软件的注册说明中写的是
下载更新服务: XXX/年,XXX/半年
也就是说是在他的服务器上更新用户信息,Client实时进行网络验证。
这种东西注册机虽然没用了,但爆破未必不行。
想起写注册机时经常见到验证函数,一般爆破技巧是在验证函数后,JNZ改JZ之类的,但大多软件都会进行多次验证,所以我突发奇想改验证函数。
跟踪发现,此程序的验证函数在00408F40
0041BD98 . E8 A3D1FEFF CALL 00408F40
0041BD9D . 85C0 TEST EAX,EAX
0041BD9F . BF FC8F4F00 MOV EDI,004F8FFC
0041BDA4 . 75 05 JNZ SHORT 0041BDAB
于是直接进入函数把函数末尾0040901E的
RETN 0C 改为 MOV EAX,1 (它是靠EAX返回的)
保存运行...注册还没出呢,直接显示软件已过期...
再调
发现这个函数过期和注册在同一个函数里验证...无语
0041BD8A . 6A 00 PUSH 0
0041BD8C . 6A 00 PUSH 0
0041BD8E . 68 84874F00 PUSH GameBT.004F8784 ASCII "Reged"
0041BD93 . B9 F0B24F00 MOV ECX,GameBT.004FB2F0
0041BD98 . E8 A3D1FEFF CALL GameBT.00408F40
0041DEA8 . 6A 00 PUSH 0
0041DEAA . 6A 01 PUSH 1
0041DEAC . 68 24894F00 PUSH GameBT.004F8924 ASCII "OutOfDate"
0041DEB1 . B9 F0B24F00 MOV ECX,GameBT.004FB2F0
0041DEB6 . E8 85B0FEFF CALL GameBT.00408F40
着实无奈...幸好函数下面NOP多,爆改
原函数:
XXXX
XXXX
00408FAB |. E8 F0FDFFFF CALL 00408DA0
00408FB0 |. 83F8 01 CMP EAX,1
00408FB3 |. 74 23 JE SHORT 00408FD8
XXXX
XXXX
00408FD4 |. 8BC5 MOV EAX,EBP
00408FD6 |. EB 33 JMP SHORT 0040900B
00408FD8 |. XXXX
XXXX
00409009 |. 8BC6 MOV EAX,ESI
0040900B |. XXXX
XXXX
0040901E C2 0C00 RETN 0C
改后:
XXXX
XXXX
00408FAB |. E8 F0FDFFFF CALL 00408DA0
00408FB0 |. 83F8 01 CMP EAX,1
00408FB3 |. 74 23 JE SHORT 00408FD8
XXXX
XXXX
00408FD4 |. 8BC5 MOV EAX,EBP
00408FD6 /EB 49 JMP SHORT 00409021
00408FD8 |. XXXX
XXXX
00409009 /EB 1D JMP SHORT 00409028
0040900B |. XXXX
XXXX
0040901E C2 0C00 RETN 0C
00409021 B8 01000000 MOV EAX,1
00409026 ^ EB E3 JMP SHORT 0040900B
00409028 B8 00000000 MOV EAX,0
0040902D ^ EB DC JMP SHORT 0040900B
原函数后的空隙刚刚好。
我只是用实例提出一种爆破方法,具体这个程序是否成功我也没有验证。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课