能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这么简单的东西别发到论坛上来了 耽误大家时间。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
第一个,直接搜索字符串
00401067 /0F85 40000000 jnz crackme0.004010A//nop
第二个也是一样的道理
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
可您能帮我把算法流程找出来吗?这个很关键。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
可您能帮我把算法流程找出来吗?这个很关键。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
本本鼠标被我砸了, 晚上再看看.. 这机上没工具
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
既然楼主这么想知道算法流程,那我就随便写一点吧(对楼主的行为表示囧一下)
00449B0D /$ 53 PUSH EBX
00449B0E |. 55 PUSH EBP
00449B0F |. 56 PUSH ESI
00449B10 |. 57 PUSH EDI
00449B11 |. 8B7C24 14 MOV EDI,DWORD PTR SS:[ESP+14]
00449B15 |> 833D 50484800>/CMP DWORD PTR DS:[484850],1
00449B1C |. 7E 0F |JLE SHORT crackme0.00449B2D
00449B1E |. 0FB607 |MOVZX EAX,BYTE PTR DS:[EDI]
00449B21 |. 6A 08 |PUSH 8
00449B23 |. 50 |PUSH EAX
00449B24 |. E8 79710000 |CALL crackme0.00450CA2
00449B29 |. 59 |POP ECX
00449B2A |. 59 |POP ECX
00449B2B |. EB 0F |JMP SHORT crackme0.00449B3C
00449B2D |> 0FB607 |MOVZX EAX,BYTE PTR DS:[EDI]
00449B30 |. 8B0D 44464800 |MOV ECX,DWORD PTR DS:[484644] ; crackme0.0048464E
00449B36 |. 8A0441 |MOV AL,BYTE PTR DS:[ECX+EAX*2]
00449B39 |. 83E0 08 |AND EAX,8
00449B3C |> 85C0 |TEST EAX,EAX
00449B3E |. 74 03 |JE SHORT crackme0.00449B43
00449B40 |. 47 |INC EDI
00449B41 |.^ EB D2 \JMP SHORT crackme0.00449B15
00449B43 |> 0FB637 MOVZX ESI,BYTE PTR DS:[EDI]
00449B46 |. 47 INC EDI
00449B47 |. 83FE 2D CMP ESI,2D
00449B4A |. 8BEE MOV EBP,ESI
00449B4C |. 74 05 JE SHORT crackme0.00449B53
00449B4E |. 83FE 2B CMP ESI,2B
00449B51 |. 75 04 JNZ SHORT crackme0.00449B57
00449B53 |> 0FB637 MOVZX ESI,BYTE PTR DS:[EDI]
00449B56 |. 47 INC EDI
00449B57 |> 33DB XOR EBX,EBX
00449B59 |> 833D 50484800>/CMP DWORD PTR DS:[484850],1
00449B60 |. 7E 0C |JLE SHORT crackme0.00449B6E
00449B62 |. 6A 04 |PUSH 4
00449B64 |. 56 |PUSH ESI
00449B65 |. E8 38710000 |CALL crackme0.00450CA2
00449B6A |. 59 |POP ECX
00449B6B |. 59 |POP ECX
00449B6C |. EB 0B |JMP SHORT crackme0.00449B79
00449B6E |> A1 44464800 |MOV EAX,DWORD PTR DS:[484644]
00449B73 |. 8A0470 |MOV AL,BYTE PTR DS:[EAX+ESI*2]
00449B76 |. 83E0 04 |AND EAX,4
00449B79 |> 85C0 |TEST EAX,EAX
00449B7B |. 74 0D |JE SHORT crackme0.00449B8A
00449B7D |. 8D049B |LEA EAX,DWORD PTR DS:[EBX+EBX*4]
00449B80 |. 8D5C46 D0 |LEA EBX,DWORD PTR DS:[ESI+EAX*2-30]
00449B84 |. 0FB637 |MOVZX ESI,BYTE PTR DS:[EDI]
00449B87 |. 47 |INC EDI
00449B88 |.^ EB CF \JMP SHORT crackme0.00449B59
00449B8A |> 83FD 2D CMP EBP,2D
00449B8D |. 8BC3 MOV EAX,EBX
00449B8F |. 75 02 JNZ SHORT crackme0.00449B93
00449B91 |. F7D8 NEG EAX
00449B93 |> 5F POP EDI
00449B94 |. 5E POP ESI
00449B95 |. 5D POP EBP
00449B96 |. 5B POP EBX
00449B97 \. C3 RETN
上面是我跟踪到的算法函数,相信楼主自己能找到的吧?
算法虽然有两个循环,但是关键的是第二个循环,就直接说第二个吧
随便输入几次注册码,发现关键跳转
00401064 . 3945 F8 CMP DWORD PTR SS:[EBP-8],EAX ; (初始 CPU 选择)
每次EAX中的值都是固定的7DBh,而堆栈DWORD PTR SS:[EBP-8]中的值则是由算法中的ebx决定的:
00449B7D |. 8D049B |LEA EAX,DWORD PTR DS:[EBX+EBX*4]
00449B80 |. 8D5C46 D0 |LEA EBX,DWORD PTR DS:[ESI+EAX*2-30]
上面两句用数学描述就是:
eax=ebx*5
ebx=esi+eax*2-30
联立一下就变成ebx=esi+ebx*10-30(跟踪发现,其中esi中值是输入注册码中的每一位)
这里我们看到这是一个数列可以表达为:
An=Nn+An-1*10-30(其中n和n-1是通式的下标)
因为算法在开始阶段用xor ebx,ebx将ebx清零
所以A0就应该等于0,现在假设我输入的注册码是1234567890那么:
A1=N1+A0*10-30=1
A2=32+10-30=0C
A3=33+12*10-30=7B
一直求解到第十位数字0,如果求得结果和7DB相等则认为所输入的注册码是正确的注册码。
不知道楼主是不是这个意思,你可以把源码贴出来,我会帮你对照分析下。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
CM1的注册码为2011
CM2一组可用信息:
natyou
1234
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
简单分析一下算法:
CM1是固定码的,所以不作分析了
CM2关键代码在下面:
00401175 |> \DB45 F4 fild [local.3] //用户名转十进制设为S1,字母则为0
00401178 |. DD5D EC fstp qword ptr ss:[ebp-14]
0040117B |. DD45 EC fld qword ptr ss:[ebp-14]
0040117E |. DC05 6D9B4600 fadd qword ptr ds:[469B6D] //[469B6D]处固定为1234+S1
00401184 |. DD5D E4 fstp qword ptr ss:[ebp-1C]
00401187 |. DD45 E4 fld qword ptr ss:[ebp-1C]
最终比较:用户名=用户名+1234 则成功,也就是说,任意字母作为用户名,注册码都为1234,数字0作为用户名也OK,gtz
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
natyou牛人啊 膜拜一下
|