From b3a531b8a0dc6c554f3e897b423d7d165dd57b8f Mon Sep 17 00:00:00 2001 From: Chenx221 Date: Mon, 25 Nov 2024 15:33:52 +0800 Subject: [PATCH] solved new crackme --- clone/RaedMe.txt | 31 ++ clone/clone.exe | Bin 0 -> 4608 bytes clone/keygen/sp_keygen.deps.json | 23 ++ clone/keygen/sp_keygen.dll | Bin 0 -> 8704 bytes clone/keygen/sp_keygen.exe | Bin 0 -> 138752 bytes clone/keygen/sp_keygen.runtimeconfig.json | 13 + clone/solve.md | 271 ++++++++++++++++++ clone/source/keygen1.sln | 163 +++++++++++ clone/source/sp_keygen/Program.cs | 206 +++++++++++++ .../Properties/Resources.Designer.cs | 63 ++++ .../sp_keygen/Properties/Resources.resx | 101 +++++++ .../sp_keygen/Properties/launchSettings.json | 8 + clone/source/sp_keygen/sp_keygen.csproj | 25 ++ 13 files changed, 904 insertions(+) create mode 100644 clone/RaedMe.txt create mode 100644 clone/clone.exe create mode 100644 clone/keygen/sp_keygen.deps.json create mode 100644 clone/keygen/sp_keygen.dll create mode 100644 clone/keygen/sp_keygen.exe create mode 100644 clone/keygen/sp_keygen.runtimeconfig.json create mode 100644 clone/solve.md create mode 100644 clone/source/keygen1.sln create mode 100644 clone/source/sp_keygen/Program.cs create mode 100644 clone/source/sp_keygen/Properties/Resources.Designer.cs create mode 100644 clone/source/sp_keygen/Properties/Resources.resx create mode 100644 clone/source/sp_keygen/Properties/launchSettings.json create mode 100644 clone/source/sp_keygen/sp_keygen.csproj diff --git a/clone/RaedMe.txt b/clone/RaedMe.txt new file mode 100644 index 0000000..a0a1780 --- /dev/null +++ b/clone/RaedMe.txt @@ -0,0 +1,31 @@ + +------ clone ------- + + +Author: haggar +Type: keygenme +Level: 2 + + +Objective: + +You must create working keygen. No patching!! + +Algorithm is simple and very clear, easy to understand, but I hope not dumb. First intend was to throw in some arrays which would bring need of bruting serial, but I tought that it would be extra job for nothing. Maybe in next version :) + + +About: + +This crackme is based on one FHCF template which I got from potsmoke and I thank him for sharing it with me. That is why I gave it name "clone". Altough from visual side crackme is same as template, algorithm is completly mine. + + + + + + + + + + + + diff --git a/clone/clone.exe b/clone/clone.exe new file mode 100644 index 0000000000000000000000000000000000000000..3125e08e92f091e1412eba362c978a3a1407a808 GIT binary patch literal 4608 zcmeHLZERCj7=CZJ;b0rLASkHl9r7Vj=3+rUMAL5T*vx<{10h5Mm-cpT>3W;{!3GiR z7z1G}fc^mzV+{V#D8?Uz5QDfea4TVk5TgVL0U@z46cu6?MySs@z3YZCkcc6g@GkFj z-jC;;^Pac&w)bw%l5LblMA^_(ifBJZCT@;*hE}A9KK12L+B>+baKBL1Rk$D+GNhQU z)#ysC|sf#=j&IQSc5+6`5+iiF_5SmDR`2nmGh) zh(xrkNcStILbQ(^1_90)f^mSjQGHRGM#osZ7|QrVnbR+BqShka(0vH;vm(HGyg#sQ zaf8=qKN$bp9SBo$1}>Z3v0^u+rZP;jD@jg{L3CmBmBzz+JG{r)1<~RCj(t&dcu&TM zxiOq!2kY>jdlEy+%H8U{*x~(^T?rlD>*-WaK9&p8+eFx9J0@@PCO3I+_C;3l$dwlF zaXHxpJ1m4j3{rn3g^2Dp;fICPR5m6pL~L^<%-}D$OzpDAF>*a42W`d;p5!44>bN=O zU^e z@>~%J-8A0OuYs^{bY`g3Xnm%qgD95!Y>n(UQZC)>4t}I^h`RiO(Rb$CcQ8bn|7AV>7ur#Y98f zAjy%1@zUAWJ!i$lt+rc7fQegOi2Wut?*Ex_>OTtqz&PLD$oqo%R}b#V6B8aWQ7I;} zuu1?X(@h1P*wU3~$zj#HPH!F+?Kz%LznvfA6u z<^DbE^>};z-C5h>?VsMA)fI2Qnqi5Z&12YkUpi@x4ZDLf%;0DMK7I=|1z&;9K9vn{ zx~Y3)${LZfoGB}x1s_E)amY!oR))t? zj^i5~r*NFkaTZ56$1;u;9IH6W9J4tR$6Vk8`Tuob{aB)v&>c`FiwlV&(ACf_&|T2a zp$DKxp%u`J&_AFw;Mpp1(>mgc8WolqiDC*bhWL@(ivJnx()U{RV zC~cv#kP%Z%UvQ3U7)p%_&hIo^HOnG3m8M!tbbWxg01tB>8Z987p~r+uBfV=TL~DgA zP4Sn6%vvSpp*Z(SE#1&`53T23rB91`=zYPSQ=-*-=xagN4D&TB)VDZw3iH*PkYTEN zX+$v$FG%#GP_0J&{d@JoH_J7jWe|;Zz)qhmT`Em>R0p*>`><5vSfDFWBZ5ZR3lPn9 zER5lyQtjhdhN`<>DDp=l_`W7@eaK|3Lvv^_Key($B5H*a^+#B*@*MNc$P!i8=BTxr zzKT|;dQ^?{&CgsC4~%>4KzT)J`O>mVPu0BH#O+dD@vW#;X^|Rj!B(T#4LU#s*ozUvTfl8`B7p{H<2M2Mm>VyfjA%<9l_OpXTuNnBNgk@Ac{Cd{ z*nb()ayYlsnS<}rm+3=#9-;mjrKFQWK3YMwq$1;^2x%0BEzx9X6rPE36(Vf(W%w%j z;Y*m4e(|3})$ppZT9gcKso;hv07hCIsL3G<_%Fx=%H!3gQtN0T*o--olN|ExT=6z; zHD`vfN5tkU_S&pr4e}(sB-c?sSa?}UHDq$kNau(0Jge#UyaN#dwT+<<@RDD{^Ko=F Rh_zUE*vZo8VSE1*`4i(U*R22m literal 0 HcmV?d00001 diff --git a/clone/keygen/sp_keygen.deps.json b/clone/keygen/sp_keygen.deps.json new file mode 100644 index 0000000..4ffd5aa --- /dev/null +++ b/clone/keygen/sp_keygen.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "sp_keygen/1.0.0": { + "runtime": { + "sp_keygen.dll": {} + } + } + } + }, + "libraries": { + "sp_keygen/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/clone/keygen/sp_keygen.dll b/clone/keygen/sp_keygen.dll new file mode 100644 index 0000000000000000000000000000000000000000..ee6d0d609c6855a6199e6bfd630b6410813a34f9 GIT binary patch literal 8704 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 literal 0 HcmV?d00001 diff --git a/clone/keygen/sp_keygen.exe b/clone/keygen/sp_keygen.exe new file mode 100644 index 0000000000000000000000000000000000000000..1b5442f193d3232b40b627c9bf194e1c6eb03cf9 GIT binary patch literal 138752 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 DHe@ca literal 0 HcmV?d00001 diff --git a/clone/keygen/sp_keygen.runtimeconfig.json b/clone/keygen/sp_keygen.runtimeconfig.json new file mode 100644 index 0000000..d784515 --- /dev/null +++ b/clone/keygen/sp_keygen.runtimeconfig.json @@ -0,0 +1,13 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/clone/solve.md b/clone/solve.md new file mode 100644 index 0000000..de991cc --- /dev/null +++ b/clone/solve.md @@ -0,0 +1,271 @@ +算serial + +先上一组可用密钥: + +``` +Name: chenx221 +Serial: 6237A3FB +``` + +检查逻辑(c#实现): + +未给出的自定义函数见keygen源码 + +```c# +public static bool Check(string user, string serial) +{ + if (!(CheckStrLen(serial, 8, 8) && CheckStrLen(user, 5, 0))) + return false; + + uint eax, ebx, ecx; + ushort cx; + byte cl, ch, dl = 0, bl; + byte[] userBytes, serialBytes; + + foreach (char c in user[4..]) + { + dl += (byte)c; + } + ecx = (uint)(dl << 24) | (uint)(dl << 16) | (uint)(dl << 8) | dl; + userBytes = Encoding.ASCII.GetBytes(user[..4]); + eax = BitConverter.ToUInt32(userBytes, 0); + ecx ^= eax; + ecx = BSwap(ecx); + ecx += 0x3022006; + ecx = BSwap(ecx); + ecx -= 0xDEADC0DE; + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) + 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) + 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) - 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) - 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + ecx ^= 0xEDB88320; + ecx = BSwap(ecx); + ecx += 0xD76AA478; + ecx = BSwap(ecx); + ecx -= 0xB00BFACE; + ecx = BSwap(ecx); + ecx += 0xBADBEEF; + ecx = BSwap(ecx); + ecx++; + ecx = BSwap(ecx); + ecx--; + ecx = BSwap(ecx); + ecx += eax; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); //true serial result + + serialBytes = ParseHstr(serial); + ebx = (uint)(serialBytes[0] * 0x10 + serialBytes[1]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x12) + 0x34); + ebx = bl; + eax = ebx; + eax <<= 8; + ebx = (uint)(serialBytes[2] * 0x10 + serialBytes[3]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x56) + 0x78); + ebx = bl; + eax += ebx; + eax <<= 8; + ebx = (uint)(serialBytes[4] * 0x10 + serialBytes[5]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x90) + 0xAB); + ebx = bl; + eax += ebx; + eax <<= 8; + ebx = (uint)(serialBytes[6] * 0x10 + serialBytes[7]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0xCD) + 0xEF); + ebx = bl; + eax += ebx; + eax = BSwap(eax); //user input serial result + return eax == ecx; //ecx<->ebx(crackme) +} +``` + +反向计算(c#实现): + +```c# +public static void CalcSerial(string user) +{ + ... + ... //这部分与Check相同,故省略 + ... + ecx = BSwap(ecx); //true serial result + + eax = BSwap(ecx); + int[] key = [0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]; + int keyIndex = key.Length - 1; + byte[] byteArray = new byte[4]; + for (int i = 3; i >= 0; i--) + { + byte temp = (byte)(eax & 0xFF); + temp = (byte)(temp - key[keyIndex--]); + temp = (byte)(temp ^ key[keyIndex--]); + byteArray[i] = temp; + eax >>= 8; + } + Console.WriteLine($"Serial: {BitConverter.ToString(byteArray).Replace("-", "")}"); +} +``` + +细节: + +```assembly +004011DB | 6A 19 | push 19 | event +004011DD | 68 9A304000 | push clone.40309A | 40309A:"123456" (serial) +004011E2 | 6A 66 | push 66 | +004011E4 | FF75 08 | push dword ptr ss:[ebp+8] | +004011E7 | E8 F4010000 | call | +004011EC | 83F8 08 | cmp eax,8 | serial length == 8 +004011EF | 0F85 A9010000 | jne | +004011F5 | 6A 1E | push 1E | +004011F7 | 68 7C304000 | push clone.40307C | 40307C:"chenx221" (user) +004011FC | 6A 65 | push 65 | +004011FE | FF75 08 | push dword ptr ss:[ebp+8] | +00401201 | E8 DA010000 | call | +00401206 | 83F8 05 | cmp eax,5 | user length >=5 +00401209 | 0F82 8F010000 | jb | +0040120F | 8D05 7C304000 | lea eax,dword ptr ds:[40307C] | user +00401215 | 8D48 04 | lea ecx,dword ptr ds:[eax+4] | user去前四位 +00401218 | 33D2 | xor edx,edx | +0040121A | 0211 | add dl,byte ptr ds:[ecx] | 累加user去前四位后每位asc(注意:dl) +0040121C | 41 | inc ecx | +0040121D | 8039 00 | cmp byte ptr ds:[ecx],0 | +00401220 | 75 F8 | jne clone.40121A | +00401222 | 33C9 | xor ecx,ecx | +00401224 | 8ACA | mov cl,dl | 上一步的结果(ex:ab) +00401226 | 8AEA | mov ch,dl | 上一步的结果 +00401228 | 0FC9 | bswap ecx | 1 +0040122A | 8ACA | mov cl,dl | +0040122C | 8AEA | mov ch,dl | (ex: ecx=abababab) +0040122E | 8B00 | mov eax,dword ptr ds:[eax] | user +00401230 | 33C8 | xor ecx,eax | abababab ^ user前四位(小端序 +00401232 | 0FC9 | bswap ecx | 2 +00401234 | 81C1 06200203 | add ecx,3022006 | +0040123A | 0FC9 | bswap ecx | 3 +0040123C | 81E9 DEC0ADDE | sub ecx,DEADC0DE | +00401242 | 0FC9 | bswap ecx | 4 +00401244 | FEC1 | inc cl | +00401246 | FEC5 | inc ch | +00401248 | 0FC9 | bswap ecx | 5 +0040124A | FEC9 | dec cl | +0040124C | FECD | dec ch | +0040124E | 0FC9 | bswap ecx | 6 +00401250 | 81F1 2083B8ED | xor ecx,EDB88320 | +00401256 | 0FC9 | bswap ecx | ... +00401258 | 81C1 78A46AD7 | add ecx,D76AA478 | +0040125E | 0FC9 | bswap ecx | +00401260 | 81E9 CEFA0BB0 | sub ecx,B00BFACE | +00401266 | 0FC9 | bswap ecx | +00401268 | 81C1 EFBEAD0B | add ecx,BADBEEF | +0040126E | 0FC9 | bswap ecx | +00401270 | 41 | inc ecx | +00401271 | 0FC9 | bswap ecx | +00401273 | 49 | dec ecx | +00401274 | 0FC9 | bswap ecx | +00401276 | 03C8 | add ecx,eax | 还是user +00401278 | 0FC9 | bswap ecx | +0040127A | 66:41 | inc cx | +0040127C | 0FC9 | bswap ecx | +0040127E | 66:41 | inc cx | +00401280 | 0FC9 | bswap ecx | +00401282 | 890D C8304000 | mov dword ptr ds:[4030C8],ecx | +00401288 | 33C9 | xor ecx,ecx | +0040128A | 8D05 9A304000 | lea eax,dword ptr ds:[40309A] | serial +00401290 | 33DB | xor ebx,ebx | 十六进制字符转实际数值 +00401292 | 8A18 | mov bl,byte ptr ds:[eax] | +00401294 | 80FB 00 | cmp bl,0 | +00401297 | 74 3A | je clone.4012D3 | serial读完了? +00401299 | 80FB 30 | cmp bl,30 | 30:'0' +0040129C | 0F82 FC000000 | jb | +004012A2 | 80FB 39 | cmp bl,39 | 39:'9' +004012A5 | 77 0D | ja clone.4012B4 | +004012A7 | 80EB 30 | sub bl,30 | 0~9数字处理部分(str2int) +004012AA | 8899 B8304000 | mov byte ptr ds:[ecx+4030B8], | +004012B0 | 40 | inc eax | +004012B1 | 41 | inc ecx | +004012B2 | EB DC | jmp clone.401290 | +004012B4 | 80FB 41 | cmp bl,41 | 41:'A' +004012B7 | 0F82 E1000000 | jb | +004012BD | 80FB 46 | cmp bl,46 | 46:'F' +004012C0 | 0F87 D8000000 | ja | +004012C6 | 80EB 37 | sub bl,37 | 只接受A~F +004012C9 | 8899 B8304000 | mov byte ptr ds:[ecx+4030B8], | A~F处理部分(str2int) +004012CF | 40 | inc eax | +004012D0 | 41 | inc ecx | +004012D1 | EB BD | jmp clone.401290 | +004012D3 | 33C0 | xor eax,eax | +004012D5 | 33DB | xor ebx,ebx | +004012D7 | 33C9 | xor ecx,ecx | 0 +004012D9 | 33D2 | xor edx,edx | +004012DB | 0FB699 B8304000 | movzx ebx,byte ptr ds:[ecx+40 | 读取第一位 +004012E2 | C1E3 04 | shl ebx,4 | <<4 +004012E5 | 41 | inc ecx | 1 +004012E6 | 0FB691 B8304000 | movzx edx,byte ptr ds:[ecx+40 | +004012ED | 03DA | add ebx,edx | +=第二位 +004012EF | 80F3 12 | xor bl,12 | +004012F2 | 80C3 34 | add bl,34 | +004012F5 | 81E3 FF000000 | and ebx,FF | +004012FB | 41 | inc ecx | 2 +004012FC | 03C3 | add eax,ebx | +004012FE | C1E0 08 | shl eax,8 | +00401301 | 0FB699 B8304000 | movzx ebx,byte ptr ds:[ecx+40 | +00401308 | C1E3 04 | shl ebx,4 | +0040130B | 41 | inc ecx | 3 +0040130C | 0FB691 B8304000 | movzx edx,byte ptr ds:[ecx+40 | +00401313 | 03DA | add ebx,edx | +00401315 | 80F3 56 | xor bl,56 | +00401318 | 80C3 78 | add bl,78 | +0040131B | 81E3 FF000000 | and ebx,FF | +00401321 | 41 | inc ecx | 4 +00401322 | 03C3 | add eax,ebx | +00401324 | C1E0 08 | shl eax,8 | +00401327 | 0FB699 B8304000 | movzx ebx,byte ptr ds:[ecx+40 | +0040132E | C1E3 04 | shl ebx,4 | +00401331 | 41 | inc ecx | 5 +00401332 | 0FB691 B8304000 | movzx edx,byte ptr ds:[ecx+40 | +00401339 | 03DA | add ebx,edx | +0040133B | 80F3 90 | xor bl,90 | +0040133E | 80C3 AB | add bl,AB | +00401341 | 81E3 FF000000 | and ebx,FF | +00401347 | 41 | inc ecx | 6 +00401348 | 03C3 | add eax,ebx | +0040134A | C1E0 08 | shl eax,8 | +0040134D | 0FB699 B8304000 | movzx ebx,byte ptr ds:[ecx+40 | +00401354 | C1E3 04 | shl ebx,4 | +00401357 | 41 | inc ecx | 7 +00401358 | 0FB691 B8304000 | movzx edx,byte ptr ds:[ecx+40 | +0040135F | 03DA | add ebx,edx | +00401361 | 80F3 CD | xor bl,CD | +00401364 | 80C3 EF | add bl,EF | +00401367 | 81E3 FF000000 | and ebx,FF | +0040136D | 41 | inc ecx | 8 +0040136E | 03C3 | add eax,ebx | +00401370 | 0FC8 | bswap eax | +00401372 | 8B1D C8304000 | mov ebx,dword ptr ds:[4030C8] | +00401378 | 3BD8 | cmp ebx,eax | eax是用户输入serial计算结果,ebx是正确的结果 +0040137A | 75 22 | jne | +0040137C | 6A 40 | push 40 | Success +0040137E | 68 50304000 | push clone.403050 | 403050:"Bravo!" +00401383 | 68 19304000 | push clone.403019 | 403019:"Well done! Now make good tutorial :)" +00401388 | 6A 00 | push 0 | +0040138A | E8 75000000 | call clone.401404 | +0040138F | 68 3E304000 | push clone.40303E | 40303E:"clone - defeated!" +00401394 | FF75 08 | push dword ptr ss:[ebp+8] | +00401397 | E8 86000000 | call | +0040139C | EB 00 | jmp | +0040139E | EB 15 | jmp clone.4013B5 | +``` \ No newline at end of file diff --git a/clone/source/keygen1.sln b/clone/source/keygen1.sln new file mode 100644 index 0000000..3f0a221 --- /dev/null +++ b/clone/source/keygen1.sln @@ -0,0 +1,163 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35303.130 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen1", "keygen1\keygen1.csproj", "{D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen2", "keygen2\keygen2.csproj", "{2446CB50-1882-4219-9DB0-E7F5517E6E20}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "keygen3", "keygen3\keygen3.csproj", "{BC47A6DE-7F9D-4D65-A996-69FB778C95F3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GiveMeSerial", "GiveMeSerial\GiveMeSerial.vcxproj", "{E3604156-7DF2-4B5F-AECA-64786B92F38C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DllInjector", "DllInjector\DllInjector.csproj", "{A5A24406-1296-457B-91A3-60E67511D807}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GetSerial", "GetSerial\GetSerial.vcxproj", "{85044A5C-C4A3-4C79-9AD5-6895F61F8515}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GuessSerial", "GuessSerial\GuessSerial.csproj", "{7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Validator", "Validator\Validator.csproj", "{6BE1ED72-6CA9-4442-B529-C867A9D6904C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FindKey", "FindKey\FindKey.csproj", "{D5E3C871-EA87-48E7-9287-E96B8410EB18}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sp_keygen", "sp_keygen\sp_keygen.csproj", "{D6614743-D01E-4899-A5E7-B4E45BD1B033}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x64.Build.0 = Debug|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x86.ActiveCfg = Debug|x86 + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Debug|x86.Build.0 = Debug|x86 + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|Any CPU.Build.0 = Release|Any CPU + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x64.ActiveCfg = Release|x64 + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x64.Build.0 = Release|x64 + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x86.ActiveCfg = Release|x86 + {D0E162E3-FC99-4405-BEE1-AB85D9D41DA9}.Release|x86.Build.0 = Release|x86 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x64.ActiveCfg = Debug|x64 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x64.Build.0 = Debug|x64 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x86.ActiveCfg = Debug|x86 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x86.Build.0 = Debug|x86 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|Any CPU.Build.0 = Release|Any CPU + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x64.ActiveCfg = Release|x64 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x64.Build.0 = Release|x64 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x86.ActiveCfg = Release|x86 + {2446CB50-1882-4219-9DB0-E7F5517E6E20}.Release|x86.Build.0 = Release|x86 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x64.ActiveCfg = Debug|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x64.Build.0 = Debug|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x86.ActiveCfg = Debug|x86 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Debug|x86.Build.0 = Debug|x86 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|Any CPU.Build.0 = Release|Any CPU + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x64.ActiveCfg = Release|x64 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x64.Build.0 = Release|x64 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x86.ActiveCfg = Release|x86 + {BC47A6DE-7F9D-4D65-A996-69FB778C95F3}.Release|x86.Build.0 = Release|x86 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|Any CPU.ActiveCfg = Debug|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|Any CPU.Build.0 = Debug|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x64.ActiveCfg = Debug|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x64.Build.0 = Debug|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x86.ActiveCfg = Debug|Win32 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Debug|x86.Build.0 = Debug|Win32 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|Any CPU.ActiveCfg = Release|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|Any CPU.Build.0 = Release|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x64.ActiveCfg = Release|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x64.Build.0 = Release|x64 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x86.ActiveCfg = Release|Win32 + {E3604156-7DF2-4B5F-AECA-64786B92F38C}.Release|x86.Build.0 = Release|Win32 + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|x64.ActiveCfg = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|x64.Build.0 = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|x86.ActiveCfg = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Debug|x86.Build.0 = Debug|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Release|Any CPU.Build.0 = Release|Any CPU + {A5A24406-1296-457B-91A3-60E67511D807}.Release|x64.ActiveCfg = Release|x64 + {A5A24406-1296-457B-91A3-60E67511D807}.Release|x64.Build.0 = Release|x64 + {A5A24406-1296-457B-91A3-60E67511D807}.Release|x86.ActiveCfg = Release|x86 + {A5A24406-1296-457B-91A3-60E67511D807}.Release|x86.Build.0 = Release|x86 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|Any CPU.ActiveCfg = Debug|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|Any CPU.Build.0 = Debug|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x64.ActiveCfg = Debug|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x64.Build.0 = Debug|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x86.ActiveCfg = Debug|Win32 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Debug|x86.Build.0 = Debug|Win32 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|Any CPU.ActiveCfg = Release|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|Any CPU.Build.0 = Release|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x64.ActiveCfg = Release|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x64.Build.0 = Release|x64 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x86.ActiveCfg = Release|Win32 + {85044A5C-C4A3-4C79-9AD5-6895F61F8515}.Release|x86.Build.0 = Release|Win32 + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x64.ActiveCfg = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x64.Build.0 = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x86.ActiveCfg = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Debug|x86.Build.0 = Debug|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|Any CPU.Build.0 = Release|Any CPU + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x64.ActiveCfg = Release|x64 + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x64.Build.0 = Release|x64 + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x86.ActiveCfg = Release|x86 + {7B2D3886-A213-4F99-89F7-D0D7DDAA97D9}.Release|x86.Build.0 = Release|x86 + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x64.ActiveCfg = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x64.Build.0 = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x86.ActiveCfg = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Debug|x86.Build.0 = Debug|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|Any CPU.Build.0 = Release|Any CPU + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x64.ActiveCfg = Release|x64 + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x64.Build.0 = Release|x64 + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x86.ActiveCfg = Release|x86 + {6BE1ED72-6CA9-4442-B529-C867A9D6904C}.Release|x86.Build.0 = Release|x86 + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x64.ActiveCfg = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x64.Build.0 = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x86.ActiveCfg = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Debug|x86.Build.0 = Debug|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|Any CPU.Build.0 = Release|Any CPU + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x64.ActiveCfg = Release|x64 + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x64.Build.0 = Release|x64 + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x86.ActiveCfg = Release|x86 + {D5E3C871-EA87-48E7-9287-E96B8410EB18}.Release|x86.Build.0 = Release|x86 + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|x64.ActiveCfg = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|x64.Build.0 = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|x86.ActiveCfg = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Debug|x86.Build.0 = Debug|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|Any CPU.Build.0 = Release|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|x64.ActiveCfg = Release|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|x64.Build.0 = Release|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|x86.ActiveCfg = Release|Any CPU + {D6614743-D01E-4899-A5E7-B4E45BD1B033}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {01ED3EE8-E89A-4A27-AF68-EF2490CB6BD7} + EndGlobalSection +EndGlobal diff --git a/clone/source/sp_keygen/Program.cs b/clone/source/sp_keygen/Program.cs new file mode 100644 index 0000000..f99ab19 --- /dev/null +++ b/clone/source/sp_keygen/Program.cs @@ -0,0 +1,206 @@ +using System.Globalization; +using System.Text; + +class Program +{ + static void Main() + { + //Check("chenx221", "12345678"); // debug + + Console.Write("Enter name: "); + string? name = Console.ReadLine(); + if (name == null) + throw new ArgumentNullException(nameof(name), "Name cannot be null."); + CalcSerial(name); + Console.ReadKey(); + } + + public static void CalcSerial(string user) + { + if (!CheckStrLen(user, 5, 0)) + throw new ArgumentException("Invalid user string length."); + + uint eax, ecx; + ushort cx; + byte cl, ch, dl = 0; + byte[] userBytes; + + foreach (char c in user[4..]) + { + dl += (byte)c; + } + ecx = (uint)(dl << 24) | (uint)(dl << 16) | (uint)(dl << 8) | dl; + userBytes = Encoding.ASCII.GetBytes(user[..4]); + eax = BitConverter.ToUInt32(userBytes, 0); + ecx ^= eax; + ecx = BSwap(ecx); + ecx += 0x3022006; + ecx = BSwap(ecx); + ecx -= 0xDEADC0DE; + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) + 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) + 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) - 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) - 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + ecx ^= 0xEDB88320; + ecx = BSwap(ecx); + ecx += 0xD76AA478; + ecx = BSwap(ecx); + ecx -= 0xB00BFACE; + ecx = BSwap(ecx); + ecx += 0xBADBEEF; + ecx = BSwap(ecx); + ecx++; + ecx = BSwap(ecx); + ecx--; + ecx = BSwap(ecx); + ecx += eax; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); //true serial result + + //开始反向计算Serial + eax = BSwap(ecx); + int[] key = [0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF]; + int keyIndex = key.Length - 1; + byte[] byteArray = new byte[4]; + for (int i = 3; i >= 0; i--) + { + byte temp = (byte)(eax & 0xFF); + temp = (byte)(temp - key[keyIndex--]); + temp = (byte)(temp ^ key[keyIndex--]); + byteArray[i] = temp; + eax >>= 8; + } + Console.WriteLine($"Serial: {BitConverter.ToString(byteArray).Replace("-", "")}"); + } + + public static bool Check(string user, string serial) + { + if (!(CheckStrLen(serial, 8, 8) && CheckStrLen(user, 5, 0))) + return false; + + uint eax, ebx, ecx; + ushort cx; + byte cl, ch, dl = 0, bl; + byte[] userBytes, serialBytes; + + foreach (char c in user[4..]) + { + dl += (byte)c; + } + ecx = (uint)(dl << 24) | (uint)(dl << 16) | (uint)(dl << 8) | dl; + userBytes = Encoding.ASCII.GetBytes(user[..4]); + eax = BitConverter.ToUInt32(userBytes, 0); + ecx ^= eax; + ecx = BSwap(ecx); + ecx += 0x3022006; + ecx = BSwap(ecx); + ecx -= 0xDEADC0DE; + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) + 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) + 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + cl = (byte)((ecx & 0xFF) - 1); + ecx = (ecx & 0xFFFFFF00) | cl; + ch = (byte)(((ecx >> 8) & 0xFF) - 1); + ecx = (ecx & 0xFFFF00FF) | ((uint)ch << 8); + ecx = BSwap(ecx); + ecx ^= 0xEDB88320; + ecx = BSwap(ecx); + ecx += 0xD76AA478; + ecx = BSwap(ecx); + ecx -= 0xB00BFACE; + ecx = BSwap(ecx); + ecx += 0xBADBEEF; + ecx = BSwap(ecx); + ecx++; + ecx = BSwap(ecx); + ecx--; + ecx = BSwap(ecx); + ecx += eax; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); + cx = (ushort)((ecx & 0xFFFF) + 1); + ecx = (ecx & 0xFFFF0000) | cx; + ecx = BSwap(ecx); //true serial result + + serialBytes = ParseHstr(serial); + ebx = (uint)(serialBytes[0] * 0x10 + serialBytes[1]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x12) + 0x34); + ebx = bl; + eax = ebx; + eax <<= 8; + ebx = (uint)(serialBytes[2] * 0x10 + serialBytes[3]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x56) + 0x78); + ebx = bl; + eax += ebx; + eax <<= 8; + ebx = (uint)(serialBytes[4] * 0x10 + serialBytes[5]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0x90) + 0xAB); + ebx = bl; + eax += ebx; + eax <<= 8; + ebx = (uint)(serialBytes[6] * 0x10 + serialBytes[7]); + bl = (byte)(ebx & 0xFF); + bl = (byte)((bl ^ 0xCD) + 0xEF); + ebx = bl; + eax += ebx; + eax = BSwap(eax); //user input serial result + return eax == ecx; //ecx<->ebx(crackme) + } + + public static string ReverseString(string input) + { + if (input == null) + throw new ArgumentNullException(nameof(input), "Input string cannot be null."); + return new string(input.Reverse().ToArray()); + } + + public static bool CheckStrLen(string input, int min, int max) + { + int l = input.Length; + if (min > 0 && l < min) + return false; + if (max > 0 && l > max) + return false; + return true; + } + + public static uint BSwap(uint value) + { + byte[] bytes = BitConverter.GetBytes(value); + Array.Reverse(bytes); + return BitConverter.ToUInt32(bytes, 0); + } + + public static byte[] ParseHstr(string hexString) + { + byte[] bytes = new byte[hexString.Length]; + for (int i = 0; i < hexString.Length; i++) + { + if (byte.TryParse(hexString[i].ToString(), NumberStyles.HexNumber, null, out byte value)) + bytes[i] = value; + else + throw new FormatException("Invalid hex string."); + } + return bytes; + } +} diff --git a/clone/source/sp_keygen/Properties/Resources.Designer.cs b/clone/source/sp_keygen/Properties/Resources.Designer.cs new file mode 100644 index 0000000..41461b5 --- /dev/null +++ b/clone/source/sp_keygen/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace sp_keygen.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("sp_keygen.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/clone/source/sp_keygen/Properties/Resources.resx b/clone/source/sp_keygen/Properties/Resources.resx new file mode 100644 index 0000000..4fdb1b6 --- /dev/null +++ b/clone/source/sp_keygen/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/clone/source/sp_keygen/Properties/launchSettings.json b/clone/source/sp_keygen/Properties/launchSettings.json new file mode 100644 index 0000000..d32d884 --- /dev/null +++ b/clone/source/sp_keygen/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "sp_keygen": { + "commandName": "Project", + "commandLineArgs": "chenx221\r\n123-456-789-X" + } + } +} \ No newline at end of file diff --git a/clone/source/sp_keygen/sp_keygen.csproj b/clone/source/sp_keygen/sp_keygen.csproj new file mode 100644 index 0000000..6ca6170 --- /dev/null +++ b/clone/source/sp_keygen/sp_keygen.csproj @@ -0,0 +1,25 @@ + + + + Exe + net8.0 + enable + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + +