冷血书生 发表于 2008-7-31 23:25:37

我的第四个crackme

嗯,欢迎蹂躏!我是不会介意的!!!!!!!!!随便玩~

这次继续是C

不过这次不要爆破,要算法!!!!!!!!!!!!!!

冷血书生 发表于 2008-7-31 23:26:16

沙发我自己坐!!!!!

绝恋de烦神 发表于 2008-7-31 23:31:54

嘎嘎。。我先占着位。。支持一下。嘻嘻

hyperchem 发表于 2008-7-31 23:41:04

书生哦,为什么不是GUI的啊?
这样的程序怎么调试呢?

hflywolf 发表于 2008-8-1 00:41:15

/:017 /:017 /:017
越搞越轻松.........

lixy8888 发表于 2008-8-1 08:12:13

爆破很简单,算法不会,学习中

229402931 发表于 2008-8-1 09:28:47

算法N简单,循环计算用户名第一位10次后比较注册码循环10次的值,2个循环的计算一样,估计是楼主偷懒了吧,让它相等就OK了/:017 /:017 /:017

弱弱的问下PYG 5.4 Cracker 小组怎么加入,俺是菜鸟,需要学习/:013 /:013 /:013

x80x88 发表于 2008-8-1 12:11:01

我分析的结果和楼上的几位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 编辑 ]

hflywolf 发表于 2008-8-1 12:36:46

原帖由 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 编辑 ]

冷血书生 发表于 2008-8-1 12:54:18

晕啊~~~~~~~~~这个结果我大出意外!!!!!!!!!!!

算法设计失败!!!
页: [1] 2
查看完整版本: 我的第四个crackme