solved new crackme

This commit is contained in:
Chenx221 2024-12-17 14:53:35 +08:00
parent 310564a3e1
commit 5583df8694
Signed by: chenx221
GPG Key ID: D7A9EC07024C3021
12 changed files with 809 additions and 0 deletions

146
CM2/FOFF.nfo Normal file
View File

@ -0,0 +1,146 @@
ú ÜÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛ ú
: Û²²Û Û²²Û²²²Û Û²²Û²²²Û Û²²Û Û²²Û Û²Û :
úúúÄijú¿ Û±±Û Û±±ÛßÛ²Û Û±±ÛßÛ²Û Û±±Û Û±±Û Û²Û Úú³ÄÄúúú
úú--ÄÄÄ-úÛ°°ÛúÄÍ--úÛ°°ÛÜÛÛÛÍÍÛ°°ÛÜÛ²ÛÍÍÛ°°ÛúÄÍ--úÛ°°ÛÛßßßú-ÄÄ--Äúú
úúÄÙ Û±±Û Û±±ÛÛÛ Û±±Û Û²Û Û±±Û Û±±ÛßÛÜÜ ÀÄúú
| Û²²Û Û²²Û ÛÛ Û²²Û Û²Û Û²²Û Û²²Û Û²Û |
: ßÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛ ÛÛÛÛ ÛÛÛ ßÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛ :
: iNFORMATiON :
.úúÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄúúúúúúúúúúúÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍúú.
. .
ú ú
- FiGHT ONLY 4 FREEDOM -
P r e s e n t s
KeygenMe 1 (c) by Team FOFF
ÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܲÛÛÛÛÛÛÛ²ÛÛÛÛÛ²ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Ü ßßß ßÛÛ²ÛÛ²²²²Û²ÛÛß ßßß Ü
° ° °° °°° °°°°°°°° ±±±± ²²²Ü ßßÛÛÛÛ²ÛÛßß Ü²²² ±±±± °°°°°°°°° °°° °° °
°° ÞÛÝ °
° Ý °
° Cracked by. [ - ] ² Rls Type . [ KeygenMe 1 ] °
° Tested by.. [ Team FOFF ] ± Date ..... [ 05-03-2007 ] °
° Packed by.. [ Team FOFF ] ° OS ....... [ Win All ] °
° Supplied by [ Team FOFF ] ° Language . [ English ] ±
° Protection. [ Serial ] ° Disks .... [ 01 ] ²
° Ü °
± . ß Ü ° Ü Ü ß Ü ßÛÜ þÛ Ü
°±²Ü ÜÛÜ ° ÛÜ ßÛÜÜÜ °°° ÜÛÛ²Ü ß ± ßÛß Ü²ÛÛÜ °°° ÜÜÜÛß ÜÛ ° ÜÛÜ ßÛ²±° ÞÛ
ܲÛß ÜÛß ßÛÛ²Û²ÛܲÛÛ²ÛÜ ÜÛ²Ûß ßßþ ÜÜÛ²ÛÜþ þßß ßÛ²ÛÜ ÜÛ²Ûß ÜÛ²Û²ÛÛß ßÛÜ ßß²ÛÛÝ
ÛÛ Þ²Ý ° Þßß °ÞßßßÛÜ ßÛ²Ûß ²ÜÜÜ ß²Ûß ÜÜÜÜÜܲ ßÛ²Ûß ß ßßÝ° ßßÝ ° Þ²Ý ßÛÛÝÛ
²Ý ß² Üþ °° ° ß ß þßßß ßþßß ß² ßßßþ ß ° °° þÜ ²ß Û² ±
Û² Üßß . ß ß ß ÞÝ °
Ü ß ÜÜ ÜÜ ß ±
° ßßßßßßßßßßßßßßßßßßßÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛßßßßßßßßßßßßßßßßßßß °
ß ßßßÛÛÛ ß ßßß²ÛÛÛ ß Ü Ü ÜÜÜÜÜÜÜ Ü ÜÜÜÜÜÜ ß ßßßßßß ß ßßßß²ÛÛÛ
° ²ÛÛ ²ÛÛÜ ²ÛÛß ÜÜÜÜ ²ÛÛ ÜÜÜÜ ÜÜÜÜ ßßß ÜÜÜܲÛÛÛ ßßßßß²ÛÛÛ ²ÛÛß ÜÜÜÜ °
± ßßß ßßßß ßßßßßßßßß ²ÛÛÜܲÛÛÛ ²ÛÛÜܲÛÛÛ ²ÛÛ ²ÛÛÛ ßßßßßßßßß ßßßßßßßßß ±
²ßßßßßßßßßßßßßßßßÛÛ² Ü ÜÜÜÜÜÜÜ ÜÜÜÜÜÜ Ü ²ÛÛßßßßßßßßßßßß ßß²ß ß
Üß± ßþÜ NOTES Üþßß ±ß Ü
ß ° Ü ß ß °
° °
KegenMe by cLoNeTrOnE written on masm32, create a keygen for it on
any kind of programming tool but bruteforce is not allowed.
Ü
Ü
ß ßßßÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܲÛßßß ß
° ÜÜ Ü ÜÜÜÜÜÜÜ ÜÜÜ ßßßßßßßßßßßßßßßßßßßßßßßßß ÜÜ ° °° ÜÜÜ ° °
ÜÜÜ ÜÜÜ ²ÛÛÛ ÜÜ ßßßßßß ß ßß²ÛÛÛ ß ßßß²ÛÛÛ ß Ü ÜÜÜ
° ± ²ÛÛ ²ÛÛ ²ÛÛÛ ßßßßß²ÛÛÛ ° ²ÛÛÛ ²ÛÛ ß²ÛÛÛ ²ÛÛ ÛÛÛÛ ²ÛÛÜÜÛÛÛÛ °
Ü Ü²ÜÜÜÜÜÜÜÜÜÜÜÜÜ ßßßßßßß °° ßßßß ßßß ßßßß ßßßßßßß ±
ß ÛÛ² ß ßßßßßßßÜÜ ÜÜßßßßßß ß ²ÛÜÜÜÜÜÜÜÜÜÜÜ²Ü Ü
Ü Üß± ßþÜ NOTES Üþßß ±Ûß ß
Ü ° Ü ß ß ° ß ß
Unpack from ZIP archieve and run it :)
Ü
Ü
ß ßßßÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜܲÛßßß ß
Ü ÜÜÜÜÜÜÜÜÜÜ Ü ÜÜÜÜÜÜÜ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß Ü ÜÜÜÜÜÜ Ü ÜÜÜÜÜÜÜ
° ÜÜÜ ÜÜÜ ²ÛÛÛ ÜÜÜÜ ß ßßßßßß²ÛÛÛ ß ßßßÛÛÛÛ ß ßßßßßßß ÜÜÜܲÛÛß ÜÜÜÜÜÜÜÜÜ °
± ²ÛÛ ²ÛÛ ²ÛÛÛ ²ÛÛÜܲÛÛÛ ²ÛÛ ²ÛÛ ²ÛÛÛ ²ÛÛßß²ÛÛÜ ²ÛÛß ÜÜÜÜ ²ÛÛ ²ÛÛÛ ÜÜÜÜܲÛÛÛ ±
²ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ßßß ßßß ßßßß ßßßßßßßßß ßßßßßßßßß ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܲ
ß ßÛ² ß ßßßßßÜÜ MEMBERS ÜÜßßßßß ß ²ÛÛß
ß ß ± ßþÜ Üþßß ±ß ß Ü
° Ü ß ß °
° °
{:... Team Components ....:}
MiStEr_X.................................:{ Founder/Cracker }
cLoNeTrOnE ................................:{ Cracker/Coder }
CooL As Ice....................................:{ Supporter }
ß ßßßÛÜÜÜÜÜÜÜ ÜÜÜÜÛßßß ß
Ü ÜÜÜÜÜÜ ßßßßßßßßßßßßß Ü ÜÜÜÜÜÜ
° ²ÛÛÛ ß ßßÛÛÛÛ ßßßß ÜÜÜ ²ÛÛÛ °
± ²ÛÛܲÛÛÛ ²ÛÛ ²ÛÛÛ ²ÛÛÛ ²ÛÛ ²ÛÛÛ ±
²ÜÜÜÜÜÜÜÜÜ ßßßßßßßß ßßßß ÜÜÜÜÜÜÜÜܲ
ß ßÛ² Join Us ²Ûßßßß
ß ß ± ±ß ß
We at FOFF are opened to accept new members and relese cracks to
contribute to the underground community. Of course we can not
accept newbies, we are willing to have in our Team experienced
crackers, coders, keygenners, etc.
ß ÜÜ Ü
° ßßßßÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜßß
Ü ÜÜÜÜÜÜÜ Ü ÜÜÜÜÜÜ ßßßßßßßßßßßßßßßßßßß Ü ÜÜÜÜÜÜ Ü ÜÜÜÜÜÜÜ °
° ÜÜÜ ÜÜÜÜÜ ÜÜÜܲÛÛß ß ßßßßßßß ß ßßßßßßß ²ÛÛÛ ÜÜÜÜÜÜÜÜÜ
± ²ÛÛÜܲÛÛÛ ²ÛÛ ²ÛÛÛ ²ÛÛß ÜÜÜÜ ²ÛÛß ÜÜÜÜ ° ²ÛÛÛ ÜÜÜÜܲÛÛÛ °
Ü Ü²ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ßßßßßßßßß ßßßßßßßßß ÜÜ ±
ß ßÛÛ² ß ßÜÜ GREETz ÜÜ ²ÛÛßßßßßßßßßßßßßß²ßß ß
ß Ü ß± ßþÜ Üþßß ±ß ß °
° °
 CrackZ  FFF  CiM  ARTeam  DiGERATi 
 PARADOX  PiZZA  DEViANCE  TSRh  FHCF 
 Astalavista.MS Community 
ß ÜÜ Ü
° ßßßßÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜßß °
Ü ÜÜÜÜÜÜÜ Ü ÜÜÜÜÜÜ ßßßßßßßßßßßßßßßßßßßßßßßßßßßß Ü ÜÜÜÜÜÜÜ Ü ÜÜÜÜÜÜÜ
° ÜÜÜ ÜÜÜ ²ÛÛÛ ß ßßß²ÛÛÛ ß ßßß²ÛÛÛ ß ßßÛÛÛÛ ÜÜÜ ²ÛÛÛ °
± ²ÛÛÜܲÛÛÛ ²ÛÛܲÛÛÛ ²ÛÛ ²ÛÛÛ ²ÛÛÛ ÛÛÛß²ÛÛÛ ÛÛÛÜܲÛÛÛ °°° ²ÛÛÛ ±
Ü Ü²ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ßßß ßßßß ßßßß ßßß ßßßß ±
ß ßÛÛ² ß ßÜÜ CONTACT ÜÜ ²ÛÛßßßßßßßßßßßßßßßßßßßßßßßß²ßß ß
ß Ü ß± ßþÜ Üþßß ±ß ß °
° ° Ü ß ß ° Ü °
° ° ° °
° °
° °
° :[WWW] ................:[ http://foff.astalavista.ms ]: °
° °
° °
° ±
° Ü ° ²
± . ß Ü ° Ü Ü ß Ü ßÛÜ þÛ Ü
°±²Ü ÜÛÜ ° ÛÜ ßÛÜÜÜ °°° ÜÛÛ²Ü ß ± ßÛß Ü²ÛÛÜ °°° ÜÜÜÛß ÜÛ ° ÜÛÜ ßÛ²±° ÞÛ
ܲÛß ÜÛß ßÛÛ²Û²ÛܲÛÛ²ÛÜ ÜÛ²Ûß ßßþ ÜÜÛ²ÛÜþ þßß ßÛ²ÛÜ ÜÛ²Ûß ÜÛ²Û²ÛÛß ßÛÜ ßß²ÛÛÝ
ÛÛ Þ²Ý ° Þßß °ÞßßßÛÜ ßÛ²Ûß ²ÜÜÜ ß²Ûß ÜÜÜÜÜܲ ßÛ²Ûß ß ßßÝ° ßßÝ ° Þ²Ý ßÛÛÝÛ
²Ý ß² Üþ °° ° ß ß þßßß ßþßß ß² ßßßþ ß ° °° þÜ ²ß Û² ±
Û² Üßß ß ß ß ÞÝ °
ßÛß ß [ NFO by creepah Last update on 12-02-2k7 ] Üß °
ß ÜÜ ÜÜ ß
ßßßßßßßßßßßßßßßßßßßÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛßßßßßßßßßßßßßßßßßßß

Binary file not shown.

Binary file not shown.

3
CM2/file_id.diz Normal file
View File

@ -0,0 +1,3 @@
KeygenMe 1 (c) by Team FOFF
[DISK: xx/01 ] [DATE: 05-03-2007 ] [OS: Win All ]

BIN
CM2/keygen/sp_keygen.exe Normal file

Binary file not shown.

241
CM2/solve.md Normal file
View File

@ -0,0 +1,241 @@
算密钥
先来一组可用密钥:
```
chenx221
48-000002AB-GA
```
*此crackme在win8.1及以上的系统上存在兼容性问题判断serial时会崩溃。`KeyGenMe_#1_cLoNeTrOnE.exe+1321`前缺少对edx进行清理
密钥由以下部分组成
1. `keyDatabase[name[0] % 0x10]`
2. `keyDatabase[name[1] % 0x10]`
3. `-`
4. `Name的Ascii码总和 (%.8X格式化输出)`
5. `-`
6. `keyDatabase[name[^2] % 0x10]`
7. `keyDatabase[name[^1] % 0x10]`
keyDatabase: `1AG4T3CX8ZF7R95Q`
细节:
```assembly
0040102B | 55 | push ebp | start
0040102C | 8BEC | mov ebp,esp |
0040102E | 817D 0C 10010000 | cmp dword ptr ss:[ebp+C],110 |
00401035 | 75 3B | jne keygenme_#1_clonetrone.401072 |
00401037 | 66:C705 C9324000 | mov word ptr ds:[4032C9],5 |
00401040 | C605 CB324000 00 | mov byte ptr ds:[4032CB],0 |
00401047 | FF75 08 | push dword ptr ss:[ebp+8] |
0040104A | E8 93030000 | call <JMP.&_UpdateWindow@4> |
0040104F | 68 BA314000 | push keygenme_#1_clonetrone.4031BA |
00401054 | 6A 06 | push 6 |
00401056 | FF75 08 | push dword ptr ss:[ebp+8] |
00401059 | E8 7E030000 | call <JMP.&_SetDlgItemTextA@12> |
0040105E | 68 BA314000 | push keygenme_#1_clonetrone.4031BA |
00401063 | 6A 03 | push 3 |
00401065 | FF75 08 | push dword ptr ss:[ebp+8] |
00401068 | E8 6F030000 | call <JMP.&_SetDlgItemTextA@12> |
0040106D | E9 75010000 | jmp keygenme_#1_clonetrone.4011E7 |
00401072 | 837D 0C 10 | cmp dword ptr ss:[ebp+C],10 |
00401076 | 75 0F | jne keygenme_#1_clonetrone.401087 |
00401078 | 6A 00 | push 0 |
0040107A | FF75 08 | push dword ptr ss:[ebp+8] |
0040107D | E8 48030000 | call <JMP.&_EndDialog@8> |
00401082 | E9 60010000 | jmp keygenme_#1_clonetrone.4011E7 |
00401087 | 817D 0C 11010000 | cmp dword ptr ss:[ebp+C],111 |
0040108E | 0F85 4A010000 | jne keygenme_#1_clonetrone.4011DE |
00401094 | 33C0 | xor eax,eax |
00401096 | 8B45 10 | mov eax,dword ptr ss:[ebp+10] | [ebp+10]:EntryPoint
00401099 | C1E8 10 | shr eax,10 |
0040109C | 0BC0 | or eax,eax |
0040109E | 0F85 43010000 | jne keygenme_#1_clonetrone.4011E7 |
004010A4 | 33C0 | xor eax,eax |
004010A6 | 8B45 10 | mov eax,dword ptr ss:[ebp+10] | [ebp+10]:EntryPoint
004010A9 | C1C0 10 | rol eax,10 |
004010AC | C1E8 10 | shr eax,10 |
004010AF | 83F8 01 | cmp eax,1 |
004010B2 | 0F85 E7000000 | jne keygenme_#1_clonetrone.40119F |
004010B8 | 66:FF0D C9324000 | dec word ptr ds:[4032C9] | CheckBtn
004010BF | 6A 50 | push 50 |
004010C1 | 68 54324000 | push <keygenme_#1_clonetrone.Name> | Name
004010C6 | 6A 03 | push 3 |
004010C8 | FF75 08 | push dword ptr ss:[ebp+8] |
004010CB | E8 00030000 | call <JMP.&_GetDlgItemTextA@16> |
004010D0 | A3 B8324000 | mov dword ptr ds:[<Name.length>],eax | length
004010D5 | 6A 14 | push 14 |
004010D7 | 68 A4324000 | push <keygenme_#1_clonetrone.Serial> | Serial
004010DC | 6A 06 | push 6 |
004010DE | FF75 08 | push dword ptr ss:[ebp+8] |
004010E1 | E8 EA020000 | call <JMP.&_GetDlgItemTextA@16> |
004010E6 | A3 BC324000 | mov dword ptr ds:[<Serial.length>],eax | length
004010EB | FF75 08 | push dword ptr ss:[ebp+8] |
004010EE | E8 EF020000 | call <JMP.&_UpdateWindow@4> |
004010F3 | FF35 B8324000 | push dword ptr ds:[<Name.length>] |
004010F9 | 68 54324000 | push <keygenme_#1_clonetrone.Name> |
004010FE | E8 76020000 | call <keygenme_#1_clonetrone.isAscii> |
00401103 | 833D B8324000 00 | cmp dword ptr ds:[<Name.length>],0 |
0040110A | 75 14 | jne keygenme_#1_clonetrone.401120 | check if name is empty
0040110C | 68 BB314000 | push keygenme_#1_clonetrone.4031BB | 4031BB:"There is nothing here to be processed."
00401111 | 6A 03 | push 3 |
00401113 | FF75 08 | push dword ptr ss:[ebp+8] |
00401116 | E8 C1020000 | call <JMP.&_SetDlgItemTextA@12> |
0040111B | E9 9E000000 | jmp keygenme_#1_clonetrone.4011BE |
00401120 | 833D B8324000 04 | cmp dword ptr ds:[<Name.length>],4 |
00401127 | 73 14 | jae keygenme_#1_clonetrone.40113D | check if name length > 4
00401129 | 68 0B324000 | push keygenme_#1_clonetrone.40320B | 40320B:"Name was too short. Put more than 3 chars"
0040112E | 6A 03 | push 3 |
00401130 | FF75 08 | push dword ptr ss:[ebp+8] |
00401133 | E8 A4020000 | call <JMP.&_SetDlgItemTextA@12> |
00401138 | E9 81000000 | jmp keygenme_#1_clonetrone.4011BE |
0040113D | 833D B8324000 3C | cmp dword ptr ds:[<Name.length>],3C | 3C:'<'
00401144 | 76 11 | jbe keygenme_#1_clonetrone.401157 | check if name length < 60
00401146 | 68 E2314000 | push keygenme_#1_clonetrone.4031E2 | 4031E2:"Name was too long, buffer will overflow."
0040114B | 6A 03 | push 3 |
0040114D | FF75 08 | push dword ptr ss:[ebp+8] |
00401150 | E8 87020000 | call <JMP.&_SetDlgItemTextA@12> |
00401155 | EB 67 | jmp keygenme_#1_clonetrone.4011BE |
00401157 | 0BC0 | or eax,eax |
00401159 | 75 11 | jne keygenme_#1_clonetrone.40116C | check if name contains illegal char (!ascii)
0040115B | 68 00304000 | push keygenme_#1_clonetrone.403000 | 403000:"The Name contains invalid ASCII char [>127]."
00401160 | 6A 03 | push 3 |
00401162 | FF75 08 | push dword ptr ss:[ebp+8] |
00401165 | E8 72020000 | call <JMP.&_SetDlgItemTextA@12> |
0040116A | EB 52 | jmp keygenme_#1_clonetrone.4011BE |
0040116C | FF75 08 | push dword ptr ss:[ebp+8] |
0040116F | E8 EE000000 | call <keygenme_#1_clonetrone.CheckSerial> |
00401174 | 803D CB324000 00 | cmp byte ptr ds:[4032CB],0 |
0040117B | 75 19 | jne keygenme_#1_clonetrone.401196 |
0040117D | 68 10100000 | push 1010 | Fail
00401182 | 68 C6304000 | push keygenme_#1_clonetrone.4030C6 | 4030C6:"Invalid Serial - Serial Rejected"
00401187 | 68 7C304000 | push keygenme_#1_clonetrone.40307C | 40307C:"Wrong Serial. The Serial Is Case-Sensitive. Try Again. Never Give Up !!!."
0040118C | FF75 08 | push dword ptr ss:[ebp+8] |
0040118F | E8 42020000 | call <JMP.&_MessageBoxA@16> |
00401194 | EB 07 | jmp keygenme_#1_clonetrone.40119D |
```
```assembly
00401379 | 55 | push ebp | isAscii (string,len)
0040137A | 8BEC | mov ebp,esp | EAX: True->1, False->0
0040137C | 51 | push ecx |
0040137D | 52 | push edx |
0040137E | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00401380 | 33C9 | xor ecx,ecx |
00401382 | 33D2 | xor edx,edx |
00401384 | 8B4D 0C | mov ecx,dword ptr ss:[ebp+C] | p1
00401387 | 8B45 08 | mov eax,dword ptr ss:[ebp+8] | p0
0040138A | EB 27 | jmp keygenme_#1_clonetrone.4013B3 | Loop
0040138C | 8A10 | mov dl,byte ptr ds:[eax] | eax:_TppWorkerThread@4
0040138E | 80FA 7F | cmp dl,7F |
00401391 | 76 0B | jbe keygenme_#1_clonetrone.40139E | char <= ascii 127
00401393 | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00401395 | B8 00000000 | mov eax,0 | eax:_TppWorkerThread@4
0040139A | EB 1B | jmp keygenme_#1_clonetrone.4013B7 |
0040139C | EB 13 | jmp keygenme_#1_clonetrone.4013B1 |
0040139E | 80FA 80 | cmp dl,80 |
004013A1 | 73 0E | jae keygenme_#1_clonetrone.4013B1 | char >= 128
004013A3 | 83F9 01 | cmp ecx,1 |
004013A6 | 75 09 | jne keygenme_#1_clonetrone.4013B1 | l !== 1
004013A8 | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
004013AA | B8 01000000 | mov eax,1 | eax:_TppWorkerThread@4
004013AF | EB 06 | jmp keygenme_#1_clonetrone.4013B7 |
004013B1 | 40 | inc eax | eax:_TppWorkerThread@4
004013B2 | 49 | dec ecx |
004013B3 | 0BC9 | or ecx,ecx |
004013B5 | 75 D5 | jne keygenme_#1_clonetrone.40138C | NextLoop
004013B7 | 5A | pop edx |
004013B8 | 59 | pop ecx |
004013B9 | C9 | leave |
004013BA | C2 0800 | ret 8 |
```
```assembly
00401262 | 55 | push ebp | checkSerial
00401263 | 8BEC | mov ebp,esp |
00401265 | 60 | pushad |
00401266 | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00401268 | 33D2 | xor edx,edx |
0040126A | B9 10000000 | mov ecx,10 |
0040126F | A0 54324000 | mov al,byte ptr ds:[<Name>] |
00401274 | F6F1 | div cl | name[0] / 0x10
00401276 | 8AD4 | mov dl,ah | mod
00401278 | 8A82 35324000 | mov al,byte ptr ds:[edx+<Keydatabase>] | edx+403235:"1AG4T3CX8ZF7R95Q"
0040127E | 8A15 A4324000 | mov dl,byte ptr ds:[<Serial>] |
00401284 | 38D0 | cmp al,dl |
00401286 | 0F85 E8000000 | jne <keygenme_#1_clonetrone.Fail> | serial[0] !== Keydatabase[name[0] % 0x10]
0040128C | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
0040128E | A0 55324000 | mov al,byte ptr ds:[403255] | name[1]
00401293 | F6F1 | div cl |
00401295 | 8AD4 | mov dl,ah |
00401297 | 8A82 35324000 | mov al,byte ptr ds:[edx+<Keydatabase>] | edx+403235:"1AG4T3CX8ZF7R95Q"
0040129D | 8A15 A5324000 | mov dl,byte ptr ds:[4032A5] |
004012A3 | 38D0 | cmp al,dl |
004012A5 | 0F85 C9000000 | jne <keygenme_#1_clonetrone.Fail> | serial[1] !== Keydatabase[name[1] % 0x10]
004012AB | A0 A6324000 | mov al,byte ptr ds:[4032A6] |
004012B0 | 2C 2D | sub al,2D |
004012B2 | 0F85 BC000000 | jne <keygenme_#1_clonetrone.Fail> | serial[2] !== '-'
004012B8 | 33D2 | xor edx,edx |
004012BA | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
004012BC | 33C9 | xor ecx,ecx | Sum(name char ascii)
004012BE | 8A8A 54324000 | mov cl,byte ptr ds:[edx+<Name>] |
004012C4 | 0AC9 | or cl,cl |
004012C6 | 74 05 | je keygenme_#1_clonetrone.4012CD |
004012C8 | 03C1 | add eax,ecx | eax:_TppWorkerThread@4
004012CA | 42 | inc edx |
004012CB | EB EF | jmp keygenme_#1_clonetrone.4012BC |
004012CD | 50 | push eax | Sum
004012CE | 68 46324000 | push keygenme_#1_clonetrone.403246 | 403246:"%.8X"
004012D3 | 68 C0324000 | push <keygenme_#1_clonetrone.NameAscSum.Forma |
004012D8 | E8 E1000000 | call <JMP.&_wsprintfA> |
004012DD | 83C4 0C | add esp,C |
004012E0 | 33C9 | xor ecx,ecx |
004012E2 | EB 11 | jmp keygenme_#1_clonetrone.4012F5 | Check serial[3..] == NameAscSumFormatStr
004012E4 | 8A81 C0324000 | mov al,byte ptr ds:[ecx+<NameAscSum.FormatStr |
004012EA | 8A91 A7324000 | mov dl,byte ptr ds:[ecx+4032A7] |
004012F0 | 38D0 | cmp al,dl |
004012F2 | 75 09 | jne keygenme_#1_clonetrone.4012FD | mod:direct fail
004012F4 | 41 | inc ecx |
004012F5 | 83F9 08 | cmp ecx,8 |
004012F8 | 75 EA | jne keygenme_#1_clonetrone.4012E4 | keep
004012FA | 31D2 | xor edx,edx |
004012FC | 90 | nop |
004012FD | 75 75 | jne <keygenme_#1_clonetrone.Fail> |
004012FF | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00401301 | A0 AF324000 | mov al,byte ptr ds:[4032AF] |
00401306 | 2C 2D | sub al,2D |
00401308 | 75 6A | jne <keygenme_#1_clonetrone.Fail> | serial[11] !== '-'
0040130A | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
0040130C | B9 10000000 | mov ecx,10 |
00401311 | 8B1D B8324000 | mov ebx,dword ptr ds:[<Name.length>] |
00401317 | 8A83 52324000 | mov al,byte ptr ds:[ebx+403252] | name[^2]
0040131D | F6F1 | div cl |
0040131F | 8AD4 | mov dl,ah |
00401321 | 8A82 35324000 | mov al,byte ptr ds:[edx+<Keydatabase>] | ??? BUG (forget xor edx,edx?)
00401327 | 8A15 B0324000 | mov dl,byte ptr ds:[4032B0] |
0040132D | 38D0 | cmp al,dl |
0040132F | 75 43 | jne <keygenme_#1_clonetrone.Fail> | serial[12] !== Keydatabase[name[^2] % 0x10]
00401331 | 33C0 | xor eax,eax | eax:_TppWorkerThread@4
00401333 | 8A83 53324000 | mov al,byte ptr ds:[ebx+403253] | name[^1]
00401339 | F6F1 | div cl |
0040133B | 8AD4 | mov dl,ah |
0040133D | 8A82 35324000 | mov al,byte ptr ds:[edx+<Keydatabase>] | edx+403235:"1AG4T3CX8ZF7R95Q"
00401343 | 8A15 B1324000 | mov dl,byte ptr ds:[4032B1] |
00401349 | 38D0 | cmp al,dl |
0040134B | 75 27 | jne <keygenme_#1_clonetrone.Fail> | serial[13] !== Keydatabase[name[^1] % 0x10]
0040134D | 68 30100000 | push 1030 | Success
00401352 | 68 59304000 | push keygenme_#1_clonetrone.403059 | 403059:"WoW, Very Good Job."
00401357 | 68 2D304000 | push keygenme_#1_clonetrone.40302D | 40302D:"Well Done Cracker !!!. Now, Code a KeyGen.?"
0040135C | FF75 08 | push dword ptr ss:[ebp+8] |
0040135F | E8 72000000 | call <JMP.&_MessageBoxA@16> |
00401364 | 66:C705 C9324000 | mov word ptr ds:[4032C9],FFFF |
0040136D | C605 CB324000 01 | mov byte ptr ds:[4032CB],1 |
00401374 | 61 | popad |
00401375 | C9 | leave | ^ if jump here
00401376 | C2 0400 | ret 4 |
```
修复的几处代码请自己比对,我懒得放了

163
CM2/source/keygen1.sln Normal file
View File

@ -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

View File

@ -0,0 +1,59 @@
using System.Text;
class Program
{
static void Main()
{
Console.Write("Enter Name: ");
string? name = Console.ReadLine();
//Check
if (string.IsNullOrEmpty(name) || name.Length <= 4 || name.Length >= 60 || !IsAscii(name))
Console.Write("Invalid Name");
else
{
CalcSerial(name);
}
Console.ReadKey();
}
public static void CalcSerial(string name)
{
const string keyDatabase = "1AG4T3CX8ZF7R95Q";
StringBuilder sb = new();
sb.Append(keyDatabase[name[0] % 0x10]);
sb.Append(keyDatabase[name[1] % 0x10]);
sb.Append('-');
sb.Append($"{GetAscii(name):X8}");
sb.Append('-');
sb.Append(keyDatabase[name[^2] % 0x10]);
sb.Append(keyDatabase[name[^1] % 0x10]);
Console.WriteLine(sb.ToString());
}
//public static bool Check()
//{
// return true;
//}
public static bool IsAscii(string str)
{
foreach (char c in str)
{
if (c > 127)
return false;
}
return true;
}
public static int GetAscii(string str)
{
int ascii = 0;
foreach (char c in str)
{
ascii += c;
}
return ascii;
}
}

View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace sp_keygen.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 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() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[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;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,8 @@
{
"profiles": {
"sp_keygen": {
"commandName": "Project",
"commandLineArgs": "chenx221\r\n123-456-789-X"
}
}
}

View File

@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>