solved new keygenme

This commit is contained in:
Chenx221 2024-09-17 14:39:09 +08:00
parent 426c5e99ac
commit a2ba539192
Signed by: chenx221
GPG Key ID: D7A9EC07024C3021
14 changed files with 770 additions and 0 deletions

211
abooMe/Solve.md Normal file
View File

@ -0,0 +1,211 @@
| 00404670 | 55 | push ebp | |
| -------- | ---------------------- | ----------------------------------------- | ------------------------------------------------------------ |
| 00404671 | 8BEC | mov ebp,esp | |
| 00404673 | 81EC F4000000 | sub esp,F4 | |
| 00404679 | 8B45 0C | mov eax,dword ptr ss:\[ebp+C\] | |
| 0040467C | 8985 10FFFFFF | mov dword ptr ss:\[ebp-F0\],eax | |
| 00404682 | 81BD 10FFFFFF 10010000 | cmp dword ptr ss:\[ebp-F0\],110 | |
| 0040468C | 77 2B | ja aboome2.4046B9 | |
| 0040468E | 81BD 10FFFFFF 10010000 | cmp dword ptr ss:\[ebp-F0\],110 | |
| 00404698 | 74 40 | je aboome2.4046DA | |
| 0040469A | 83BD 10FFFFFF 0F | cmp dword ptr ss:\[ebp-F0\],F | |
| 004046A1 | 0F84 A4000000 | je aboome2.40474B | |
| 004046A7 | 83BD 10FFFFFF 10 | cmp dword ptr ss:\[ebp-F0\],10 | |
| 004046AE | 0F84 B8020000 | je aboome2.40496C | |
| 004046B4 | E9 DC020000 | jmp \<aboome2.Useless\> | |
| 004046B9 | 81BD 10FFFFFF 11010000 | cmp dword ptr ss:\[ebp-F0\],111 | |
| 004046C3 | 0F84 89000000 | je aboome2.404752 | |
| 004046C9 | 81BD 10FFFFFF 01020000 | cmp dword ptr ss:\[ebp-F0\],201 | |
| 004046D3 | 74 58 | je aboome2.40472D | |
| 004046D5 | E9 BB020000 | jmp \<aboome2.Useless\> | |
| 004046DA | 833D 7CC04100 00 | cmp dword ptr ds:\[41C07C\],0 | |
| 004046E1 | 75 40 | jne aboome2.404723 | |
| 004046E3 | E8 59FFFFFF | call \<aboome2.sub_404641\> | |
| 004046E8 | 6A 00 | push 0 | |
| 004046EA | 68 44AC0000 | push AC44 | |
| 004046EF | E8 ACCEFFFF | call \<aboome2.sub_4015A0\> | |
| 004046F4 | 83C4 08 | add esp,8 | |
| 004046F7 | 0FBEC8 | movsx ecx,al | |
| 004046FA | 85C9 | test ecx,ecx | |
| 004046FC | 75 05 | jne aboome2.404703 | |
| 004046FE | E9 92020000 | jmp \<aboome2.Useless\> | |
| 00404703 | 6A 00 | push 0 | |
| 00404705 | 6A 00 | push 0 | |
| 00404707 | E8 38C9FFFF | call \<aboome2.sub_401044\> | |
| 0040470C | 83C4 08 | add esp,8 | |
| 0040470F | A3 7CC04100 | mov dword ptr ds:\[41C07C\],eax | |
| 00404714 | 8B15 7CC04100 | mov edx,dword ptr ds:\[41C07C\] | |
| 0040471A | 52 | push edx | |
| 0040471B | E8 F1CAFFFF | call \<aboome2.sub_401211\> | |
| 00404720 | 83C4 04 | add esp,4 | |
| 00404723 | B8 01000000 | mov eax,1 | |
| 00404728 | E9 6A020000 | jmp aboome2.404997 | |
| 0040472D | FF15 E8204100 | call dword ptr ds:\[\<ReleaseCapture\>\] | |
| 00404733 | 6A 00 | push 0 | |
| 00404735 | 6A 02 | push 2 | |
| 00404737 | 68 A1000000 | push A1 | |
| 0040473C | 8B45 08 | mov eax,dword ptr ss:\[ebp+8\] | |
| 0040473F | 50 | push eax | |
| 00404740 | FF15 E4204100 | call dword ptr ds:\[\<SendMessageA\>\] | |
| 00404746 | E9 4A020000 | jmp \<aboome2.Useless\> | |
| 0040474B | 33C0 | xor eax,eax | |
| 0040474D | E9 45020000 | jmp aboome2.404997 | |
| 00404752 | 8B4D 10 | mov ecx,dword ptr ss:\[ebp+10\] | |
| 00404755 | 81E1 FFFF0000 | and ecx,FFFF | |
| 0040475B | 898D 0CFFFFFF | mov dword ptr ss:\[ebp-F4\],ecx | |
| 00404761 | 8B95 0CFFFFFF | mov edx,dword ptr ss:\[ebp-F4\] | |
| 00404767 | 81EA EA030000 | sub edx,3EA | |
| 0040476D | 8995 0CFFFFFF | mov dword ptr ss:\[ebp-F4\],edx | |
| 00404773 | 83BD 0CFFFFFF 04 | cmp dword ptr ss:\[ebp-F4\],4 | |
| 0040477A | 0F87 EA010000 | ja \<aboome2.Jump2Useless\> | |
| 00404780 | 8B85 0CFFFFFF | mov eax,dword ptr ss:\[ebp-F4\] | |
| 00404786 | FF2485 9D494000 | jmp dword ptr ds:\[eax\*4+40499D\] | |
| 0040478D | C745 FC 00000000 | mov dword ptr ss:\[ebp-4\],0 | |
| 00404794 | C745 F8 00000000 | mov dword ptr ss:\[ebp-8\],0 | |
| 0040479B | 6A 0F | push F | |
| 0040479D | 8D8D 18FFFFFF | lea ecx,dword ptr ss:\[ebp-E8\] | |
| 004047A3 | 51 | push ecx | |
| 004047A4 | 68 E8030000 | push 3E8 | Name Edit Control ID |
| 004047A9 | 8B55 08 | mov edx,dword ptr ss:\[ebp+8\] | |
| 004047AC | 52 | push edx | |
| 004047AD | FF15 E0204100 | call dword ptr ds:\[\<GetDlgItemTextA\>\] | get name to ecx |
| 004047B3 | 8D85 18FFFFFF | lea eax,dword ptr ss:\[ebp-E8\] | |
| 004047B9 | 50 | push eax | |
| 004047BA | E8 110C0000 | call \<aboome2.Lib_strlen\> | get name length |
| 004047BF | 83C4 04 | add esp,4 | |
| 004047C2 | 8945 8C | mov dword ptr ss:\[ebp-74\],eax | |
| 004047C5 | 837D 8C 03 | cmp dword ptr ss:\[ebp-74\],3 | Name.length\<=3时验证不通过 |
| 004047C9 | 0F8E 10010000 | jle \<aboome2.Jump22Useless\> | |
| 004047CF | C745 90 00000000 | mov dword ptr ss:\[ebp-70\],0 | sub_4047CF |
| 004047D6 | EB 09 | jmp aboome2.4047E1 | 开始整活 |
| 004047D8 | 8B4D 90 | mov ecx,dword ptr ss:\[ebp-70\] | |
| 004047DB | 83C1 01 | add ecx,1 | |
| 004047DE | 894D 90 | mov dword ptr ss:\[ebp-70\],ecx | |
| 004047E1 | 8B55 90 | mov edx,dword ptr ss:\[ebp-70\] | |
| 004047E4 | 3B55 8C | cmp edx,dword ptr ss:\[ebp-74\] | edx与length比较 |
| 004047E7 | 7D 36 | jge aboome2.40481F | edx\>=length时跳下一个整活 |
| 004047E9 | 8B45 90 | mov eax,dword ptr ss:\[ebp-70\] | |
| 004047EC | 0FBE8C05 18FFFFFF | movsx ecx,byte ptr ss:\[ebp+eax-E8\] | |
| 004047F4 | 8B55 90 | mov edx,dword ptr ss:\[ebp-70\] | |
| 004047F7 | 33C0 | xor eax,eax | |
| 004047F9 | 8A82 C1AC4100 | mov al,byte ptr ds:\[edx+41ACC1\] | |
| 004047FF | 0345 FC | add eax,dword ptr ss:\[ebp-4\] | part1 |
| 00404802 | 03C1 | add eax,ecx | |
| 00404804 | 8945 FC | mov dword ptr ss:\[ebp-4\],eax | |
| 00404807 | 8B4D 90 | mov ecx,dword ptr ss:\[ebp-70\] | |
| 0040480A | 0FBE940D 18FFFFFF | movsx edx,byte ptr ss:\[ebp+ecx-E8\] | |
| 00404812 | 6BD2 0A | imul edx,edx,A | edx = edx\*A |
| 00404815 | 8B45 FC | mov eax,dword ptr ss:\[ebp-4\] | |
| 00404818 | 03C2 | add eax,edx | |
| 0040481A | 8945 FC | mov dword ptr ss:\[ebp-4\],eax | |
| 0040481D | EB B9 | jmp aboome2.4047D8 | |
| 0040481F | C745 90 00000000 | mov dword ptr ss:\[ebp-70\],0 | |
| 00404826 | EB 09 | jmp aboome2.404831 | |
| 00404828 | 8B4D 90 | mov ecx,dword ptr ss:\[ebp-70\] | |
| 0040482B | 83C1 01 | add ecx,1 | |
| 0040482E | 894D 90 | mov dword ptr ss:\[ebp-70\],ecx | |
| 00404831 | 8B55 90 | mov edx,dword ptr ss:\[ebp-70\] | |
| 00404834 | 3B55 8C | cmp edx,dword ptr ss:\[ebp-74\] | |
| 00404837 | 7D 3D | jge aboome2.404876 | |
| 00404839 | 8B45 90 | mov eax,dword ptr ss:\[ebp-70\] | |
| 0040483C | 33C9 | xor ecx,ecx | |
| 0040483E | 8A88 C0AC4100 | mov cl,byte ptr ds:\[eax+41ACC0\] | |
| 00404844 | 6BC9 0A | imul ecx,ecx,A | |
| 00404847 | 8B55 F8 | mov edx,dword ptr ss:\[ebp-8\] | part2 |
| 0040484A | 03D1 | add edx,ecx | |
| 0040484C | 8955 F8 | mov dword ptr ss:\[ebp-8\],edx | |
| 0040484F | 0FBE85 1AFFFFFF | movsx eax,byte ptr ss:\[ebp-E6\] | |
| 00404856 | 8B4D 90 | mov ecx,dword ptr ss:\[ebp-70\] | |
| 00404859 | 33D2 | xor edx,edx | |
| 0040485B | 8A91 C0AC4100 | mov dl,byte ptr ds:\[ecx+41ACC0\] | |
| 00404861 | 0355 F8 | add edx,dword ptr ss:\[ebp-8\] | |
| 00404864 | 03D0 | add edx,eax | |
| 00404866 | 8955 F8 | mov dword ptr ss:\[ebp-8\],edx | |
| 00404869 | 8B45 F8 | mov eax,dword ptr ss:\[ebp-8\] | |
| 0040486C | 05 37130300 | add eax,31337 | |
| 00404871 | 8945 F8 | mov dword ptr ss:\[ebp-8\],eax | |
| 00404874 | EB B2 | jmp aboome2.404828 | |
| 00404876 | 8B4D F8 | mov ecx,dword ptr ss:\[ebp-8\] | |
| 00404879 | 51 | push ecx | p2 |
| 0040487A | 8B55 F8 | mov edx,dword ptr ss:\[ebp-8\] | |
| 0040487D | 52 | push edx | p2 |
| 0040487E | 8B45 FC | mov eax,dword ptr ss:\[ebp-4\] | |
| 00404881 | 50 | push eax | p1 |
| 00404882 | 68 D0AC4100 | push aboome2.41ACD0 | 41ACD0:"%X-aboo-me-%X%i-SCA" |
| 00404887 | 8D4D 94 | lea ecx,dword ptr ss:\[ebp-6C\] | |
| 0040488A | 51 | push ecx | serial store here |
| 0040488B | E8 E90A0000 | call \<aboome2.LibFun_sprintf\> | sprintf |
| 00404890 | 83C4 14 | add esp,14 | |
| 00404893 | 6A 64 | push 64 | |
| 00404895 | 8D95 28FFFFFF | lea edx,dword ptr ss:\[ebp-D8\] | |
| 0040489B | 52 | push edx | |
| 0040489C | 68 ED030000 | push 3ED | |
| 004048A1 | 8B45 08 | mov eax,dword ptr ss:\[ebp+8\] | |
| 004048A4 | 50 | push eax | |
| 004048A5 | FF15 E0204100 | call dword ptr ds:\[\<GetDlgItemTextA\>\] | |
| 004048AB | 8D8D 28FFFFFF | lea ecx,dword ptr ss:\[ebp-D8\] | 用户输入的serial |
| 004048B1 | 51 | push ecx | |
| 004048B2 | 8D55 94 | lea edx,dword ptr ss:\[ebp-6C\] | 正确的serial |
| 004048B5 | 52 | push edx | |
| 004048B6 | FF15 0C204100 | call dword ptr ds:\[\<lstrcmpA\>\] | |
| 004048BC | 8985 14FFFFFF | mov dword ptr ss:\[ebp-EC\],eax | |
| 004048C2 | 83BD 14FFFFFF 00 | cmp dword ptr ss:\[ebp-EC\],0 | |
| 004048C9 | 75 14 | jne \<aboome2.Jump22Useless\> | 主逻辑判断Patch的话Patch这 |
| 004048CB | 68 E4AC4100 | push aboome2.41ACE4 | 41ACE4:"Good Work! now make a keygen! " |
| 004048D0 | 68 ED030000 | push 3ED | |
| 004048D5 | 8B45 08 | mov eax,dword ptr ss:\[ebp+8\] | |
| 004048D8 | 50 | push eax | |
| 004048D9 | FF15 DC204100 | call dword ptr ds:\[\<SetDlgItemTextA\>\] | |
| 004048DF | E9 86000000 | jmp \<aboome2.Jump2Useless\> | Jump22Useless |
| 004048E4 | 6A 00 | push 0 | |
| 004048E6 | 68 08AD4100 | push aboome2.41AD08 | 41AD08:"Aboo Me!" |
| 004048EB | 68 14AD4100 | push aboome2.41AD14 | 41AD14:"Aboo Me - kiTo / SCA\nChiptune: svenzzon\nGFX: kiTo ;)\nGreetz: All members in SCA" |
| 004048F0 | 8B4D 08 | mov ecx,dword ptr ss:\[ebp+8\] | |
| 004048F3 | 51 | push ecx | |
| 004048F4 | FF15 D8204100 | call dword ptr ds:\[\<MessageBoxA\>\] | |
| 004048FA | EB 6E | jmp \<aboome2.Jump2Useless\> | |
| 004048FC | 833D 7CC04100 00 | cmp dword ptr ds:\[41C07C\],0 | |
| 00404903 | 75 3C | jne \<aboome2.sub_404941\> | |
| 00404905 | E8 37FDFFFF | call \<aboome2.sub_404641\> | |
| 0040490A | 6A 00 | push 0 | |
| 0040490C | 68 44AC0000 | push AC44 | |
| 00404911 | E8 8ACCFFFF | call \<aboome2.sub_4015A0\> | |
| 00404916 | 83C4 08 | add esp,8 | |
| 00404919 | 0FBED0 | movsx edx,al | |
| 0040491C | 85D2 | test edx,edx | |
| 0040491E | 75 02 | jne aboome2.404922 | |
| 00404920 | EB 48 | jmp \<aboome2.Jump2Useless\> | |
| 00404922 | 6A 00 | push 0 | |
| 00404924 | 6A 00 | push 0 | |
| 00404926 | E8 19C7FFFF | call \<aboome2.sub_401044\> | |
| 0040492B | 83C4 08 | add esp,8 | |
| 0040492E | A3 7CC04100 | mov dword ptr ds:\[41C07C\],eax | |
| 00404933 | A1 7CC04100 | mov eax,dword ptr ds:\[41C07C\] | |
| 00404938 | 50 | push eax | |
| 00404939 | E8 D3C8FFFF | call \<aboome2.sub_401211\> | |
| 0040493E | 83C4 04 | add esp,4 | |
| 00404941 | EB 27 | jmp \<aboome2.Jump2Useless\> | sub_404941 |
| 00404943 | 833D 7CC04100 00 | cmp dword ptr ds:\[41C07C\],0 | |
| 0040494A | 74 1E | je \<aboome2.Jump2Useless\> | |
| 0040494C | 8B0D 7CC04100 | mov ecx,dword ptr ds:\[41C07C\] | sub_40494C |
| 00404952 | 51 | push ecx | |
| 00404953 | E8 6FC7FFFF | call \<aboome2.sub_4010C7\> | |
| 00404958 | 83C4 04 | add esp,4 | |
| 0040495B | E8 D9CDFFFF | call \<aboome2.sub_401739\> | |
| 00404960 | C705 7CC04100 00000000 | mov dword ptr ds:\[41C07C\],0 | |
| 0040496A | EB 29 | jmp \<aboome2.Useless\> | Jump2Useless |
| 0040496C | 833D 7CC04100 00 | cmp dword ptr ds:\[41C07C\],0 | |
| 00404973 | 74 14 | je aboome2.404989 | |
| 00404975 | 8B15 7CC04100 | mov edx,dword ptr ds:\[41C07C\] | |
| 0040497B | 52 | push edx | |
| 0040497C | E8 46C7FFFF | call \<aboome2.sub_4010C7\> | |
| 00404981 | 83C4 04 | add esp,4 | |
| 00404984 | E8 B0CDFFFF | call \<aboome2.sub_401739\> | |
| 00404989 | 6A 00 | push 0 | |
| 0040498B | 8B45 08 | mov eax,dword ptr ss:\[ebp+8\] | |
| 0040498E | 50 | push eax | |
| 0040498F | FF15 D4204100 | call dword ptr ds:\[\<EndDialog\>\] | |
| 00404995 | 33C0 | xor eax,eax | Useless |
| 00404997 | 8BE5 | mov esp,ebp | |
| 00404999 | 5D | pop ebp | |
| 0040499A | C2 1000 | ret 10 | |

39
abooMe/Solve.txt Normal file
View File

@ -0,0 +1,39 @@
(15>)Name.length>3
ebp-E8: name <--User input
ebp-74: length
ebp-70: unknown
ebp-4: part1(底下简称p1)
ebp-8: part2(p2)
arr0: 13 16 99 11 63 15 54 52 88 01 31 56 68 55 37 00 25 58 2D 61 62 6F 6F 2D 6D 65 2D 25 58 25 69 2D 53 43 41 00 47 6F 6F 64 20 57 6F 72 6B 21 20 6E 6F 77 20 6D 61 6B 65 20 61 20 6B 65 79 67 65 6E
(多准备一些,以防万一)
unknown=0
while(unknown<length) {
v1=unknown
v2=name[v1]
v4=arr0[v1+1]
v4+=part1+v2
part1=v4
v6=name[v1]
v6*=0xA
part1+=v6
unknown++
}
unknown=0
while(unknown<length){
ecx=arr0[unknown]
ecx*=0xA
part2+=ecx
eax=name[2]
edx=arr0[unknown]
edx+=part2+eax
part2=edx
part2+=0x31337
unknown++
}
%X-aboo-me-%X%i-SCA
%X,%X,%i
p1 p2(十六进制) p2(十进制)
1FBF 18B23B 1618491
1FBF-aboo-me-18B23B1618491-SCA -->True Serial

BIN
abooMe/aboome2.exe Normal file

Binary file not shown.

View File

@ -0,0 +1,23 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"keygen1/1.0.0": {
"runtime": {
"keygen1.dll": {}
}
}
}
},
"libraries": {
"keygen1/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

BIN
abooMe/keygen/keygen1.dll Normal file

Binary file not shown.

BIN
abooMe/keygen/keygen1.exe Normal file

Binary file not shown.

View File

@ -0,0 +1,19 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "8.0.0"
}
],
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
}
}
}

7
abooMe/readme.txt Normal file
View File

@ -0,0 +1,7 @@
Keygen this and submit your solution to crackmes.de
Have phun...
- kiTo / SCA
- http://sca.crk.se (for swedish crackers :)
- kito.leet <A T> gmail.com

41
abooMe/source/keygen1.sln Normal file
View File

@ -0,0 +1,41 @@

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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "keygen2", "keygen2\keygen2.csproj", "{2446CB50-1882-4219-9DB0-E7F5517E6E20}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
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|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|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|x86.ActiveCfg = Debug|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.Debug|x86.Build.0 = Debug|Any CPU
{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|x86.ActiveCfg = Release|Any CPU
{2446CB50-1882-4219-9DB0-E7F5517E6E20}.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

131
abooMe/source/keygen1/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,131 @@
namespace keygen1
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
button1 = new Button();
label1 = new Label();
textBox1 = new TextBox();
label2 = new Label();
textBox2 = new TextBox();
label3 = new Label();
checkBox1 = new CheckBox();
SuspendLayout();
//
// button1
//
button1.Location = new Point(343, 2);
button1.Name = "button1";
button1.Size = new Size(143, 94);
button1.TabIndex = 0;
button1.Text = "Generate";
button1.UseVisualStyleBackColor = true;
button1.Click += Button1_Click;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 17);
label1.Name = "label1";
label1.Size = new Size(39, 15);
label1.TabIndex = 1;
label1.Text = "Name";
//
// textBox1
//
textBox1.Location = new Point(56, 14);
textBox1.Name = "textBox1";
textBox1.Size = new Size(281, 23);
textBox1.TabIndex = 2;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(24, 50);
label2.Name = "label2";
label2.Size = new Size(26, 15);
label2.TabIndex = 3;
label2.Text = "Key";
//
// textBox2
//
textBox2.Location = new Point(56, 47);
textBox2.Name = "textBox2";
textBox2.Size = new Size(281, 23);
textBox2.TabIndex = 4;
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(262, 78);
label3.Name = "label3";
label3.Size = new Size(75, 15);
label3.TabIndex = 5;
label3.Text = "By Chenx221";
//
// checkBox1
//
checkBox1.AutoSize = true;
checkBox1.Location = new Point(56, 78);
checkBox1.Name = "checkBox1";
checkBox1.Size = new Size(86, 19);
checkBox1.TabIndex = 6;
checkBox1.Text = "Auto Mode";
checkBox1.UseVisualStyleBackColor = true;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(491, 103);
Controls.Add(checkBox1);
Controls.Add(label3);
Controls.Add(textBox2);
Controls.Add(label2);
Controls.Add(textBox1);
Controls.Add(label1);
Controls.Add(button1);
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
Name = "Form1";
Text = "KeyGen For abooMe";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button button1;
private Label label1;
private TextBox textBox1;
private Label label2;
private TextBox textBox2;
private Label label3;
private CheckBox checkBox1;
}
}

View File

@ -0,0 +1,133 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace keygen1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, StringBuilder? lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
const uint WM_SETTEXT = 0x000C;
const uint BM_CLICK = 0x00F5;
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text)) MessageBox.Show("Name不能为空");
Generate(textBox1.Text);
}
private void Generate(string username)
{
if (username.Length <= 3)
{
MessageBox.Show("Name长度需大于3位");
return;
}
string key = GenerateKey(username);
textBox2.Text = key;
if (checkBox1.Checked) AutoMode(username, key);
}
private static string GenerateKey(string name)
{
int length = name.Length;
byte[] arr0 =
[
0x13, 0x16, 0x99, 0x11, 0x63, 0x15, 0x54, 0x52, 0x88, 0x01, 0x31, 0x56, 0x68, 0x55, 0x37, 0x00,
0x25, 0x58, 0x2D, 0x61, 0x62, 0x6F, 0x6F, 0x2D, 0x6D, 0x65, 0x2D, 0x25, 0x58, 0x25, 0x69, 0x2D,
0x53, 0x43, 0x41, 0x00, 0x47, 0x6F, 0x6F, 0x64, 0x20, 0x57, 0x6F, 0x72, 0x6B, 0x21, 0x20, 0x6E,
0x6F, 0x77, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x20, 0x61, 0x20, 0x6B, 0x65, 0x79, 0x67, 0x65, 0x6E
];
int unknown = 0;
int part1 = 0;
int part2 = 0;
while (unknown < length)
{
int v1 = unknown;
byte v2 = (byte)name[v1];
int v4 = arr0[v1 + 1];
v4 += part1 + v2;
part1 = v4;
int v6 = (byte)name[v1];
v6 *= 0xA;
part1 += v6;
unknown++;
}
unknown = 0;
while (unknown < length)
{
int ecx = arr0[unknown];
ecx *= 0xA;
part2 += ecx;
byte eax = (byte)name[2]; // Assuming the index 2 is intended
int edx = arr0[unknown];
edx += part2 + eax;
part2 = edx;
part2 += 0x31337;
unknown++;
}
string hexPart1 = part1.ToString("X");
string hexPart2 = part2.ToString("X");
string decimalPart2 = part2.ToString();
string result = $"{hexPart1}-aboo-me-{hexPart2}{decimalPart2}-SCA";
return result;
}
private static void AutoMode(string username, string key)
{
string windowTitle = "Aboo Me - kiTo / SCA";
IntPtr hWnd = FindWindow(null, windowTitle);
if (hWnd == IntPtr.Zero)
{
MessageBox.Show("窗口未找到");
return;
}
int usernameControlId = 1000;
int keyControlId = 1005;
int submitButtonId = 1003;
IntPtr usernameHwnd = GetDlgItem(hWnd, usernameControlId);
IntPtr keyHwnd = GetDlgItem(hWnd, keyControlId);
IntPtr submitButtonHwnd = GetDlgItem(hWnd, submitButtonId);
if (usernameHwnd == IntPtr.Zero || keyHwnd == IntPtr.Zero || submitButtonHwnd == IntPtr.Zero)
{
MessageBox.Show("控件未找到");
return;
}
StringBuilder usernameToSet = new(username);
StringBuilder keyToSet = new(key);
SendMessage(usernameHwnd, WM_SETTEXT, IntPtr.Zero, usernameToSet);
SendMessage(keyHwnd, WM_SETTEXT, IntPtr.Zero, keyToSet);
SendMessage(submitButtonHwnd, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
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">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</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.Runtime.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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<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" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</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>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,17 @@
namespace keygen1
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Platforms>AnyCPU;x86</Platforms>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>portable</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<DebugType>portable</DebugType>
</PropertyGroup>
</Project>