227 lines
16 KiB
Markdown
227 lines
16 KiB
Markdown
计算serial
|
||
|
||
算法可简化为:
|
||
|
||
```c#
|
||
private static string? GenerateKey(string name)
|
||
{
|
||
return $" {(name[0] + name[^1]) * 0xF423F}";
|
||
}
|
||
```
|
||
|
||
详细信息:
|
||
|
||
```assembly
|
||
004044E0 | 55 | push ebp | CheckSerial
|
||
004044E1 | 8BEC | mov ebp,esp |
|
||
...
|
||
...
|
||
00404552 | FF92 0C030000 | call dword ptr ds:[edx+30C] |
|
||
00404558 | 8B1D 38104000 | mov ebx,dword ptr ds:[<__vbaObjSet>] |
|
||
0040455E | 50 | push eax |
|
||
0040455F | 8D45 CC | lea eax,dword ptr ss:[ebp-34] |
|
||
00404562 | 50 | push eax |
|
||
00404563 | FFD3 | call ebx |
|
||
00404565 | 8B08 | mov ecx,dword ptr ds:[eax] |
|
||
00404567 | 8D55 D4 | lea edx,dword ptr ss:[ebp-2C] | [ebp-2C]:Name
|
||
0040456A | 52 | push edx |
|
||
0040456B | 50 | push eax |
|
||
0040456C | 8985 44FFFFFF | mov dword ptr ss:[ebp-BC],eax |
|
||
00404572 | FF91 A0000000 | call dword ptr ds:[ecx+A0] |
|
||
00404578 | 3BC7 | cmp eax,edi |
|
||
0040457A | DBE2 | fnclex |
|
||
0040457C | 7D 18 | jge bjcm10b.404596 |
|
||
0040457E | 8B8D 44FFFFFF | mov ecx,dword ptr ss:[ebp-BC] |
|
||
00404584 | 68 A0000000 | push A0 |
|
||
00404589 | 68 00304000 | push bjcm10b.403000 |
|
||
0040458E | 51 | push ecx |
|
||
0040458F | 50 | push eax |
|
||
00404590 | FF15 2C104000 | call dword ptr ds:[<__vbaHresultCheckObj>] |
|
||
00404596 | 8B55 D4 | mov edx,dword ptr ss:[ebp-2C] |
|
||
00404599 | 52 | push edx |
|
||
0040459A | FF15 10104000 | call dword ptr ds:[<__vbaLenBstr>] |
|
||
004045A0 | 33C9 | xor ecx,ecx |
|
||
004045A2 | 83F8 02 | cmp eax,2 | Name长度检查
|
||
004045A5 | 0F9CC1 | setl cl |
|
||
004045A8 | F7D9 | neg ecx |
|
||
004045AA | 898D 3CFFFFFF | mov dword ptr ss:[ebp-C4],ecx |
|
||
004045B0 | 8D4D D4 | lea ecx,dword ptr ss:[ebp-2C] |
|
||
004045B3 | FF15 D0104000 | call dword ptr ds:[<__vbaFreeStr>] |
|
||
004045B9 | 8D4D CC | lea ecx,dword ptr ss:[ebp-34] |
|
||
004045BC | FF15 D4104000 | call dword ptr ds:[<__vbaFreeObj>] |
|
||
004045C2 | 66:39BD 3CFFFFFF | cmp word ptr ss:[ebp-C4],di |
|
||
004045C9 | 0F84 8B000000 | je bjcm10b.40465A |
|
||
...(长度不满足要求)
|
||
...
|
||
0040465A | 8B0E | mov ecx,dword ptr ds:[esi] |
|
||
0040465C | 56 | push esi |
|
||
0040465D | FF91 0C030000 | call dword ptr ds:[ecx+30C] |
|
||
00404663 | 8D55 CC | lea edx,dword ptr ss:[ebp-34] |
|
||
00404666 | 50 | push eax |
|
||
00404667 | 52 | push edx |
|
||
00404668 | FFD3 | call ebx |
|
||
0040466A | 8B06 | mov eax,dword ptr ds:[esi] |
|
||
0040466C | 56 | push esi |
|
||
0040466D | FF90 0C030000 | call dword ptr ds:[eax+30C] |
|
||
00404673 | 8D4D C8 | lea ecx,dword ptr ss:[ebp-38] |
|
||
00404676 | 50 | push eax |
|
||
00404677 | 51 | push ecx |
|
||
00404678 | FFD3 | call ebx |
|
||
0040467A | 8B45 CC | mov eax,dword ptr ss:[ebp-34] |
|
||
0040467D | 8D55 B8 | lea edx,dword ptr ss:[ebp-48] |
|
||
00404680 | 8945 C0 | mov dword ptr ss:[ebp-40],eax |
|
||
00404683 | 6A 01 | push 1 |
|
||
00404685 | 8D45 A8 | lea eax,dword ptr ss:[ebp-58] |
|
||
00404688 | 52 | push edx |
|
||
00404689 | 50 | push eax |
|
||
0040468A | 897D CC | mov dword ptr ss:[ebp-34],edi |
|
||
0040468D | C745 B8 09000000 | mov dword ptr ss:[ebp-48],9 | 09:'\t'
|
||
00404694 | FF15 B4104000 | call dword ptr ds:[<Ordinal#617>] |
|
||
0040469A | 8B45 C8 | mov eax,dword ptr ss:[ebp-38] |
|
||
0040469D | 8D4D 98 | lea ecx,dword ptr ss:[ebp-68] |
|
||
004046A0 | 6A 01 | push 1 |
|
||
004046A2 | 8D55 88 | lea edx,dword ptr ss:[ebp-78] |
|
||
004046A5 | 51 | push ecx |
|
||
004046A6 | 52 | push edx |
|
||
004046A7 | 897D C8 | mov dword ptr ss:[ebp-38],edi |
|
||
004046AA | 8945 A0 | mov dword ptr ss:[ebp-60],eax |
|
||
004046AD | C745 98 09000000 | mov dword ptr ss:[ebp-68],9 | 09:'\t'
|
||
004046B4 | FF15 C0104000 | call dword ptr ds:[<Ordinal#619>] |
|
||
004046BA | 8B3D 80104000 | mov edi,dword ptr ds:[<__vbaStrVarVal>] |
|
||
004046C0 | 8D45 88 | lea eax,dword ptr ss:[ebp-78] |
|
||
004046C3 | 8D4D D0 | lea ecx,dword ptr ss:[ebp-30] |
|
||
004046C6 | 50 | push eax |
|
||
004046C7 | 51 | push ecx |
|
||
004046C8 | FFD7 | call edi |
|
||
004046CA | 50 | push eax |
|
||
004046CB | FF15 24104000 | call dword ptr ds:[<Ordinal#516>] | 和下面那块一样,取Name的头尾字符
|
||
004046D1 | 66:8BD0 | mov dx,ax |
|
||
004046D4 | 8D45 A8 | lea eax,dword ptr ss:[ebp-58] |
|
||
004046D7 | 8D4D D4 | lea ecx,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
004046DA | 50 | push eax |
|
||
004046DB | 51 | push ecx |
|
||
004046DC | 66:8995 26FFFFFF | mov word ptr ss:[ebp-DA],dx |
|
||
004046E3 | FFD7 | call edi |
|
||
004046E5 | 50 | push eax |
|
||
004046E6 | FF15 24104000 | call dword ptr ds:[<Ordinal#516>] |
|
||
004046EC | 66:8B95 26FFFFFF | mov dx,word ptr ss:[ebp-DA] |
|
||
004046F3 | 8D4D D8 | lea ecx,dword ptr ss:[ebp-28] |
|
||
004046F6 | 66:03D0 | add dx,ax | 两字符相加
|
||
004046F9 | C785 78FFFFFF 020000 | mov dword ptr ss:[ebp-88],2 |
|
||
00404703 | 0F80 94030000 | jo <bjcm10b.ErrOverflow> |
|
||
00404709 | 66:8955 80 | mov word ptr ss:[ebp-80],dx |
|
||
0040470D | 8D95 78FFFFFF | lea edx,dword ptr ss:[ebp-88] |
|
||
00404713 | FF15 08104000 | call dword ptr ds:[<__vbaVarMove>] |
|
||
...
|
||
...
|
||
00404751 | 83C4 2C | add esp,2C |
|
||
00404754 | 8D55 D8 | lea edx,dword ptr ss:[ebp-28] | vb var
|
||
00404757 | 8D85 78FFFFFF | lea eax,dword ptr ss:[ebp-88] |
|
||
0040475D | 8D4D B8 | lea ecx,dword ptr ss:[ebp-48] |
|
||
00404760 | 52 | push edx |
|
||
00404761 | 50 | push eax |
|
||
00404762 | 51 | push ecx |
|
||
00404763 | C745 80 3F420F00 | mov dword ptr ss:[ebp-80],F423F |
|
||
0040476A | C785 78FFFFFF 030000 | mov dword ptr ss:[ebp-88],3 |
|
||
00404774 | FF15 6C104000 | call dword ptr ds:[<__vbaVarMul>] | 前面相加结果*0xF423F
|
||
0040477A | 50 | push eax |
|
||
0040477B | FF15 AC104000 | call dword ptr ds:[<__vbaI4Var>] |
|
||
00404781 | 8B16 | mov edx,dword ptr ds:[esi] | esi:"冈]"
|
||
00404783 | 56 | push esi | esi:"冈]"
|
||
00404784 | 8945 E8 | mov dword ptr ss:[ebp-18],eax |
|
||
00404787 | FF92 FC020000 | call dword ptr ds:[edx+2FC] |
|
||
0040478D | 50 | push eax |
|
||
0040478E | 8D45 CC | lea eax,dword ptr ss:[ebp-34] |
|
||
00404791 | 50 | push eax |
|
||
00404792 | FFD3 | call ebx |
|
||
00404794 | 8BF8 | mov edi,eax |
|
||
00404796 | 8D55 D4 | lea edx,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
00404799 | 52 | push edx |
|
||
0040479A | 57 | push edi |
|
||
0040479B | 8B0F | mov ecx,dword ptr ds:[edi] |
|
||
0040479D | FF91 A0000000 | call dword ptr ds:[ecx+A0] |
|
||
004047A3 | 85C0 | test eax,eax |
|
||
004047A5 | DBE2 | fnclex |
|
||
004047A7 | 7D 12 | jge bjcm10b.4047BB |
|
||
004047A9 | 68 A0000000 | push A0 |
|
||
004047AE | 68 00304000 | push bjcm10b.403000 |
|
||
004047B3 | 57 | push edi |
|
||
004047B4 | 50 | push eax |
|
||
004047B5 | FF15 2C104000 | call dword ptr ds:[<__vbaHresultCheckObj>] |
|
||
004047BB | 8B45 D4 | mov eax,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
004047BE | 50 | push eax | eax:Serial
|
||
004047BF | 68 B0304000 | push bjcm10b.4030B0 | Sorry, try again!
|
||
004047C4 | FF15 58104000 | call dword ptr ds:[<__vbaStrCmp>] | 没用的检查
|
||
004047CA | 8BF8 | mov edi,eax |
|
||
004047CC | 8D4D D4 | lea ecx,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
004047CF | F7DF | neg edi |
|
||
004047D1 | 1BFF | sbb edi,edi |
|
||
004047D3 | 47 | inc edi |
|
||
004047D4 | F7DF | neg edi |
|
||
004047D6 | FF15 D0104000 | call dword ptr ds:[<__vbaFreeStr>] |
|
||
004047DC | 8D4D CC | lea ecx,dword ptr ss:[ebp-34] |
|
||
004047DF | FF15 D4104000 | call dword ptr ds:[<__vbaFreeObj>] |
|
||
004047E5 | 66:85FF | test di,di |
|
||
004047E8 | 0F84 81000000 | je bjcm10b.40486F |
|
||
...
|
||
...
|
||
0040486F | 8B0E | mov ecx,dword ptr ds:[esi] | esi:"冈]"
|
||
00404871 | 8D45 E8 | lea eax,dword ptr ss:[ebp-18] | 前面相乘的结果
|
||
00404874 | 56 | push esi | esi:"冈]"
|
||
00404875 | 8945 80 | mov dword ptr ss:[ebp-80],eax |
|
||
00404878 | C785 78FFFFFF 034000 | mov dword ptr ss:[ebp-88],4003 |
|
||
00404882 | FF91 FC020000 | call dword ptr ds:[ecx+2FC] |
|
||
00404888 | 8D55 CC | lea edx,dword ptr ss:[ebp-34] |
|
||
0040488B | 50 | push eax |
|
||
0040488C | 52 | push edx |
|
||
0040488D | FFD3 | call ebx |
|
||
0040488F | 8BF0 | mov esi,eax | esi:"冈]"
|
||
00404891 | 8D4D D4 | lea ecx,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
00404894 | 51 | push ecx |
|
||
00404895 | 56 | push esi | esi:"冈]"
|
||
00404896 | 8B06 | mov eax,dword ptr ds:[esi] | esi:"冈]"
|
||
00404898 | FF90 A0000000 | call dword ptr ds:[eax+A0] |
|
||
0040489E | 85C0 | test eax,eax |
|
||
004048A0 | DBE2 | fnclex |
|
||
004048A2 | 7D 12 | jge bjcm10b.4048B6 |
|
||
004048A4 | 68 A0000000 | push A0 |
|
||
004048A9 | 68 00304000 | push bjcm10b.403000 |
|
||
004048AE | 56 | push esi | esi:"冈]"
|
||
004048AF | 50 | push eax |
|
||
004048B0 | FF15 2C104000 | call dword ptr ds:[<__vbaHresultCheckObj>] |
|
||
004048B6 | 8D95 78FFFFFF | lea edx,dword ptr ss:[ebp-88] |
|
||
004048BC | 52 | push edx |
|
||
004048BD | FF15 84104000 | call dword ptr ds:[<Ordinal#536>] |
|
||
004048C3 | 8BD0 | mov edx,eax |
|
||
004048C5 | 8D4D D0 | lea ecx,dword ptr ss:[ebp-30] |
|
||
004048C8 | FF15 BC104000 | call dword ptr ds:[<__vbaStrMove>] |
|
||
004048CE | 50 | push eax |
|
||
004048CF | 8B45 D4 | mov eax,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
004048D2 | 50 | push eax |
|
||
004048D3 | FF15 58104000 | call dword ptr ds:[<__vbaStrCmp>] | 比较输入的Serial与正确Serial
|
||
004048D9 | 8BF0 | mov esi,eax | esi:"冈]"
|
||
004048DB | 8D4D D4 | lea ecx,dword ptr ss:[ebp-2C] | [ebp-2C]:"冈]"
|
||
004048DE | F7DE | neg esi | esi:"冈]"
|
||
004048E0 | 1BF6 | sbb esi,esi | esi:"冈]"
|
||
004048E2 | 8D55 D0 | lea edx,dword ptr ss:[ebp-30] |
|
||
004048E5 | 51 | push ecx |
|
||
004048E6 | 46 | inc esi | esi:"冈]"
|
||
004048E7 | 52 | push edx |
|
||
004048E8 | 6A 02 | push 2 |
|
||
004048EA | F7DE | neg esi | esi:"冈]"
|
||
004048EC | FF15 9C104000 | call dword ptr ds:[<__vbaFreeStrList>] |
|
||
004048F2 | 83C4 0C | add esp,C |
|
||
004048F5 | 8D4D CC | lea ecx,dword ptr ss:[ebp-34] |
|
||
004048F8 | FF15 D4104000 | call dword ptr ds:[<__vbaFreeObj>] |
|
||
004048FE | 8B3D 34104000 | mov edi,dword ptr ds:[<__vbaBoolStr>] |
|
||
00404904 | 68 00314000 | push bjcm10b.403100 | 403100:L"False"
|
||
00404909 | FFD7 | call edi |
|
||
0040490B | 66:3BF0 | cmp si,ax |
|
||
0040490E | 0F85 81000000 | jne bjcm10b.404995 |
|
||
...(错误的Serial)
|
||
...
|
||
00404995 | 68 10314000 | push bjcm10b.403110 | 403110:L"True"
|
||
...(正确)
|
||
```
|
||
|