Finished Win32 GUI (First time in my life)

This commit is contained in:
Andrew 2023-04-11 20:14:35 +03:00
parent 602ad90f67
commit 70e2c6fbfd
5 changed files with 178 additions and 54 deletions

View File

@ -88,7 +88,7 @@
<ProxyFileName>%(Filename)_p.c</ProxyFileName> <ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl> </Midl>
<Link> <Link>
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;uxtheme.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions> <AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
@ -99,6 +99,7 @@
<ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile> <ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile>
<SubSystem>Console</SubSystem> <SubSystem>Console</SubSystem>
<AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies> <AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies>
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link> </Link>
<ProjectReference> <ProjectReference>
<LinkLibraryDependencies>true</LinkLibraryDependencies> <LinkLibraryDependencies>true</LinkLibraryDependencies>
@ -133,7 +134,7 @@
<ProxyFileName>%(Filename)_p.c</ProxyFileName> <ProxyFileName>%(Filename)_p.c</ProxyFileName>
</Midl> </Midl>
<Link> <Link>
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;uxtheme.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions> <AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>

View File

@ -43,10 +43,14 @@
#define IDC_LABEL1 1055 #define IDC_LABEL1 1055
#define IDC_LABEL2 1056 #define IDC_LABEL2 1056
#define IDC_LABEL3 1057 #define IDC_LABEL3 1057
#define IDC_LABEL4 1058
#define IDC_LABEL5 1059
typedef unsigned long ul32; typedef unsigned long ul32;
extern HANDLE hConsole; extern HANDLE hConsole;
extern ul32 dwSeed;
extern byte charset[]; extern byte charset[];
extern const char pXP[]; extern const char pXP[];
@ -128,6 +132,7 @@ void generateServerKey(
// utilities.cpp // utilities.cpp
void cprintf(const char *Format, int nColor, ...); void cprintf(const char *Format, int nColor, ...);
void endiannessConvert(byte *data, int length); void endiannessConvert(byte *data, int length);
ul32 randomRange(ul32 dwLow, ul32 dwHigh);
EC_GROUP *initializeEllipticCurve( EC_GROUP *initializeEllipticCurve(
const char *pSel, const char *pSel,

View File

@ -6,6 +6,7 @@
#include "header.h" #include "header.h"
HANDLE hConsole; HANDLE hConsole;
ul32 dwSeed;
byte charset[] = "BCDFGHJKMPQRTVWXY2346789"; byte charset[] = "BCDFGHJKMPQRTVWXY2346789";
int mainServer() { int mainServer() {
@ -143,12 +144,12 @@ int main() {
hConsole = GetStdHandle(STD_OUTPUT_HANDLE); hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
srand(GetTickCount64());
HINSTANCE hInstance = GetModuleHandleW(nullptr); HINSTANCE hInstance = GetModuleHandleW(nullptr);
int p = InitializeWindow(hInstance); int p = InitializeWindow(hInstance);
SetConsoleTitleA("Windows XP VLK Keygen");
system("cls"); system("cls");
cprintf("Windows XP VLK Keygen\n\n", 0x08); cprintf("Windows XP VLK Keygen\n\n", 0x08);
@ -173,6 +174,4 @@ int main() {
printf("\t2. Hash = (First32Bits(SHA1(pRaw, r.x, r.y)) >> 4.\n"); printf("\t2. Hash = (First32Bits(SHA1(pRaw, r.x, r.y)) >> 4.\n");
printf("\t3. Signature = privateKey * Hash + (C %% Order)\n"); printf("\t3. Signature = privateKey * Hash + (C %% Order)\n");
printf("Finally, we pack these components together, convert them to Base24 and get a valid Windows XP key.\n"); printf("Finally, we pack these components together, convert them to Base24 and get a valid Windows XP key.\n");
cprintf("Input Raw Product Key BBB-CCCCCC WITHOUT DASHES in range [100-000000; 999-999999]: ", 0x0E);
} }

View File

@ -4,7 +4,7 @@
#include "header.h" #include "header.h"
/* Colored output */ /* Colored output. */
void cprintf(const char *Format, int nColor, ...) { void cprintf(const char *Format, int nColor, ...) {
va_list vList; va_list vList;
@ -26,6 +26,7 @@ void endiannessConvert(byte *data, int length) {
} }
} }
/* Initializes the elliptic curve. */
EC_GROUP *initializeEllipticCurve( EC_GROUP *initializeEllipticCurve(
const char *pSel, const char *pSel,
long aSel, long aSel,
@ -65,6 +66,8 @@ EC_GROUP *initializeEllipticCurve(
// Context variable // Context variable
context = BN_CTX_new(); context = BN_CTX_new();
/* Public data */ /* Public data */
BN_hex2bn(&p, pSel); BN_hex2bn(&p, pSel);
BN_set_word(a, aSel); BN_set_word(a, aSel);
@ -97,3 +100,8 @@ EC_GROUP *initializeEllipticCurve(
return eCurve; return eCurve;
} }
/* Generates a random 32-bit integer in range. */
ul32 randomRange(ul32 dwLow, ul32 dwHigh) {
return rand() % (dwHigh - dwLow) + dwLow;
}

View File

@ -1,4 +1,4 @@
// //
// Created by Andrew on 10/04/2023. // Created by Andrew on 10/04/2023.
// //
@ -13,33 +13,8 @@
HWND hMainWindow; HWND hMainWindow;
const WCHAR *pAboutLink = L"http://github.com/Endermanch/XPKeygen"; const WCHAR *pAboutLink = L"https://github.com/Endermanch/XPKeygen",
*pWebsite = L"https://malwarewatch.org";
void InitializeFonts(HFONT *hLabelFont, HFONT *hSmolFont, HFONT *hBoldFont, HFONT *hCaptionFont) {
NONCLIENTMETRICSW nonClientMetrics;
// Get information about the default system font.
nonClientMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nonClientMetrics, 0);
ULONG defaultHeight = nonClientMetrics.lfMessageFont.lfHeight;
// Create default font.
*hLabelFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create smol font.
nonClientMetrics.lfMessageFont.lfHeight = 12;
*hSmolFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create bold font.
nonClientMetrics.lfMessageFont.lfWeight = 700;
nonClientMetrics.lfMessageFont.lfHeight = defaultHeight;
*hBoldFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create caption font.
nonClientMetrics.lfMessageFont.lfHeight = 30;
*hCaptionFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
}
bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) { bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
HANDLE hResInfo = FindResourceW(hInstance, lpName, L"WAVE"); HANDLE hResInfo = FindResourceW(hInstance, lpName, L"WAVE");
@ -58,6 +33,63 @@ bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
return sndPlaySoundW(lpRes, SND_MEMORY | bFlags); return sndPlaySoundW(lpRes, SND_MEMORY | bFlags);
} }
/* Static link processor. */
LRESULT StaticLinkProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
static TRACKMOUSEEVENT trackMouse;
static BOOL isSet = FALSE;
// The worst part here was to avoid pointer flickering, as well as spamming the SetCursor function.
switch (uMsg) {
// Set the struct up outside of a frequently executed message to speed things up.
case WM_APP + IDC_LABEL4: {
trackMouse.cbSize = sizeof(TRACKMOUSEEVENT);
trackMouse.dwFlags = TME_LEAVE;
trackMouse.dwHoverTime = HOVER_DEFAULT;
trackMouse.hwndTrack = hWindow;
break;
}
// You have to turn off the WM_SETCURSOR, because it spams the SetCursor function with IDC_ARROW in the DefWndProc. Moist garbage.
case WM_SETCURSOR: break;
// Set cursor to hand if it's inside of static area, refresh the mouse tracking loop.
case WM_MOUSEMOVE: {
if (!isSet) {
TrackMouseEvent(&trackMouse);
SetCursor(LoadCursorW(NULL, IDC_HAND));
isSet = TRUE;
}
break;
}
// Set cursor back to normal if it's outside of static area.
case WM_MOUSELEAVE: {
if (isSet) {
SetCursor(LoadCursorW(NULL, IDC_ARROW));
isSet = FALSE;
}
break;
}
// Remove the subclass before window closes.
case WM_NCDESTROY: {
RemoveWindowSubclass(hWindow, StaticLinkProc, 1);
break;
}
// Pass everything else to DefWndProc.
default: return DefSubclassProc(hWindow, uMsg, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) { LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault, static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault,
hBtn1Select, hBtn1Hot, hBtn1Select, hBtn1Hot,
@ -115,13 +147,6 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
break; break;
case WM_PAINT: { case WM_PAINT: {
RECT rGroup = {
10,
165,
589,
430
};
SelectObject(hMainDC, hFrameColor); SelectObject(hMainDC, hFrameColor);
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH)); SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
@ -138,6 +163,14 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
SetTextColor((HDC)wParam, RGB(255, 255, 0)); SetTextColor((HDC)wParam, RGB(255, 255, 0));
return (LRESULT)(hBGColorSec); return (LRESULT)(hBGColorSec);
} }
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL4)) {
SetTextColor((HDC)wParam, RGB(140, 140, 255));
return (LRESULT)(hBGColorPrim);
}
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL5)) {
SetTextColor((HDC)wParam, RGB(255, 140, 140));
return (LRESULT)(hBGColorPrim);
}
else { else {
SetTextColor((HDC)wParam, RGB(255, 255, 255)); SetTextColor((HDC)wParam, RGB(255, 255, 255));
return (LRESULT)(hBGColorPrim); return (LRESULT)(hBGColorPrim);
@ -158,11 +191,6 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
return (LRESULT)(hBGColorSec); return (LRESULT)(hBGColorSec);
case WM_CHAR:
if (LOWORD(wParam) == VK_TAB)
SetFocus(GetNextDlgTabItem(hWindow, NULL, FALSE));
break;
case WM_NOTIFY: { case WM_NOTIFY: {
LPNMHDR nmHeader = (LPNMHDR)lParam; LPNMHDR nmHeader = (LPNMHDR)lParam;
@ -216,7 +244,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
break; break;
default: default:
goto execute; return CDRF_DODEFAULT;
} }
SetBkMode(item->hdc, TRANSPARENT); SetBkMode(item->hdc, TRANSPARENT);
@ -273,6 +301,17 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
break; break;
} }
case IDC_LABEL4: {
switch (HIWORD(wParam)) {
case STN_CLICKED:
ShellExecuteW(hWindow, L"open", pWebsite, nullptr, nullptr, SW_SHOWNORMAL);
break;
}
break;
}
case IDC_BUTTON1: { case IDC_BUTTON1: {
ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL); ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL);
@ -291,7 +330,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
int pSSection = 0; int pSSection = 0;
for (int i = 0; i < 6; i++) for (int i = 0; i < wcslen(pCSection); i++)
pSSection -= pCSection[i] - '0'; pSSection -= pCSection[i] - '0';
while (pSSection < 0) while (pSSection < 0)
@ -335,10 +374,21 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
case IDC_BUTTON3: { case IDC_BUTTON3: {
DestroyWindow(hWindow); DestroyWindow(hWindow);
return 0; return 0;
} }
case IDC_BUTTON4: { case IDC_BUTTON4: {
ul32 msDigits = randomRange(0, 999),
lsDigits = randomRange(0, 999'999);
WCHAR pBSection[4]{}, pCSection[8]{};
wsprintfW(pBSection, L"%03d", msDigits);
wsprintfW(pCSection, L"%06d", lsDigits);
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT1), WM_SETTEXT, 0, (LPARAM)pBSection);
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT2), WM_SETTEXT, 0, (LPARAM)pCSection);
break; break;
} }
@ -393,6 +443,31 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
return 0; return 0;
} }
void InitializeFonts(HFONT *hLabelFont, HFONT *hSmolFont, HFONT *hBoldFont, HFONT *hCaptionFont) {
NONCLIENTMETRICSW nonClientMetrics;
// Get information about the default system font.
nonClientMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nonClientMetrics, 0);
ULONG defaultHeight = nonClientMetrics.lfMessageFont.lfHeight;
// Create default font.
*hLabelFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create smol font.
nonClientMetrics.lfMessageFont.lfHeight = 12;
*hSmolFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create bold font.
nonClientMetrics.lfMessageFont.lfWeight = 700;
nonClientMetrics.lfMessageFont.lfHeight = defaultHeight;
*hBoldFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
// Create caption font.
nonClientMetrics.lfMessageFont.lfHeight = 30;
*hCaptionFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
}
bool InitializeWindow(HINSTANCE hInstance) { bool InitializeWindow(HINSTANCE hInstance) {
HFONT hLabelFont, HFONT hLabelFont,
@ -419,7 +494,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont); InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont);
const int w = 615, const int w = 615,
h = 480, h = 495,
x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2, x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2,
y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
@ -624,7 +699,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
ES_MULTILINE | ES_READONLY | ES_MULTILINE | ES_READONLY |
ES_LEFT | ES_UPPERCASE, ES_LEFT | ES_UPPERCASE,
20, 250, 20, 250,
w - 57, h - 350, w - 57, h - 360,
hMainWindow, hMainWindow,
(HMENU)IDC_EDIT1, (HMENU)IDC_EDIT1,
hInstance, hInstance,
@ -639,7 +714,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
L"About", L"About",
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_TABSTOP |
BS_PUSHBUTTON, BS_PUSHBUTTON,
44, h - 90, 44, h - 102,
100, 27, 100, 27,
hMainWindow, hMainWindow,
(HMENU)IDC_BUTTON1, (HMENU)IDC_BUTTON1,
@ -655,7 +730,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
L"Generate", L"Generate",
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_TABSTOP |
BS_PUSHBUTTON, BS_PUSHBUTTON,
250, h - 90, 250, h - 102,
100, 27, 100, 27,
hMainWindow, hMainWindow,
(HMENU)IDC_BUTTON2, (HMENU)IDC_BUTTON2,
@ -671,7 +746,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
L"Quit", L"Quit",
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_TABSTOP |
BS_PUSHBUTTON, BS_PUSHBUTTON,
w - 160, h - 90, w - 160, h - 102,
100, 27, 100, 27,
hMainWindow, hMainWindow,
(HMENU)IDC_BUTTON3, (HMENU)IDC_BUTTON3,
@ -681,6 +756,42 @@ bool InitializeWindow(HINSTANCE hInstance) {
SendMessageW(hQuit, WM_SETFONT, (WPARAM)hLabelFont, 0); SendMessageW(hQuit, WM_SETFONT, (WPARAM)hLabelFont, 0);
const WCHAR *pVersion = L"2.1";
WCHAR pVersionString[256]{};
wsprintfW(pVersionString, L"v%s • %s", pVersion, pWebsite);
HWND hVersion = CreateWindowExW(
0,
L"Static",
pVersionString,
WS_CHILD | WS_VISIBLE |
SS_NOTIFY,
10, 436,
170, 16,
hMainWindow, (HMENU)IDC_LABEL4,
hInstance, nullptr
);
SetWindowSubclass(hVersion, StaticLinkProc, IDC_LABEL4, 0);
SendMessageW(hVersion, WM_SETFONT, (WPARAM)hSmolFont, 0);
SendMessageW(hVersion, WM_APP + IDC_LABEL4, 0, 0);
HWND hMotto = CreateWindowExW(
0,
L"Static",
L"we keep on downloading ◄ 11/04/2023",
WS_CHILD | WS_VISIBLE,
w - (170 + 15), 436,
170, 16,
hMainWindow, (HMENU)IDC_LABEL5,
hInstance, nullptr
);
SendMessageW(hMotto, WM_SETFONT, (WPARAM)hSmolFont, 0);
ShowWindow(hMainWindow, SW_SHOW); ShowWindow(hMainWindow, SW_SHOW);
UpdateWindow(hMainWindow); UpdateWindow(hMainWindow);