纪念被K掉的 (第12队)CrackMe by jackeyqiu 之注册算法及过程的简单分析 目标来源地:http://bbs.pediy.com/showthread.php?t=46894
下载来源的:http://bbs.pediy.com/attachment.php?attachmentid=6418&d=1182658427 先看激活按钮的界面事件:
》》》》》》
0045AAB4 /. 55 push ebp ; 方格点击
0045AAB5 |. 8BEC mov ebp, esp
0045AAB7 |. 6A 00 push 0
0045AAB9 |. 6A 00 push 0
0045AABB |. 53 push ebx
0045AABC |. 56 push esi
0045AABD |. 57 push edi
0045AABE |. 8BD8 mov ebx, eax
0045AAC0 |. 8B7D 08 mov edi, dword ptr [ebp+8]
0045AAC3 |. 8B75 0C mov esi, dword ptr [ebp+C]
0045AAC6 |. 33C0 xor eax, eax
0045AAC8 |. 55 push ebp
0045AAC9 |. 68 99AC4500 push CrackMe.0045AC99
0045AACE |. 64:FF30 push dword ptr fs:[eax]
0045AAD1 |. 64:8920 mov dword ptr fs:[eax], esp
0045AAD4 |. 8BCF mov ecx, edi
0045AAD6 |. 8BD6 mov edx, esi
0045AAD8 |. 8BC3 mov eax, ebx
0045AADA |. E8 35020000 call CrackMe.0045AD14 ; 得到点击位置
0045AADF |. 8D55 F8 lea edx, dword ptr [ebp-8]
0045AAE2 |. E8 01D2FAFF call CrackMe.00407CE8
0045AAE7 |. 8B4D F8 mov ecx, dword ptr [ebp-8]
0045AAEA |. 8D45 FC lea eax, dword ptr [ebp-4]
0045AAED |. BA B4AC4500 mov edx, CrackMe.0045ACB4 ; ASCII "Region:"
0045AAF2 |. E8 6196FAFF call CrackMe.00404158
0045AAF7 |. 8B45 FC mov eax, dword ptr [ebp-4]
0045AAFA |. 50 push eax
0045AAFB |. 8B83 38030000 mov eax, dword ptr [ebx+338]
0045AB01 |. 8B80 08020000 mov eax, dword ptr [eax+208]
0045AB07 |. BA 01000000 mov edx, 1
0045AB0C |. E8 8333FDFF call CrackMe.0042DE94
0045AB11 |. 5A pop edx
0045AB12 |. E8 D932FDFF call CrackMe.0042DDF0
0045AB17 |. 83BB 90030000 09 cmp dword ptr [ebx+390], 9 ; 点击次数与9比较
0045AB1E |. 7F 20 jg short CrackMe.0045AB40 ; 大于跳
0045AB20 |. 8BCF mov ecx, edi
0045AB22 |. 8BD6 mov edx, esi
0045AB24 |. 8BC3 mov eax, ebx
0045AB26 |. E8 E9010000 call CrackMe.0045AD14
0045AB2B |. 8B93 90030000 mov edx, dword ptr [ebx+390]
0045AB31 |. 898493 4C030000 mov dword ptr [ebx+edx*4+34C], eax
0045AB38 |. FF83 90030000 inc dword ptr [ebx+390]
0045AB3E |. EB 3E jmp short CrackMe.0045AB7E
0045AB40 |> C783 90030000 01>mov dword ptr [ebx+390], 1
0045AB4A |. B8 01000000 mov eax, 1
0045AB4F |> 33D2 /xor edx, edx
0045AB51 |. 899483 4C030000 |mov dword ptr [ebx+eax*4+34C], edx
0045AB58 |. 40 |inc eax
0045AB59 |. 83F8 0A |cmp eax, 0A
0045AB5C |.^ 75 F1 \jnz short CrackMe.0045AB4F
0045AB5E |. 8B83 38030000 mov eax, dword ptr [ebx+338]
0045AB64 |. 8B80 08020000 mov eax, dword ptr [eax+208]
0045AB6A |. BA 02000000 mov edx, 2
0045AB6F |. E8 2033FDFF call CrackMe.0042DE94
0045AB74 |. BA C4AC4500 mov edx, CrackMe.0045ACC4 ; ASCII "Wrong, Click again"
0045AB79 |. E8 7232FDFF call CrackMe.0042DDF0
0045AB7E |> 8B83 50030000 mov eax, dword ptr [ebx+350] ; 第1次点击位置数
0045AB84 |. 0383 54030000 add eax, dword ptr [ebx+354] ; 第1次点击位置数 + 第2次点击位置数
0045AB8A |. 83F8 09 cmp eax, 9 ; =9
0045AB8D 0F85 EB000000 jnz CrackMe.0045AC7E ; 便OK了!!!!!!!
0045AB93 |. 8B83 58030000 mov eax, dword ptr [ebx+358] ; 第3次点击位置数
0045AB99 |. 0383 5C030000 add eax, dword ptr [ebx+35C] ; 第3次点击位置数 + 第4次点击位置数
0045AB9F |. 83F8 09 cmp eax, 9 ; =9
0045ABA2 0F85 D6000000 jnz CrackMe.0045AC7E ; 便OK了!!!!!!!
0045ABA8 |. 8B83 60030000 mov eax, dword ptr [ebx+360] ; 第5次点击位置数
0045ABAE |. 0383 64030000 add eax, dword ptr [ebx+364] ; 第5次点击位置数 + 第6次点击位置数
0045ABB4 |. 83F8 09 cmp eax, 9 ; =9
0045ABB7 0F85 C1000000 jnz CrackMe.0045AC7E ; 便OK了!!!!!!!
0045ABBD |. 8B83 68030000 mov eax, dword ptr [ebx+368] ; 第7次点击位置数
0045ABC3 |. 0383 6C030000 add eax, dword ptr [ebx+36C] ; 第7次点击位置数 + 第8次点击位置数
0045ABC9 |. 83F8 09 cmp eax, 9 ; =9
0045ABCC 0F85 AC000000 jnz CrackMe.0045AC7E ; 便OK了!!!!!!!
0045ABD2 |. 83BB 70030000 09 cmp dword ptr [ebx+370], 9 ; 第9次点击位置数 = 9
0045ABD9 0F85 9F000000 jnz CrackMe.0045AC7E ; 便OK了!!!!!!!
0045ABDF |. B2 01 mov dl, 1
0045ABE1 |. 8B83 10030000 mov eax, dword ptr [ebx+310]
0045ABE7 |. 8B08 mov ecx, dword ptr [eax]
0045ABE9 |. FF51 64 call dword ptr [ecx+64]
0045ABEC |. B2 01 mov dl, 1
0045ABEE |. 8B83 14030000 mov eax, dword ptr [ebx+314]
0045ABF4 |. E8 DFE2FDFF call CrackMe.00438ED8
0045ABF9 |. B2 01 mov dl, 1
0045ABFB |. 8B83 18030000 mov eax, dword ptr [ebx+318]
0045AC01 |. E8 D2E2FDFF call CrackMe.00438ED8
0045AC06 |. B2 01 mov dl, 1
0045AC08 |. 8B83 1C030000 mov eax, dword ptr [ebx+31C]
0045AC0E |. E8 C5E2FDFF call CrackMe.00438ED8
0045AC13 |. B2 01 mov dl, 1
0045AC15 |. 8B83 20030000 mov eax, dword ptr [ebx+320]
0045AC1B |. E8 B8E2FDFF call CrackMe.00438ED8
0045AC20 |. B2 01 mov dl, 1
0045AC22 |. 8B83 24030000 mov eax, dword ptr [ebx+324]
0045AC28 |. E8 ABE2FDFF call CrackMe.00438ED8
0045AC2D |. B2 01 mov dl, 1
0045AC2F |. 8B83 28030000 mov eax, dword ptr [ebx+328]
0045AC35 |. E8 9EE2FDFF call CrackMe.00438ED8
0045AC3A |. B2 01 mov dl, 1
0045AC3C |. 8B83 2C030000 mov eax, dword ptr [ebx+32C]
0045AC42 |. E8 91E2FDFF call CrackMe.00438ED8
0045AC47 |. B2 01 mov dl, 1
0045AC49 |. 8B83 30030000 mov eax, dword ptr [ebx+330]
0045AC4F |. E8 84E2FDFF call CrackMe.00438ED8
0045AC54 |. B2 01 mov dl, 1
0045AC56 |. 8B83 34030000 mov eax, dword ptr [ebx+334]
0045AC5C |. E8 77E2FDFF call CrackMe.00438ED8
0045AC61 |. 8B83 38030000 mov eax, dword ptr [ebx+338]
0045AC67 |. 8B80 08020000 mov eax, dword ptr [eax+208]
0045AC6D |. 33D2 xor edx, edx
0045AC6F |. E8 2032FDFF call CrackMe.0042DE94
0045AC74 |. BA E0AC4500 mov edx, CrackMe.0045ACE0 ; ASCII "Hint: Enter the PassWord by clicking
these buttons."
0045AC79 |. E8 7231FDFF call CrackMe.0042DDF0
0045AC7E |> 33C0 xor eax, eax
0045AC80 |. 5A pop edx
0045AC81 |. 59 pop ecx
0045AC82 |. 59 pop ecx
0045AC83 |. 64:8910 mov dword ptr fs:[eax], edx
0045AC86 |. 68 A0AC4500 push CrackMe.0045ACA0
0045AC8B |> 8D45 F8 lea eax, dword ptr [ebp-8]
0045AC8E |. BA 02000000 mov edx, 2
0045AC93 |. E8 D891FAFF call CrackMe.00403E70
0045AC98 \. C3 retn
》》》》》》 通过上面的分析,知道了要满足下面的过程:
1。第一次点击的框数加上第二次点击的框数之和必须等于9;
1。第三次点击的框数加上第四次点击的框数之和必须等于9;
1。第五次点击的框数加上第六次点击的框数之和必须等于9;
1。第七次点击的框数加上第八次点击的框数之和必须等于9;
1。第九次点击的框数必须是第9个(界面最右下角的)框的区域。 再看,激活显示按钮后,点击CrackMe按钮的算法事件:
》》》》》》
0045BAD4 /. 55 push ebp ; crackme.click
0045BAD5 |. 8BEC mov ebp, esp
0045BAD7 |. 83C4 AC add esp, -54
0045BADA |. 53 push ebx
0045BADB |. 56 push esi
0045BADC |. 57 push edi
0045BADD |. 33C9 xor ecx, ecx
0045BADF |. 894D B0 mov dword ptr [ebp-50], ecx
0045BAE2 |. 894D AC mov dword ptr [ebp-54], ecx
0045BAE5 |. 894D B8 mov dword ptr [ebp-48], ecx
0045BAE8 |. 894D B4 mov dword ptr [ebp-4C], ecx
0045BAEB |. 894D C0 mov dword ptr [ebp-40], ecx
0045BAEE |. 894D BC mov dword ptr [ebp-44], ecx
0045BAF1 |. 894D C4 mov dword ptr [ebp-3C], ecx
0045BAF4 |. 8945 FC mov dword ptr [ebp-4], eax
0045BAF7 |. 33C0 xor eax, eax
0045BAF9 |. 55 push ebp
0045BAFA |. 68 BFBC4500 push CrackMe.0045BCBF
0045BAFF |. 64:FF30 push dword ptr fs:[eax]
0045BB02 |. 64:8920 mov dword ptr fs:[eax], esp
0045BB05 |. 8D55 C4 lea edx, dword ptr [ebp-3C]
0045BB08 |. 8B45 FC mov eax, dword ptr [ebp-4]
0045BB0B |. 8B80 00030000 mov eax, dword ptr [eax+300]
0045BB11 |. E8 A2D4FDFF call CrackMe.00438FB8
0045BB16 |. 8B45 C4 mov eax, dword ptr [ebp-3C] ; 注册码 -> eax
0045BB19 |. E8 EE85FAFF call CrackMe.0040410C ; 取注册码长度
0045BB1E |. 83F8 09 cmp eax, 9 ; 注册码长度与9比较
0045BB21 |. 0F85 E6000000 jnz CrackMe.0045BC0D ; 相等,不跳
0045BB27 |. BF 01000000 mov edi, 1
0045BB2C |. 8D45 D4 lea eax, dword ptr [ebp-2C]
0045BB2F |. 8945 F8 mov dword ptr [ebp-8], eax
0045BB32 |> BE 01000000 /mov esi, 1
0045BB37 |. 8B45 F8 |mov eax, dword ptr [ebp-8] ; eax := $12F634;
0045BB3A |. 8BD8 |mov ebx, eax
0045BB3C |> 8BC7 |/mov eax, edi ; eax := 1;
0045BB3E |. 48 ||dec eax ; eax := ecx - 1;; Switch (cases 1..3)
0045BB3F |. 74 0B ||je short CrackMe.0045BB4C ; 为0,跳
0045BB41 |. 48 ||dec eax ; eax := eax - 1;
0045BB42 |. 74 38 ||je short CrackMe.0045BB7C ; 为0,跳
0045BB44 |. 48 ||dec eax ; eax := eax - 1;
0045BB45 |. 74 66 ||je short CrackMe.0045BBAD ; 为0,跳
0045BB47 |. E9 92000000 ||jmp CrackMe.0045BBDE
0045BB4C |> 8D45 C0 ||lea eax, dword ptr [ebp-40] ; eax := $12F620;; Case 1 of switch 0045BB3E
0045BB4F |. 50 ||push eax
0045BB50 |. 8D55 BC ||lea edx, dword ptr [ebp-44]
0045BB53 |. 8B45 FC ||mov eax, dword ptr [ebp-4]
0045BB56 |. 8B80 00030000 ||mov eax, dword ptr [eax+300]
0045BB5C |. E8 57D4FDFF ||call CrackMe.00438FB8
0045BB61 |. 8B45 BC ||mov eax, dword ptr [ebp-44] ; 注册码 -> eax
0045BB64 |. B9 01000000 ||mov ecx, 1
0045BB69 |. 8BD6 ||mov edx, esi
0045BB6B |. E8 FC87FAFF ||call CrackMe.0040436C
0045BB70 |. 8B45 C0 ||mov eax, dword ptr [ebp-40]
0045BB73 |. E8 ACC2FAFF ||call CrackMe.00407E24
0045BB78 |. 8903 ||mov dword ptr [ebx], eax
0045BB7A |. EB 74 ||jmp short CrackMe.0045BBF0
0045BB7C |> 8D45 B8 ||lea eax, dword ptr [ebp-48] ; eax := $12F618;; Case 2 of switch 0045BB3E
0045BB7F |. 50 ||push eax
0045BB80 |. 8D55 B4 ||lea edx, dword ptr [ebp-4C]
0045BB83 |. 8B45 FC ||mov eax, dword ptr [ebp-4]
0045BB86 |. 8B80 00030000 ||mov eax, dword ptr [eax+300]
0045BB8C |. E8 27D4FDFF ||call CrackMe.00438FB8
0045BB91 |. 8B45 B4 ||mov eax, dword ptr [ebp-4C] ; 注册码 -> eax
0045BB94 |. 8D56 03 ||lea edx, dword ptr [esi+3]
0045BB97 |. B9 01000000 ||mov ecx, 1
0045BB9C |. E8 CB87FAFF ||call CrackMe.0040436C
0045BBA1 |. 8B45 B8 ||mov eax, dword ptr [ebp-48]
0045BBA4 |. E8 7BC2FAFF ||call CrackMe.00407E24
0045BBA9 |. 8903 ||mov dword ptr [ebx], eax
0045BBAB |. EB 43 ||jmp short CrackMe.0045BBF0
0045BBAD |> 8D45 B0 ||lea eax, dword ptr [ebp-50] ; eax := $12F610;; Case 3 of switch 0045BB3E
0045BBB0 |. 50 ||push eax
0045BBB1 |. 8D55 AC ||lea edx, dword ptr [ebp-54]
0045BBB4 |. 8B45 FC ||mov eax, dword ptr [ebp-4]
0045BBB7 |. 8B80 00030000 ||mov eax, dword ptr [eax+300]
0045BBBD |. E8 F6D3FDFF ||call CrackMe.00438FB8
0045BBC2 |. 8B45 AC ||mov eax, dword ptr [ebp-54] ; 注册码 -> eax
0045BBC5 |. 8D56 06 ||lea edx, dword ptr [esi+6]
0045BBC8 |. B9 01000000 ||mov ecx, 1
0045BBCD |. E8 9A87FAFF ||call CrackMe.0040436C
0045BBD2 |. 8B45 B0 ||mov eax, dword ptr [ebp-50]
0045BBD5 |. E8 4AC2FAFF ||call CrackMe.00407E24
0045BBDA |. 8903 ||mov dword ptr [ebx], eax
0045BBDC |. EB 12 ||jmp short CrackMe.0045BBF0
0045BBDE |> B8 D8BC4500 ||mov eax, CrackMe.0045BCD8 ; ASCII "Program Error!"; Default case of
switch 0045BB3E
0045BBE3 |. E8 70C2FCFF ||call CrackMe.00427E58
0045BBE8 |. 8B45 FC ||mov eax, dword ptr [ebp-4]
0045BBEB |. E8 089AFFFF ||call CrackMe.004555F8
0045BBF0 |> 46 ||inc esi ; esi := esi + 1;
0045BBF1 |. 83C3 04 ||add ebx, 4
0045BBF4 |. 83FE 04 ||cmp esi, 4 ; = 4 ?
0045BBF7 |.^ 0F85 3FFFFFFF |\jnz CrackMe.0045BB3C ; 不等于,循环
0045BBFD |. 47 |inc edi ; edi := edi - 1;
0045BBFE |. 8345 F8 0C |add dword ptr [ebp-8], 0C ; [ebp-8] := [ebp-8] + $C;
0045BC02 |. 83FF 04 |cmp edi, 4
0045BC05 |.^ 0F85 27FFFFFF \jnz CrackMe.0045BB32
0045BC0B |. EB 13 jmp short CrackMe.0045BC20
0045BC0D |> 8B45 FC mov eax, dword ptr [ebp-4]
0045BC10 |. 8B80 4C030000 mov eax, dword ptr [eax+34C]
0045BC16 |. BA F0BC4500 mov edx, CrackMe.0045BCF0 ; ASCII "Failed!"
0045BC1B |. E8 C8D3FDFF call CrackMe.00438FE8
0045BC20 |> 6B45 D4 63 imul eax, dword ptr [ebp-2C], 63 ; eax := 注册码弟1位 * $63;
0045BC24 |. 8B55 D8 mov edx, dword ptr [ebp-28] ; edx := 注册码弟2位;
0045BC27 |. 8D14D2 lea edx, dword ptr [edx+edx*8] ; edx := [edx + edx * $8];
0045BC2A |. 03C2 add eax, edx ; eax := eax + edx;
0045BC2C |. 8B55 DC mov edx, dword ptr [ebp-24] ; edx := 注册码弟3位;
0045BC2F |. 03C2 add eax, edx ; eax := eax + edx;
0045BC31 |. 8945 C8 mov dword ptr [ebp-38], eax ; //[ebp-38] := eax;
0045BC34 |. 6B45 E0 63 imul eax, dword ptr [ebp-20], 63 ; eax := 注册码弟4位 * $63;
0045BC38 |. 8B55 E4 mov edx, dword ptr [ebp-1C] ; edx := 注册码弟5位;
0045BC3B |. 8D14D2 lea edx, dword ptr [edx+edx*8] ; edx := [edx + edx * $8];
0045BC3E |. 03C2 add eax, edx ; eax := eax + edx;
0045BC40 |. 8B55 E8 mov edx, dword ptr [ebp-18] ; edx := 注册码弟6位;
0045BC43 |. 03C2 add eax, edx ; eax := eax + edx;
0045BC45 |. 8945 CC mov dword ptr [ebp-34], eax ; //[ebp-34] := eax;
0045BC48 |. 6B45 EC 63 imul eax, dword ptr [ebp-14], 63 ; eax := 注册码弟7位 * $63;
0045BC4C |. 8B55 F0 mov edx, dword ptr [ebp-10] ; edx := 注册码弟8位;
0045BC4F |. 8D14D2 lea edx, dword ptr [edx+edx*8] ; edx := [edx + edx * $8];
0045BC52 |. 03C2 add eax, edx ; eax := eax + edx;
0045BC54 |. 8B55 F4 mov edx, dword ptr [ebp-C] ; edx := 注册码弟9位;
0045BC57 |. 03C2 add eax, edx ; eax := eax + edx;
0045BC59 |. 8945 D0 mov dword ptr [ebp-30], eax ; //[ebp-30] := eax;
0045BC5C |. 8B45 C8 mov eax, dword ptr [ebp-38] ; eax := [ebp-38];
0045BC5F |. 0345 CC add eax, dword ptr [ebp-34] ; eax := eax + [ebp-34];
0045BC62 |. 0345 D0 add eax, dword ptr [ebp-30] ; eax := eax + [ebp-30];
0045BC65 |. 3D E7030000 cmp eax, 3E7 ; eax = 3E7 ???
0045BC6A 75 15 jnz short CrackMe.0045BC81 ; 相等,便OK了!
0045BC6C |. 8B45 FC mov eax, dword ptr [ebp-4]
0045BC6F |. 8B80 4C030000 mov eax, dword ptr [eax+34C]
0045BC75 |. BA 00BD4500 mov edx, CrackMe.0045BD00 ; ASCII "Succeed!"
0045BC7A |. E8 69D3FDFF call CrackMe.00438FE8
0045BC7F |. EB 23 jmp short CrackMe.0045BCA4
0045BC81 |> 8B45 FC mov eax, dword ptr [ebp-4]
0045BC84 |. 8B80 4C030000 mov eax, dword ptr [eax+34C]
0045BC8A |. BA F0BC4500 mov edx, CrackMe.0045BCF0 ; ASCII "Failed!"
0045BC8F |. E8 54D3FDFF call CrackMe.00438FE8
0045BC94 |. 8B45 FC mov eax, dword ptr [ebp-4]
0045BC97 |. 8B80 00030000 mov eax, dword ptr [eax+300]
0045BC9D |. 33D2 xor edx, edx
0045BC9F |. E8 44D3FDFF call CrackMe.00438FE8
0045BCA4 |> 33C0 xor eax, eax
0045BCA6 |. 5A pop edx
0045BCA7 |. 59 pop ecx
0045BCA8 |. 59 pop ecx
0045BCA9 |. 64:8910 mov dword ptr fs:[eax], edx
0045BCAC |. 68 C6BC4500 push CrackMe.0045BCC6
0045BCB1 |> 8D45 AC lea eax, dword ptr [ebp-54]
0045BCB4 |. BA 07000000 mov edx, 7
0045BCB9 |. E8 B281FAFF call CrackMe.00403E70
0045BCBE \. C3 retn
》》》》》》 通过上面分析,知道了算法为三大步:
1。取注册码的的一位数,乘上十六进制数63;取注册码的的二位数,乘上十六进制数9;两者相加的结果,再加上注册码的的三位数;
2。取注册码的的四位数,乘上十六进制数63;取注册码的的五位数,乘上十六进制数9;两者相加的结果,再加上注册码的的六位数;
3。取注册码的的七位数,乘上十六进制数63;取注册码的的八位数,乘上十六进制数9;两者相加的结果,再加上注册码的的九位数;
4。将上面的3个结果在累加后,其结果等于十六进制的3E7,即十进制的999,便注册成功了。
用delphi+KOL表示,为如下代码:
》》》》》》
//穷举
function QJ(cz : integer): integer;
var
eax, edx, ebp_30, ebp_34, ebp_38 : integer;
code : string;
begin
code := int2str(cz);
eax := (ord(code[1])-$30) * $63;
edx := (ord(code[2])-$30) + (ord(code[2])-$30) * $8;
eax := eax + edx;
edx := (ord(code[3])-$30);
eax := eax + edx;
ebp_38 := eax; //showmessage(int2hex(eax,8));
eax := (ord(code[4])-$30) * $63;
edx := (ord(code[5])-$30) + (ord(code[5])-$30) * $8;
eax := eax + edx;
edx := (ord(code[6])-$30);
eax := eax + edx;
ebp_34 := eax;
eax := (ord(code[7])-$30) * $63;
edx := (ord(code[8])-$30) + (ord(code[8])-$30) * $8;
eax := eax + edx;
edx := (ord(code[9])-$30);
eax := eax + edx;
ebp_30 := eax;
result := ebp_30 + ebp_34 + ebp_38; //=3E7,便OK了!
end;
//****************************************************************************//
procedure TForm1.ButtonRegClick(Sender: PObj);
var
i, czI : integer;
begin
for i:= 111111111 to 999999999 do
begin
czI := i;
if QJ(czI) = $3E7
then Edit2.Text := int2Str(czI)
else if ProgressBar.Progress < 9
then ProgressBar.Progress := ProgressBar.Progress + 1
else ProgressBar.Progress := 0;
end;
end;
//****************************************************************************//
》》》》》》 2007-06-24 17:53
重新写了一个会让人海扁的keygen,和源代码一起放到了附件中,呵呵~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: