能力值:
( LV9,RANK:170 )
|
-
-
2 楼
比我好多了,我只会爆啊!
|
能力值:
( LV9,RANK:250 )
|
-
-
3 楼
排版有问题,乱的很
|
能力值:
(RANK:520 )
|
-
-
4 楼
那个循环是注册码算法部分
004024AF > /66:3B75 D0 cmp si, [ebp-30] //si 初始值为1,[ebp-30]存放的输入注册码的长度,循环开始;
004024B3 . |0F8F 93000000 jg 0040254C //si值大于输入的注册码长度,则退出循环
004024B9 . |C745 BC 01000>mov dword ptr [ebp-44], 1
004024C0 . |C745 B4 02000>mov dword ptr [ebp-4C], 2
004024C7 . |8D45 CC lea eax, [ebp-34]
004024CA . |8985 7CFFFFFF mov [ebp-84], eax
004024D0 . |C785 74FFFFFF>mov dword ptr [ebp-8C], 4008
004024DA . |8D4D B4 lea ecx, [ebp-4C]
004024DD . |51 push ecx
004024DE . |0FBFD6 movsx edx, si
004024E1 . |52 push edx
004024E2 . |8D85 74FFFFFF lea eax, [ebp-8C]
004024E8 . |50 push eax
004024E9 . |8D4D A4 lea ecx, [ebp-5C]
004024EC . |51 push ecx
004024ED . |FF15 44104000 call [<&MSVBVM60.#632>]
004024F3 . |8D55 A4 lea edx, [ebp-5C]
004024F6 . |52 push edx
004024F7 . |8D45 C8 lea eax, [ebp-38]
004024FA . |50 push eax
004024FB . |FF15 74104000 call [<&MSVBVM60.__vbaStrVarVal>]
00402501 . |50 push eax
00402502 . |FF15 18104000 call [<&MSVBVM60.#516>] //取注册名的第si个字符
00402508 . |66:0FAFC6 imul ax, si //将第si个字符的16进制值乘以si
0040250C . |0F80 5F010000 jo 00402671
00402512 . |0FBFC8 movsx ecx, ax
00402515 . |03CF add ecx, edi //乘完后加edi ,edi初始为1
00402517 . |0F80 54010000 jo 00402671
0040251D . |8BF9 mov edi, ecx //所得值存放在edi中
0040251F . |8D4D C8 lea ecx, [ebp-38]
00402522 . |FF15 B4104000 call [<&MSVBVM60.__vbaFreeStr>]
00402528 . |8D55 A4 lea edx, [ebp-5C]
0040252B . |52 push edx
0040252C . |8D45 B4 lea eax, [ebp-4C]
0040252F . |50 push eax
00402530 . |6A 02 push 2
00402532 . |FFD3 call ebx
00402534 . |83C4 0C add esp, 0C
00402537 . |B8 01000000 mov eax, 1
0040253C . |66:03C6 add ax, si
0040253F . |0F80 2C010000 jo 00402671
00402545 . |8BF0 mov esi, eax //esi加1
00402547 .^\E9 63FFFFFF jmp 004024AF //继续循环
0040254C > 69FF 96740100 imul edi, edi, 17496 //将得到的edi值乘以0x17496 (即得到注册码)
00402552 . 0F80 19010000 jo 00402671
00402558 . 897D D8 mov [ebp-28], edi
0040255B . DB45 D8 fild dword ptr [ebp-28]
0040255E . DD9D 14FFFFFF fstp qword ptr [ebp-EC] //将所得值存入 [ebp-ec]
00402564 . 8B4D DC mov ecx, [ebp-24]
00402567 . 51 push ecx //将输入的注册码压栈
00402568 . FF15 80104000 call [<&MSVBVM60.__vbaR8Str>] //将输入的注册码放入FPU栈寄存器顶
0040256E . DC9D 14FFFFFF fcomp qword ptr [ebp-EC] //将FPU栈寄存器顶的用户输入的注册码与正确注册码比较
00402574 . DFE0 fstsw ax //将状态寄存器值给ax
00402576 . F6C4 40 test ah, 40 //若不相等ax为0100,ah为01;若相等ax 为1000,ah为10
00402579 0F84 86000000 je 00402605 //ah为0则错误跳转
所以注册码算法为:
edi=1;
i=1;
while(i<=strlen(name))
edi+=name[i]*i;
edi*=0x17496;
edi就为注册码.
本人也是个新菜鸟,上面可能有很多错误,如果有错请高手指正,谢谢!
|
能力值:
( LV8,RANK:130 )
|
-
-
5 楼
谢谢楼上:)帅呆了你
|