我的第四个crackme
嗯,欢迎蹂躏!我是不会介意的!!!!!!!!!随便玩~这次继续是C
不过这次不要爆破,要算法!!!!!!!!!!!!!! 沙发我自己坐!!!!! 嘎嘎。。我先占着位。。支持一下。嘻嘻 书生哦,为什么不是GUI的啊?
这样的程序怎么调试呢? /:017 /:017 /:017
越搞越轻松......... 爆破很简单,算法不会,学习中 算法N简单,循环计算用户名第一位10次后比较注册码循环10次的值,2个循环的计算一样,估计是楼主偷懒了吧,让它相等就OK了/:017 /:017 /:017
弱弱的问下PYG 5.4 Cracker 小组怎么加入,俺是菜鸟,需要学习/:013 /:013 /:013 我分析的结果和楼上的几位DX不一样啊,有点意思,算法白痴,推不出来,莫非只有一组注册码?
...........
004012CAlea esi, dword ptr
004012D0movsx eax, byte ptr ;从这里开始取用户名的第一位计算得到一个值
004012D7mov edx, eax
004012D9add edx, dword ptr
004012DCmov eax, dword ptr
004012DFadd eax, edx
004012E1mov dword ptr , eax ;结果存在=var1*A+37h(var1为用户名第1位的ascii码值)
004012E4inc dword ptr
004012E7jmp short 004012C2
004012E9lea esi, dword ptr
004012F0lea eax, dword ptr
004012F6test eax, eax
004012F8jnz short 00401310
004012FAadd esp, -0C
004012FDpush 00401231 ; /请输入用户名\n
00401302call <jmp.&msvcrt.printf> ; \printf
00401307add esp, 10
0040130Ajmp short 00401335
0040130Clea esi, dword ptr
00401310mov dword ptr , 1
00401317cmp dword ptr , 0A
0040131Bjle short 00401320
0040131Djmp short 00401335
0040131Fnop
00401320mov eax, dword ptr ;取输入的注册码,注意这里是mov,上面是movsx,猫腻在这里
00401323mov edx, dword ptr
00401326add eax, edx
00401328mov edx, dword ptr
0040132Badd edx, eax
0040132Dmov dword ptr , edx ;算法和上面基本一样,结果存在,后面是比较了
00401330inc dword ptr
00401333jmp short 00401317
00401335mov eax, dword ptr ;由假码计算得到的值
00401338cmp eax, dword ptr ;由用户名第1位计算得到的值
0040133Bjnz short 00401350 ;关键跳转
0040133Dadd esp, -0C
00401340push 0040123F ; /注册成功\n
00401345call <jmp.&msvcrt.printf> ; \printf
0040134Aadd esp, 10
0040134Djmp short 00401360
0040134Fnop
00401350add esp, -0C
00401353push 00401249 ; /注册失败\n
00401358call <jmp.&msvcrt.printf> ; \printf
............
[ 本帖最后由 x80x88 于 2008-8-1 12:14 编辑 ] 原帖由 x80x88 于 2008-8-1 12:11 发表 https://www.chinapyg.com/images/common/back.gif
我分析的结果和楼上的几位DX不一样啊,有点意思,算法白痴,推不出来,莫非只有一组注册码?
...........
004012D0movsx eax, byte ptr ;从这里开始取用户名的第一位计算得到一个值
00401320mov eax, dword ptr ;取输入的注册码,注意这里是mov,上面是movsx,猫腻在这里
这里不同区别在于movsx eax,byte ptr 和mov esx,dword ptr
前者传送字节,后者传送双字。
mov 传送字节或字
movsx带符号扩展后再传送,例如此CM中movsx eax, byte ptr ,是先将byte ptr 的“值”扩展到32位,符号位不变,然后传送。
注册算法就是先将用户名首位字符的ASCALL值累加10次再加上(1+10)*10/2。所以注册码就是用户名的首字符。
[ 本帖最后由 hflywolf 于 2008-8-1 13:11 编辑 ] 晕啊~~~~~~~~~这个结果我大出意外!!!!!!!!!!!
算法设计失败!!!
页:
[1]
2