好友
阅读权限20
听众
最后登录1970-1-1
|
第一阶段:004013B4|.8D45 D8lea eax,[local.10]; |把试练码送给EAX
004013B7|.890424 mov dword ptr ss:[esp],eax; |把试练码送给[ESP]
004013BA|.E8 B1060000call <jmp.&msvcrt.strlen> ; \取试练码的长度
004013BF|.83F8 08cmp eax,8 ;试练码长度和8比较
004013C2|.74 05je short CrackMe#.004013C9;不相等就GAME OVER
004013C4|.E9 2C010000jmp CrackMe#.004014F5
004013C9|>C745 F4 00000000 mov [local.3],0
004013D0|>837D F4 07 /cmp [local.3],7;[ebp-C]的值和7比较
004013D4|.7F 20|jg short CrackMe#.004013F6 ;大于就跳
004013D6|.8D45 F8|lea eax,[local.2]
004013D9|.0345 F4|add eax,[local.3]
004013DC|.8D50 E0|lea edx,dword ptr ds:[eax-20]
004013DF|.8D45 F8|lea eax,[local.2]
004013E2|.0345 F4|add eax,[local.3]
004013E5|.83E8 20|sub eax,20 ;EAX-20=试练码的地址
004013E8|.0FB600 |movzx eax,byte ptr ds:[eax];逐位取试练码的ASCII值给EAX
004013EB|.FEC0 |inc al ;AL+1
004013ED|.8802 |mov byte ptr ds:[edx],al ;把AL的值覆盖原来的地方
004013EF|.8D45 F4|lea eax,[local.3]
004013F2|.FF00 |inc dword ptr ds:[eax] ;[EAX]+1
004013F4|.^ EB DA\jmp short CrackMe#.004013D0;循环计算 总结:
1、试练码要8位,逐位取试练码的ASCII值+1进行变异。
2、变异后的试练码和QbTTx1sE比较。
第二阶段:00401480|> /8D45 B8/lea eax,[local.18] ; |把用户名的地址送给EAX
00401483|. |890424 |mov dword ptr ss:[esp],eax ; |把用户名送给[esp]
00401486|. |E8 E5050000|call <jmp.&msvcrt.strlen>; \取用户名长度
0040148B|. |3945 F4|cmp [local.3],eax;[ebp-c]和用户名长度比较
0040148E|. |77 1A|ja short CrackMe#.004014AA ;大于就跳
00401490|. |8D45 F8|lea eax,[local.2]
00401493|. |0345 F4|add eax,[local.3]
00401496|. |83E8 40|sub eax,40
00401499|. |0FBE00 |movsx eax,byte ptr ds:[eax];逐位取用户名ASCII值给EAX
0040149C|. |0345 B4|add eax,[local.19] ;EAX+[ebp-4c]的值
0040149F|. |48 |dec eax;EAX-1
004014A0|. |8945 B4|mov [local.19],eax ;把EAX的值送给[ebp-4c]
004014A3|. |8D45 F4|lea eax,[local.3]
004014A6|. |FF00 |inc dword ptr ds:[eax] ;[eax]+1
004014A8|.^\EB D6\jmp short CrackMe#.00401480;循环计算
004014AA|>8B45 B4mov eax,[local.19]; |||||上面计算好的结果送给EAX
004014AD|.3B45 B0cmp eax,[local.20]; |||||EAX的值和试练码的16进制比较
004014B0|.75 43jnz short CrackMe#.004014F5 ; |||||不相等就GAME OVER 总结:
1、用户名要大于2位且小于10位。
2、逐位取用户名ASCII值累加,每加一次减一。
3、最后结果要和输入的试练码16进制相等。
第三阶段:004014D6|.C70424 64324000mov dword ptr ss:[esp],CrackMe#.0>; ||console nag... lol ...remove me!\n
004014DD|.E8 AE050000call <jmp.&msvcrt.printf> ; |\printf
004014E2|.E8 F9040000call <jmp.&msvcrt._getch> ; |[_getch 总结:第三阶段只要让程序不输出console nag... lol ...remove me!就可以了。所以就要把上面的代码NOP。
|
|