Reverse/cerebellum_xyzero_keygenme/solve.md
2024-11-12 12:59:28 +08:00

255 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

计算serial
因为serial是根据name、当前计算机名和用户名计算这里就不提供示例name,serial了
相关算法:
```c#
public static void CalcSerial(string name, string computerName, string userName)
{
int v8 = 0x1791117;
int v18 = name.Length;
int v4 = 0;
int vc = 0;
int esi;
int eax = 0x20;
string cuu = ReverseString(computerName + userName).ToUpper();
if (v18 < 4)
return;
foreach (char c in name)
{
v4 += c + v8++;
}
esi = v18 * v4 + v8;
foreach (char c in cuu)
{
vc += (c ^ eax++) * v18;
}
// long serial; 这块是原先的比较逻辑
// serial ^=vc;
// vc+=esi;
// if(vc == serial)
Console.WriteLine((vc + esi) ^ vc);
}
```
细节:
```assembly
0040112E | 55 | push ebp | Check
0040112F | 8BEC | mov ebp,esp |
00401131 | 81EC 30010000 | sub esp,130 |
00401137 | 8A15 14314000 | mov dl,byte ptr ds:[403114] |
0040113D | 53 | push ebx |
0040113E | 56 | push esi |
0040113F | 57 | push edi |
00401140 | 33C0 | xor eax,eax |
00401142 | 8D7D D1 | lea edi,dword ptr ss:[ebp-2F] |
00401145 | 8855 D0 | mov byte ptr ss:[ebp-30],dl |
00401148 | 6A 07 | push 7 |
0040114A | AB | stosd |
0040114B | AB | stosd |
0040114C | AB | stosd |
0040114D | AB | stosd |
0040114E | AB | stosd |
0040114F | 66:AB | stosw |
00401151 | AA | stosb |
00401152 | 5B | pop ebx |
00401153 | 33C0 | xor eax,eax |
00401155 | 8BCB | mov ecx,ebx |
00401157 | 8D7D B1 | lea edi,dword ptr ss:[ebp-4F] |
0040115A | 8855 B0 | mov byte ptr ss:[ebp-50],dl |
0040115D | 6A 0F | push F |
0040115F | F3:AB | rep stosd |
00401161 | 66:AB | stosw |
00401163 | AA | stosb |
00401164 | 59 | pop ecx |
00401165 | 33C0 | xor eax,eax |
00401167 | 8DBD D1FEFFFF | lea edi,dword ptr ss:[ebp-12F] |
0040116D | 8895 D0FEFFFF | mov byte ptr ss:[ebp-130],dl |
00401173 | F3:AB | rep stosd |
00401175 | 66:AB | stosw |
00401177 | AA | stosb |
00401178 | 6A 0F | push F |
0040117A | 33C0 | xor eax,eax |
0040117C | 59 | pop ecx |
0040117D | 8DBD 11FFFFFF | lea edi,dword ptr ss:[ebp-EF] |
00401183 | 8895 10FFFFFF | mov byte ptr ss:[ebp-F0],dl |
00401189 | 8855 90 | mov byte ptr ss:[ebp-70],dl |
0040118C | F3:AB | rep stosd |
0040118E | 66:AB | stosw |
00401190 | AA | stosb |
00401191 | 8BCB | mov ecx,ebx |
00401193 | 33C0 | xor eax,eax |
00401195 | 8D7D 91 | lea edi,dword ptr ss:[ebp-6F] |
00401198 | 8895 50FFFFFF | mov byte ptr ss:[ebp-B0],dl |
0040119E | F3:AB | rep stosd |
004011A0 | 66:AB | stosw |
004011A2 | AA | stosb |
004011A3 | 8BCB | mov ecx,ebx |
004011A5 | 33C0 | xor eax,eax |
004011A7 | 8DBD 51FFFFFF | lea edi,dword ptr ss:[ebp-AF] |
004011AD | 8895 70FFFFFF | mov byte ptr ss:[ebp-90],dl |
004011B3 | F3:AB | rep stosd |
004011B5 | 66:AB | stosw |
004011B7 | AA | stosb |
004011B8 | 8BCB | mov ecx,ebx |
004011BA | 33C0 | xor eax,eax |
004011BC | 8DBD 71FFFFFF | lea edi,dword ptr ss:[ebp-8F] |
004011C2 | 8365 FC 00 | and dword ptr ss:[ebp-4],0 |
004011C6 | F3:AB | rep stosd |
004011C8 | 66:AB | stosw |
004011CA | 8365 F4 00 | and dword ptr ss:[ebp-C],0 | [ebp-0C]:__except_handler4
004011CE | 6A 18 | push 18 |
004011D0 | AA | stosb |
004011D1 | 8D45 D0 | lea eax,dword ptr ss:[ebp-30] |
004011D4 | BF E8030000 | mov edi,3E8 |
004011D9 | 50 | push eax |
004011DA | 57 | push edi |
004011DB | FF75 08 | push dword ptr ss:[ebp+8] |
004011DE | BE FF000000 | mov esi,FF |
004011E3 | C745 F8 17117901 | mov dword ptr ss:[ebp-8],1791117 | val
004011EA | 8975 EC | mov dword ptr ss:[ebp-14],esi |
004011ED | 8975 F0 | mov dword ptr ss:[ebp-10],esi |
004011F0 | FF15 74204000 | call dword ptr ds:[<GetDlgItemTextA>] |
004011F6 | 8D45 D0 | lea eax,dword ptr ss:[ebp-30] | Name
004011F9 | 50 | push eax |
004011FA | E8 83010000 | call <JMP.&_strlen> |
004011FF | 83F8 04 | cmp eax,4 |
00401202 | 59 | pop ecx |
00401203 | 8945 E8 | mov dword ptr ss:[ebp-18],eax | name.length
00401206 | 73 22 | jae keygenme2.cerebellum.xyzero.40122 | n.l >=4
00401208 | 8B35 78204000 | mov esi,dword ptr ds:[<SetDlgItemText | Fail
0040120E | 6A 00 | push 0 |
00401210 | 68 E9030000 | push 3E9 |
00401215 | FF75 08 | push dword ptr ss:[ebp+8] |
00401218 | FFD6 | call esi |
0040121A | 68 14314000 | push keygenme2.cerebellum.xyzero.4031 |
0040121F | 57 | push edi |
00401220 | FF75 08 | push dword ptr ss:[ebp+8] |
00401223 | FFD6 | call esi |
00401225 | E9 50010000 | jmp keygenme2.cerebellum.xyzero.40137 |
0040122A | 33C9 | xor ecx,ecx |
0040122C | 85C0 | test eax,eax |
0040122E | 76 13 | jbe keygenme2.cerebellum.xyzero.40124 |
00401230 | 0FBE540D D0 | movsx edx,byte ptr ss:[ebp+ecx-30] |
00401235 | 0355 F8 | add edx,dword ptr ss:[ebp-8] | ebp-8 初始值0x1791117
00401238 | 0155 FC | add dword ptr ss:[ebp-4],edx | 累加
0040123B | FF45 F8 | inc dword ptr ss:[ebp-8] |
0040123E | 41 | inc ecx |
0040123F | 3BC8 | cmp ecx,eax |
00401241 | 72 ED | jb keygenme2.cerebellum.xyzero.401230 |
00401243 | 8BF0 | mov esi,eax |
00401245 | 8D45 EC | lea eax,dword ptr ss:[ebp-14] |
00401248 | 0FAF75 FC | imul esi,dword ptr ss:[ebp-4] | n.l * 累加值
0040124C | 0375 F8 | add esi,dword ptr ss:[ebp-8] | +=前面的0x17911*** (v1
0040124F | 50 | push eax |
00401250 | 8D85 50FFFFFF | lea eax,dword ptr ss:[ebp-B0] | pc name
00401256 | 50 | push eax |
00401257 | FF15 18204000 | call dword ptr ds:[<GetComputerNameA> |
0040125D | 8B1D 7C204000 | mov ebx,dword ptr ds:[<wsprintfA>] |
00401263 | 8D85 50FFFFFF | lea eax,dword ptr ss:[ebp-B0] |
00401269 | 50 | push eax | eax:"CHENX221-VMDBG" (ex)
0040126A | BF 00314000 | mov edi,keygenme2.cerebellum.xyzero.4 | 403100:"%s"
0040126F | 8D85 D0FEFFFF | lea eax,dword ptr ss:[ebp-130] | pc name
00401275 | 57 | push edi |
00401276 | 50 | push eax |
00401277 | FFD3 | call ebx |
00401279 | 83C4 0C | add esp,C |
0040127C | 8D45 F0 | lea eax,dword ptr ss:[ebp-10] |
0040127F | 50 | push eax |
00401280 | 8D85 70FFFFFF | lea eax,dword ptr ss:[ebp-90] | username
00401286 | 50 | push eax |
00401287 | FF15 00204000 | call dword ptr ds:[<GetUserNameA>] |
0040128D | 8D85 70FFFFFF | lea eax,dword ptr ss:[ebp-90] |
00401293 | 50 | push eax | eax:"x221" (ex)
00401294 | 8D85 10FFFFFF | lea eax,dword ptr ss:[ebp-F0] | ↑
0040129A | 57 | push edi |
0040129B | 50 | push eax |
0040129C | FFD3 | call ebx |
0040129E | 83C4 0C | add esp,C |
004012A1 | 8D85 10FFFFFF | lea eax,dword ptr ss:[ebp-F0] |
004012A7 | 50 | push eax |
004012A8 | 8D85 D0FEFFFF | lea eax,dword ptr ss:[ebp-130] |
004012AE | 50 | push eax |
004012AF | FF15 10204000 | call dword ptr ds:[<lstrcatA>] | 拼接 pcname+username
004012B5 | 8D85 D0FEFFFF | lea eax,dword ptr ss:[ebp-130] |
004012BB | 50 | push eax |
004012BC | E8 C1000000 | call <JMP.&_strlen> |
004012C1 | 8BF8 | mov edi,eax |
004012C3 | 33C0 | xor eax,eax |
004012C5 | 85FF | test edi,edi |
004012C7 | 59 | pop ecx |
004012C8 | 76 16 | jbe keygenme2.cerebellum.xyzero.4012E |
004012CA | 8D8C3D CFFEFFFF | lea ecx,dword ptr ss:[ebp+edi-131] | 翻转合并结果
004012D1 | 8A11 | mov dl,byte ptr ds:[ecx] |
004012D3 | 889405 10FFFFFF | mov byte ptr ss:[ebp+eax-F0],dl |
004012DA | 40 | inc eax |
004012DB | 49 | dec ecx |
004012DC | 3BC7 | cmp eax,edi |
004012DE | 72 F1 | jb keygenme2.cerebellum.xyzero.4012D1 |
004012E0 | 8D85 10FFFFFF | lea eax,dword ptr ss:[ebp-F0] |
004012E6 | 50 | push eax |
004012E7 | FF15 80204000 | call dword ptr ds:[<CharUpperA>] | 转大写
004012ED | 85FF | test edi,edi |
004012EF | 76 28 | jbe keygenme2.cerebellum.xyzero.40131 |
004012F1 | 6A 20 | push 20 |
004012F3 | 8D8D 10FFFFFF | lea ecx,dword ptr ss:[ebp-F0] |
004012F9 | 58 | pop eax |
004012FA | 2BC8 | sub ecx,eax |
004012FC | 894D FC | mov dword ptr ss:[ebp-4],ecx |
004012FF | EB 03 | jmp keygenme2.cerebellum.xyzero.40130 |
00401301 | 8B4D FC | mov ecx,dword ptr ss:[ebp-4] |
00401304 | 0FBE0C01 | movsx ecx,byte ptr ds:[ecx+eax] | 取出每位
00401308 | 33C8 | xor ecx,eax | 每位 xor eax(初始0x20)
0040130A | 0FAF4D E8 | imul ecx,dword ptr ss:[ebp-18] | *=n.l
0040130E | 014D F4 | add dword ptr ss:[ebp-C],ecx | 存储结果
00401311 | 40 | inc eax |
00401312 | 8D48 E0 | lea ecx,dword ptr ds:[eax-20] |
00401315 | 3BCF | cmp ecx,edi |
00401317 | 72 E8 | jb keygenme2.cerebellum.xyzero.401301 |
00401319 | 8D45 B0 | lea eax,dword ptr ss:[ebp-50] |
0040131C | 6A 24 | push 24 |
0040131E | BF E9030000 | mov edi,3E9 |
00401323 | 50 | push eax |
00401324 | 57 | push edi |
00401325 | FF75 08 | push dword ptr ss:[ebp+8] |
00401328 | FF15 74204000 | call dword ptr ds:[<GetDlgItemTextA>] |
0040132E | 8D45 B0 | lea eax,dword ptr ss:[ebp-50] | Serial
00401331 | 50 | push eax |
00401332 | FF15 48204000 | call dword ptr ds:[<atol>] | str2long
00401338 | 59 | pop ecx |
00401339 | 8BC8 | mov ecx,eax | long result
0040133B | 8B45 F4 | mov eax,dword ptr ss:[ebp-C] | 上一步的结果
0040133E | 33C8 | xor ecx,eax | serial xor 上一步结果
00401340 | 03C6 | add eax,esi | eax+=v1
00401342 | 3BC1 | cmp eax,ecx | 最后的比较
00401344 | 74 0E | je <keygenme2.cerebellum.xyzero.Succe |
00401346 | 6A 00 | push 0 | Fail
00401348 | 57 | push edi |
00401349 | FF75 08 | push dword ptr ss:[ebp+8] |
0040134C | FF15 78204000 | call dword ptr ds:[<SetDlgItemTextA>] |
00401352 | EB 26 | jmp keygenme2.cerebellum.xyzero.40137 |
00401354 | 8D45 D0 | lea eax,dword ptr ss:[ebp-30] |
00401357 | 50 | push eax |
00401358 | 8D45 90 | lea eax,dword ptr ss:[ebp-70] |
0040135B | 68 F0304000 | push keygenme2.cerebellum.xyzero.4030 | 4030F0:"Good job %s!!!"
00401360 | 50 | push eax |
00401361 | FFD3 | call ebx |
00401363 | 83C4 0C | add esp,C |
00401366 | 8D45 90 | lea eax,dword ptr ss:[ebp-70] |
00401369 | 6A 00 | push 0 |
0040136B | 68 EC304000 | push keygenme2.cerebellum.xyzero.4030 | 4030EC:"OK!"
00401370 | 50 | push eax |
00401371 | FF75 08 | push dword ptr ss:[ebp+8] |
00401374 | FF15 84204000 | call dword ptr ds:[<MessageBoxA>] |
0040137A | 6A 01 | push 1 |
0040137C | 58 | pop eax |
0040137D | 5F | pop edi |
0040137E | 5E | pop esi |
0040137F | 5B | pop ebx |
00401380 | C9 | leave |
00401381 | C3 | ret |
```