因为这个程序没有对字符串进行加密,所以很容易的就来得到了注册算法的位置:
0040186B . E8 28AE0000 CALL unpack2.0040C698
00401870 . 8B43 5C MOV EAX,DWORD PTR DS:[EBX+5C]
00401873 . 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8]
00401876 . 85C9 TEST ECX,ECX
00401878 75 11 JNZ SHORT unpack2.0040188B
0040187A . 51 PUSH ECX ; /Arg3 = 0012FFB0
0040187B . 51 PUSH ECX ; |Arg2 = 0012FFB0
0040187C . 68 D4604100 PUSH unpack2.004160D4 ; |用户名不能为空!
00401881 . E8 B6CD0000 CALL unpack2.0040E63C ; \unpack2.0040E63C
00401886 . E9 BB030000 JMP unpack2.00401C46
0040188B > 8B53 60 MOV EDX,DWORD PTR DS:[EBX+60]
0040188E . 8B72 F8 MOV ESI,DWORD PTR DS:[EDX-8]
00401891 . 85F6 TEST ESI,ESI
00401893 75 11 JNZ SHORT unpack2.004018A6
00401895 . 56 PUSH ESI ; /Arg3 = FFFFFFFF
00401896 . 56 PUSH ESI ; |Arg2 = FFFFFFFF
00401897 . 68 C4604100 PUSH unpack2.004160C4 ; |密码不能为空!
0040189C . E8 9BCD0000 CALL unpack2.0040E63C ; \unpack2.0040E63C
-----
00401878 /75 11 JNZ SHORT unpack2.0040188B
对是否输入name 的判断
00401893 /75 11 JNZ SHORT unpack2.004018A6
对 numbers 的判断
0040189C . E8 9BCD0000 CALL unpack2.0040E63C ; \unpack2.0040E63C
这个是对输入的内容的判断,接下来的跳改为
004018A1 . /E9 A0030000 JMP unpack2.00401C46
就可以通过这一次的校验了,接下来一直走,因为是爆破,中间的一些分析就没在意
00401AAD 83EE 02 SUB ESI,2
00401AB0 0F88 08010000 JS CrackMe.00401BBE ; 不能让他跳
他通过标志位判断一些注册信息的情况,可以 nop 它
接下来的这个CALL 是判断时候好像是对内存的分配的,nop 它
00401ACB . E8 F07D0000 CALL CrackMe.004098C0
当来到这里是
00401B57 /75 65 JNZ SHORT CrackMe.00401BBE ; 不能让他跳
当来到这里:
00401BBC /74 1C JE SHORT CrackMe.00401BDA ; 必须跳
注册信息:
x敏m
123456789
然后就可以了,因为是新手,很多地方没弄明白,只是简单的改改,失误的地方很多。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课