菜鸟教程,教你看最简单的注册算法 5-Or-More! v2.0a 这是一个很好玩的小游戏(见附件60k),寓教与乐,来解开它的秘密!!!
运行游戏填入用户名:shitman 假注册码:87654321 ctrl+n 调出trw2000 下bpx hmemcpy, g 回到游戏界面,点确定,被拦下,清断点 bc * 回到游戏 pmodule
0167:0040605F FF154C144100 CALL `USER32!GetDlgItemTextA` 0167:00406065 6A10 PUSH BYTE +10 0167:00406067 8D4DF0 LEA ECX,[EBP-10] 0167:0040606A 51 PUSH ECX 0167:0040606B 6882000000 PUSH DWORD 82 0167:00406070 FF7508 PUSH DWORD [EBP+08] 按F10几下到此*****(1) 0167:00406073 FF154C144100 CALL `USER32!GetDlgItemTextA` *****(1)获取用户名 0167:00406079 8D4DB0 LEA ECX,[EBP-50] 0167:0040607C 51 PUSH ECX 下 D ECX=shitman 0167:0040607D FF1560134100 CALL `KERNEL32!lstrlenA` 获取用户名的长度 0167:00406083 85C0 TEST EAX,EAX 0167:00406085 0F8489000000 JZ NEAR 00406114 如EAX=0,说明用户名为空就跳去死了!我有用户名,所以不会跳去死^_^ 0167:0040608B 8D45F0 LEA EAX,[EBP-10] 0167:0040608E 50 PUSH EAX 我输入的假注册码 D EAX=87654321 0167:0040608F FF1560134100 CALL `KERNEL32!lstrlenA`获取注册码长度 0167:00406095 85C0 TEST EAX,EAX 0167:00406097 747B JZ 00406114 不为空,不会跳去死,会往下走 0167:00406099 8D45F0 LEA EAX,[EBP-10] 0167:0040609C 50 PUSH EAX EAX里放着我的假码:87654321 0167:0040609D E84EFEFFFF CALL 00405EF0 ********(2)这里就是关键处了 0167:004060A2 83C404 ADD ESP,BYTE +04 0167:004060A5 85C0 TEST EAX,EAX 0167:004060A7 746B JZ 00406114 走到这里就会跳去死了,因为我输入的是不正确的注册码,在*****(2)的call 会验证我的87654321,肯定不通过,跳到下面去死了。所以要去******(2)中的CALL里看看,到目前我们都没看到正确注册码,说明注册码在这个CALL 里做文章。 0167:004060A9 8D45F0 LEA EAX,[EBP-10] 0167:004060AC 8D4DB0 LEA ECX,[EBP-50] 0167:004060AF 50 PUSH EAX 0167:004060B0 51 PUSH ECX 0167:004060B1 E87FFEFFFF CALL 00405F35 0167:004060B6 83C408 ADD ESP,BYTE +08 0167:004060B9 85C0 TEST EAX,EAX 0167:004060BB 7449 JZ 00406106 0167:004060BD 6A40 PUSH BYTE +40 0167:004060BF 68ACD34000 PUSH DWORD 0040D3AC 0167:004060C4 6864D94000 PUSH DWORD 0040D964 0167:004060C9 FF7508 PUSH DWORD [EBP+08] 0167:004060CC FF1538144100 CALL `USER32!MessageBoxA` 0167:004060D2 C705F0E940000100+MOV DWORD [0040E9F0],01 0167:004060DC A1C4E94000 MOV EAX,[0040E9C4] 0167:004060E1 50 PUSH EAX 0167:004060E2 E87DCFFFFF CALL 00403064 0167:004060E7 83C404 ADD ESP,BYTE +04 0167:004060EA A1A0FA4000 MOV EAX,[0040FAA0] 0167:004060EF 6A00 PUSH BYTE +00 0167:004060F1 68449C0000 PUSH DWORD 9C44 0167:004060F6 50 PUSH EAX 0167:004060F7 FF15B0144100 CALL `USER32!GetMenu` 0167:004060FD 50 PUSH EAX 0167:004060FE FF15B8144100 CALL `USER32!DeleteMenu` 0167:00406104 EB23 JMP SHORT 00406129 0167:00406106 6A30 PUSH BYTE +30 0167:00406108 68ACD34000 PUSH DWORD 0040D3AC 0167:0040610D 684CD94000 PUSH DWORD 0040D94C 0167:00406112 EB0C JMP SHORT 00406120 0167:00406114 6A30 PUSH BYTE +30 **************去死的 0167:00406116 68ACD34000 PUSH DWORD 0040D3AC 0167:0040611B 6834D94000 PUSH DWORD 0040D934 地方在这 0167:00406120 FF7508 PUSH DWORD [EBP+08] 0167:00406123 FF1538144100 CALL `USER32!MessageBoxA`**********出错的对话框
算法段 0167:0040609D E84EFEFFFF CALL 00405EF0 ********(2)按F8跟进上面的这个关键对比call里 来到以下代码段: 0167:00405EF0 8B442404 MOV EAX,[ESP+04] 将87654321假码所在地址给EAX 0167:00405EF4 85C0 TEST EAX,EAX 0167:00405EF6 743A JZ 00405F32 测试EAX不为0,不会去死。
以下是比较注册码过程(最最简单的非明码比较)如果不看这里,你是无法得到正确的注册码!!!!!
0167:00405EF8 803831 CMP BYTE [EAX],31 比较第一位注册码是否是31即 1 0167:00405EFB 7535 JNZ 00405F32 到这里就不要往下按F10了,否则你去死了 0167:00405EFD 80780136 CMP BYTE [EAX+01],36 比较第二位注册码是否是36即 6 0167:00405F01 752F JNZ 00405F32 0167:00405F03 80780231 CMP BYTE [EAX+02],31 1 0167:00405F07 7529 JNZ 00405F32 0167:00405F09 80780333 CMP BYTE [EAX+03],33 3 0167:00405F0D 7523 JNZ 00405F32 0167:00405F0F 80780435 CMP BYTE [EAX+04],35 5 0167:00405F13 751D JNZ 00405F32 0167:00405F15 80780535 CMP BYTE [EAX+05],35 5 0167:00405F19 7517 JNZ 00405F32 0167:00405F1B 80780631 CMP BYTE [EAX+06],31 1 0167:00405F1F 7511 JNZ 00405F32 0167:00405F21 80780730 CMP BYTE [EAX+07],30 0 0167:00405F25 750B JNZ 00405F32 0167:00405F27 80780800 CMP BYTE [EAX+08],00 第九位没了就完成任务 0167:00405F2B B801000000 MOV EAX,01 置EAX=1 0167:00405F30 7402 JZ 00405F34 跳到返回ret成功了!!!!! 0167:00405F32 33C0 XOR EAX,EAX *******EAX=0上面的任意一个jnz 跳到这,你就完蛋 0167:00405F34 c3 Ret
考,注册信息不在注册表里,而在windows/5ormore.ini 里,我在注册表里找了半天。 [Settings] Options=03C223C2430303C2630303C21313 MoreOptions=73C203C203C203 SN=1363133353531303 Name=5D5C1D9ABC9C Time=64279602A457C60213230213 [1] [2] 下一页 |