能力值:
( LV3,RANK:30 )
|
-
-
2 楼
name: yingyue
key : 3624951
嗯,再看了一下,貌似里面还有东西 ??
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
没有东西了。。只有算法。。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
name: john
key : 3920137
貌似注册码算法如下:
int MakeRegcode(DWORD dwName1,DWORD dwName2,DWORD dwName3,DWORD dwName4)
{
int a = ((dwName1+dwName2) | ( (dwName4*dwName3+dwName3) ^ 0x21 ))|((dwName3 +0x33 ) ^0x1);
a = ((((a *dwName2+dwName4+0x8) +(a*dwName2))^0x9) | 0x96)+(a *dwName2+dwName4+0x8)-1;
return a ;
}
也可以这样搞:
int _declspec(naked) MakeRegcode(DWORD dwName1,DWORD dwName2,DWORD dwName3,DWORD dwName4)
{
_asm
{
PUSH EBP
MOV EBP,ESP
MOV EAX,DWORD PTR SS:[EBP+0x8]
ADD EAX,DWORD PTR SS:[EBP+0xC]
MOV ECX,DWORD PTR SS:[EBP+0x14]
IMUL ECX,DWORD PTR SS:[EBP+0x10]
ADD ECX,DWORD PTR SS:[EBP+0x10]
XOR ECX,0x21
OR EAX,ECX
MOV EDX,DWORD PTR SS:[EBP+0x10]
ADD EDX,0x33
XOR EDX,1
OR EAX,EDX
MOV DWORD PTR SS:[EBP+0x8],EAX
MOV EAX,DWORD PTR SS:[EBP+0x8]
IMUL EAX,DWORD PTR SS:[EBP+0xC]
MOV ECX,DWORD PTR SS:[EBP+0x14]
LEA EDX,DWORD PTR DS:[EAX+ECX+0x8]
MOV DWORD PTR SS:[EBP+0x10],EDX
MOV EAX,DWORD PTR SS:[EBP+0x8]
IMUL EAX,DWORD PTR SS:[EBP+0xC]
ADD EAX,DWORD PTR SS:[EBP+0x10]
XOR EAX,0x9
OR EAX,0x96
MOV DWORD PTR SS:[EBP+0x14],EAX
MOV ECX,DWORD PTR SS:[EBP+0x14]
MOV EDX,DWORD PTR SS:[EBP+0x10]
LEA EAX,DWORD PTR DS:[EDX+ECX-1]
MOV DWORD PTR SS:[EBP+0x8],EAX
MOV EAX,DWORD PTR SS:[EBP+0x8]
POP EBP
retn
}
}
我也蛋痛了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
你让我更加蛋疼了。。。
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
注册信息
name:xuefeng code:3683991
注册过程
00402287 |. 0FBE8D 30FFFF>movsx ecx, byte ptr [ebp-0xD0] ; ecx = x(78) *用户名的第一位
0040228E |. 898D 24FFFFFF mov dword ptr [ebp-0xDC], ecx ; ecx 放入 ebp-0xDC
00402294 |. 0FBE95 31FFFF>movsx edx, byte ptr [ebp-0xCF] ; edx = u(75) *用户名的第二位
0040229B |. 8955 FC mov dword ptr [ebp-0x4], edx ; edx 放入 ebp-0x4
0040229E |. 0FBE85 32FFFF>movsx eax, byte ptr [ebp-0xCE] ; eax = e(65) *用户名的第三位
004022A5 |. 8985 28FFFFFF mov dword ptr [ebp-0xD8], eax ; eax 放入 ebp-0xD8
004022AB |. 0FBE8D 33FFFF>movsx ecx, byte ptr [ebp-0xCD] ; ecx = f(66) *用户名的第四位
004022B2 |. 898D 2CFFFFFF mov dword ptr [ebp-0xD4], ecx ; ecx 放入 ebp-0xD4
004022B8 |. 8B95 2CFFFFFF mov edx, dword ptr [ebp-0xD4] ; 从 (ebp-0xD4) 取出 (66) 放入 edx
004022BE |. 52 push edx ; /edx 入栈
004022BF |. 8B85 28FFFFFF mov eax, dword ptr [ebp-0xD8] ; |从 (ebp-0xD8) 取出 (65) 放入 eax
004022C5 |. 50 push eax ; |eax 入栈
004022C6 |. 8B4D FC mov ecx, dword ptr [ebp-0x4] ; |从 (ebp-0x4) 取出 (75) 放入 ecx
004022C9 |. 51 push ecx ; |ecx 入栈
004022CA |. 8B95 24FFFFFF mov edx, dword ptr [ebp-0xDC] ; |从 (ebp-0xDC) 取出 (78) 放入 edx
004022D0 |. 52 push edx ; |edx 入栈
004022D1 |. E8 2AFFFFFF call 00402200 ; \算法CALL
004022D6 |. 83C4 10 add esp, 0x10
004022D9 |. A3 544A4200 mov dword ptr [0x424A54], eax
004022DE |. 32C0 xor al, al
算法过程
00402200 /$ 55 push ebp
00402201 |. 8BEC mov ebp, esp
00402203 |. 8B45 08 mov eax, dword ptr [ebp+0x8]
00402206 |. 0345 0C add eax, dword ptr [ebp+0xC] ; (78 + 75) 放入 eax
00402209 |. 8B4D 14 mov ecx, dword ptr [ebp+0x14] ; (66) 放入 ecx
0040220C |. 0FAF4D 10 imul ecx, dword ptr [ebp+0x10] ; (66 * 65) 放入 ecx
00402210 |. 034D 10 add ecx, dword ptr [ebp+0x10] ; (ecx + 65) 放入 ecx
00402213 |. 83F1 21 xor ecx, 0x21 ; (ecx xor 21) 放入 ecx
00402216 |. 0BC1 or eax, ecx ; (eax=ED or ecx=2882) 放入 eax
00402218 |. 8B55 10 mov edx, dword ptr [ebp+0x10] ; (65) 放入 edx
0040221B |. 83C2 33 add edx, 0x33 ; (edx=65 + 33) 放入 edx
0040221E |. 83F2 01 xor edx, 0x1 ; (edx=98 xor 1) 放入 edx
00402221 |. 0BC2 or eax, edx ; (eax=28EF or edx=99) 放入 eax
00402223 |. 8945 08 mov dword ptr [ebp+0x8], eax ; (eax=28FF) 放入 ebp+0x8
00402226 |. 8B45 08 mov eax, dword ptr [ebp+0x8] ; (ebp+0x8=28FF) 放入 eax
00402229 |. 0FAF45 0C imul eax, dword ptr [ebp+0xC] ; (eax=28FF * 75) 放入 eax
0040222D |. 8B4D 14 mov ecx, dword ptr [ebp+0x14] ; (ebp+0x14=66) 放入 ecx
00402230 |. 8D5408 08 lea edx, dword ptr [eax+ecx+0x8] ; (eax+ecx+0x8) 放入 edx
00402234 |. 8955 10 mov dword ptr [ebp+0x10], edx ; (edx=0012BCF9) 放入 ebp+0x10
00402237 |. 8B45 08 mov eax, dword ptr [ebp+0x8] ; (ebp+0x8=28FF) 放入 eax
0040223A |. 0FAF45 0C imul eax, dword ptr [ebp+0xC] ; (eax=28FF * 75) 放入 eax
0040223E |. 0345 10 add eax, dword ptr [ebp+0x10] ; (eax=12BC8B + 12BCF9) 放入 eax
00402241 |. 83F0 09 xor eax, 0x9 ; (eax=257984 xor 9) 放入 eax
00402244 |. 0D 96000000 or eax, 0x96 ; (eax=25798D or 96) 放入 eax
00402249 |. 8945 14 mov dword ptr [ebp+0x14], eax ; (eax=25799F) 放入 ebp+0x14
0040224C |. 8B4D 14 mov ecx, dword ptr [ebp+0x14] ; (ebp+0x14) 放入 ecx
0040224F |. 8B55 10 mov edx, dword ptr [ebp+0x10] ; (ebp+0x10) 放入 edx
00402252 |. 8D440A FF lea eax, dword ptr [edx+ecx-0x1] ; (edx+ecx-0x1) 放入 eax
00402256 |. 8945 08 mov dword ptr [ebp+0x8], eax ; (eax=00383697) 放入 ebp+0x8
00402259 |. 8B45 08 mov eax, dword ptr [ebp+0x8] ; (ebp+0x8) 放入 eax
0040225C |. 5D pop ebp
0040225D \. C3 retn
比较过程
004023A6 |. 8945 EC mov dword ptr [ebp-0x14], eax ; 假码的十六进制(499602D2) 放入 (ebp-14)
004023A9 |. 8B45 EC mov eax, dword ptr [ebp-0x14] ; 从 (ebp-0x14) 取出假码的十六进制(499602D2) 放入 eax
004023AC |. 50 push eax ; eax入栈
004023AD |. 8B0D 544A4200 mov ecx, dword ptr [0x424A54] ; 从 (0x424A54) 取出真码的十六进制(383697) 放入 ecx
004023B3 |. 51 push ecx ; ecx入栈
004023B4 |. E8 57FFFFFF call 00402310 ; 注册码验证CALL,正确返回(1)、错误返回(0)
算法流程
var A1, A2, A3, A4
var C1, C2, C3, Result
C1 = ((((A1 + A2) or (((A4 * A3) + A3) xor 21)) or ((A3 + 33) xor 1)) * A2)
C2 = C1 + A4 - 8
C3 = (((( C1 + C2) xor 9) or 96) + C2) - 1
Result = C3 另外4楼的兄弟写的C代码好像不对呵呵,可能是我看不太懂吧! 
C语言我不会,如果哪位会C的朋友可以验证4楼朋友的代码是否正确!
如果要是不对的话容易误导看文章的人!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
好详细的分析啊。。 
算法我是这样写的
int sf(int a,int b,int c,int d)
{
a= a+b | 0x21 ^ c+d*c | 0x33 +c^1;
c=a*b+1*8+d;
d=0x96 | c +a*b ^0x8+1;
a=c+d-1;
return a ;
}
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
你没测试,就凭感觉来结论吗?有点不严谨的态度
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
不是没测试 是测试过了 因为我不怎么会C语言所以,怎么测试都无法通过呵呵!
所以采用好像 ,如果我要是会C我就不是说好像了! 那就可以完全下结论了不是吗!
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
对了你的CM是不是应该判断下用户名长度? 你的这个现在如果是 一字节的用户名 那注册码永远都是158
用户名 a~z A~Z 0~9 加上英文符号! 都可以用158注册!
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
一句话 : I FULE YOU (此话题就此打住)
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
感谢了。。下次的cm更正
|