// mmedx:=length(str)-startIndex;
// while (mmedx>=0) and (str[])
// if mmedx>=0 then
// begin
// inc mmedx;
// mmeax:=startIndex;
// repeat
// inc(mmeax);
// dec(mmedx);
// until str[mmeax]=mmebx;//mmebx=arg3
// end;
// 分析知道实际是从startIndex查找arg3的索引
//123456789012345678901234567890123456789012345678901234567890
1234567890123456789012345678901234567890123456789012345678901234
// 1 2 3 4 5 6 7
//123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE
F0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABC
//JDqpBkLvn8Cm0HYIr1KQMSagURlieFAEb3jd7N4zwZoOGyxu6T2fstchVP9X5W
wNC3OHDlm1efyqzcbM4GrZjP9TQ7gk2ov8F0IitXSJaAEBYxKunVL5Uhs6pRWd
//这个字符串有一定特殊性由0-9,a-z,A-Z的乱序组合
//共(26+26+10)*2=124个字符,
// *
//===========================================================
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044CF33(C)
|
:0044CF24 8B4DFC mov ecx, dword ptr [ebp-04]
:0044CF27 3A5C01FF cmp bl, byte ptr [ecx+eax-01]
:0044CF2B 7504 jne 0044CF31
:0044CF2D 8BF0 mov esi, eax===>作为输出
:0044CF2F EB04 jmp 0044CF35
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044CF2B(C)
|
:0044CF31 40 inc eax
:0044CF32 4A dec edx
:0044CF33 75EF jne 0044CF24
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0044CF1F(C), :0044CF2F(U)
|
:0044CF35 33C0 xor eax, eax
:0044CF37 5A pop edx
:0044CF38 59 pop ecx
:0044CF39 59 pop ecx
:0044CF3A 648910 mov dword ptr fs:[eax], edx
:0044CF3D 6852CF4400 push 0044CF52
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044CF50(U)
|
:0044CF42 8D45FC lea eax, dword ptr [ebp-04]
:0044CF45 E81A6CFBFF call 00403B64
:0044CF4A C3 ret
//===============================================
//eax=str,ecx=startindex,edx=num
//
//function sub_0044CEEC(const str,startindex,num):integer;
// len:=length(str)-startindex
// if len>=0 then
// begin
// inc(len);
// if (str[startindex])<>0
//
// end;
// edi=$33;
// 1. eax:=MagicStr;ecx=edi;edx:=code[1];
// 2. eax:=MagicStr;ecx=edi;edx:=code[2];
// 3. eax:=MagicStr;ecx=edi;edx:=code[3];
// 4. eax:=MagicStr;ecx=edi;edx:=code[4];
// 5. eax:=MagicStr;ecx=edi;edx:=code[5];
// 6. eax:=MagicStr;ecx=edi;edx:=code[6];
// 6轮完毕;然后做:0044D56D E8426BFBFF call 004040B4
// 输出edi,ebx为后面所用
// edi:=esi*10;ebx=累加和-$33
// edi=lenCode*10;ebx=lenCode;//才是正确的注册码
//处理长度
//
//
//for index:=1 to lenCode do
//begin
//
// eax:=MagicStr;ecx=??(edi)??;edx:=code[index*3+3+1];
//end
//==================================================
:0044D4C7 8BD8 mov ebx, eax
:0044D4C9 83EB33 sub ebx, 00000033
:0044D4CC 8BC3 mov eax, ebx
:0044D4CE 03C0 add eax, eax
:0044D4D0 8D0480 lea eax, dword ptr [eax+4*eax]
:0044D4D3 8BD8 mov ebx, eax
:0044D4D5 8B45FC mov eax, dword ptr [ebp-04]
:0044D4D8 8A5001 mov dl, byte ptr [eax+01]
:0044D4DB B933000000 mov ecx, 00000033
:0044D4E0 8B45F8 mov eax, dword ptr [ebp-08]
:0044D4E3 E804FAFFFF call 0044CEEC
:0044D4E8 03D8 add ebx, eax
:0044D4EA 83EB33 sub ebx, 00000033
:0044D4ED 8BC3 mov eax, ebx
:0044D4EF 03C0 add eax, eax
:0044D4F1 8D0480 lea eax, dword ptr [eax+4*eax]
:0044D4F4 8BD8 mov ebx, eax
:0044D4F6 8B45FC mov eax, dword ptr [ebp-04]
:0044D4F9 8A5002 mov dl, byte ptr [eax+02]
:0044D4FC B933000000 mov ecx, 00000033
:0044D501 8B45F8 mov eax, dword ptr [ebp-08]
:0044D504 E8E3F9FFFF call 0044CEEC
:0044D509 03D8 add ebx, eax
:0044D50B 83EB33 sub ebx, 00000033
:0044D50E 8BF3 mov esi, ebx===========>>>>
:0044D510 8B45FC mov eax, dword ptr [ebp-04]
:0044D513 8A5003 mov dl, byte ptr [eax+03]
:0044D516 8BCF mov ecx, edi
:0044D518 8B45F8 mov eax, dword ptr [ebp-08]
:0044D51B E8CCF9FFFF call 0044CEEC
:0044D520 8BD8 mov ebx, eax
:0044D522 83EB33 sub ebx, 00000033
:0044D525 8BC3 mov eax, ebx
:0044D527 03C0 add eax, eax
:0044D529 8D0480 lea eax, dword ptr [eax+4*eax]
:0044D52C 8BD8 mov ebx, eax
:0044D52E 8B45FC mov eax, dword ptr [ebp-04]
:0044D531 8A5004 mov dl, byte ptr [eax+04]
:0044D534 8BCF mov ecx, edi
:0044D536 8B45F8 mov eax, dword ptr [ebp-08]
:0044D539 E8AEF9FFFF call 0044CEEC
:0044D53E 03D8 add ebx, eax
:0044D540 83EB33 sub ebx, 00000033
:0044D543 8BC3 mov eax, ebx
:0044D545 03C0 add eax, eax
:0044D547 8D0480 lea eax, dword ptr [eax+4*eax]
:0044D54A 8BD8 mov ebx, eax
:0044D54C 8B45FC mov eax, dword ptr [ebp-04]
:0044D54F 8A5005 mov dl, byte ptr [eax+05]
:0044D552 8BCF mov ecx, edi
:0044D554 8B45F8 mov eax, dword ptr [ebp-08]
:0044D557 E890F9FFFF call 0044CEEC
:0044D55C 03D8 add ebx, eax
:0044D55E 83EB33 sub ebx, 00000033
:0044D561 8BFE mov edi, esi==============>>>>
//===================================0 0 0 0 1 5
//求索引和;表示将检查的长度,分为: 十万 万位 千位 百位 十位 个位
// idx1 idx2 idx3 idx4 idx5 idx6
// 2 2 2 2 f h