QWORD / AuthInfo / Upgrade Bit / ComboBox
This commit is contained in:
parent
6dca6a1023
commit
c87069ecc1
|
@ -290,6 +290,7 @@
|
||||||
<Media Include="resources\pxiii.wav" />
|
<Media Include="resources\pxiii.wav" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Image Include="resources\dropdown.bmp" />
|
||||||
<Image Include="resources\ender.bmp" />
|
<Image Include="resources\ender.bmp" />
|
||||||
<Image Include="resources\icon.ico" />
|
<Image Include="resources\icon.ico" />
|
||||||
<Image Include="resources\logo.bmp" />
|
<Image Include="resources\logo.bmp" />
|
||||||
|
|
|
@ -66,6 +66,9 @@
|
||||||
<Image Include="resources\musicon.bmp">
|
<Image Include="resources\musicon.bmp">
|
||||||
<Filter>Resources</Filter>
|
<Filter>Resources</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="resources\dropdown.bmp">
|
||||||
|
<Filter>Resources</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="resource.rc">
|
<ResourceCompile Include="resource.rc">
|
||||||
|
|
50
header.h
50
header.h
|
@ -42,22 +42,28 @@
|
||||||
#define IDC_BUTTON3 1002
|
#define IDC_BUTTON3 1002
|
||||||
#define IDC_BUTTON4 1003
|
#define IDC_BUTTON4 1003
|
||||||
|
|
||||||
#define IDC_RADIO1 1005
|
#define IDC_COMBO1 1020
|
||||||
#define IDC_RADIO2 1006
|
|
||||||
|
|
||||||
#define IDC_EDIT1 1010
|
#define IDC_RADIO1 1030
|
||||||
|
#define IDC_RADIO2 1031
|
||||||
|
|
||||||
#define IDC_INPUT1 1020
|
#define IDC_CHECK1 1036
|
||||||
#define IDC_INPUT2 1021
|
|
||||||
|
|
||||||
#define IDC_IMAGE1 1050
|
#define IDC_EDIT1 1040
|
||||||
#define IDC_IMAGE2 1051
|
|
||||||
|
|
||||||
#define IDC_LABEL1 1055
|
#define IDC_INPUT1 1060
|
||||||
#define IDC_LABEL2 1056
|
#define IDC_INPUT2 1061
|
||||||
#define IDC_LABEL3 1057
|
#define IDC_INPUT3 1062
|
||||||
#define IDC_LABEL4 1058
|
|
||||||
#define IDC_LABEL5 1059
|
#define IDC_IMAGE1 1080
|
||||||
|
#define IDC_IMAGE2 1081
|
||||||
|
|
||||||
|
#define IDC_LABEL1 1105
|
||||||
|
#define IDC_LABEL2 1106
|
||||||
|
#define IDC_LABEL3 1107
|
||||||
|
#define IDC_LABEL4 1108
|
||||||
|
#define IDC_LABEL5 1109
|
||||||
|
#define IDC_LABEL6 1110
|
||||||
|
|
||||||
typedef uint64_t QWORD;
|
typedef uint64_t QWORD;
|
||||||
|
|
||||||
|
@ -67,12 +73,12 @@ extern const char pXP[];
|
||||||
extern const long aXP;
|
extern const long aXP;
|
||||||
extern const long bXP;
|
extern const long bXP;
|
||||||
|
|
||||||
|
|
||||||
// xp.cpp
|
// xp.cpp
|
||||||
VOID unpackXP(
|
VOID unpackXP(
|
||||||
QWORD (&pRaw)[2],
|
QWORD(&pRaw)[2],
|
||||||
BOOL &pUpgrade,
|
BOOL &pUpgrade,
|
||||||
DWORD &pSerial,
|
DWORD &pChannelID,
|
||||||
|
DWORD &pSequence,
|
||||||
DWORD &pHash,
|
DWORD &pHash,
|
||||||
QWORD &pSignature
|
QWORD &pSignature
|
||||||
);
|
);
|
||||||
|
@ -80,18 +86,12 @@ VOID unpackXP(
|
||||||
VOID packXP(
|
VOID packXP(
|
||||||
QWORD (&pRaw)[2],
|
QWORD (&pRaw)[2],
|
||||||
BOOL pUpgrade,
|
BOOL pUpgrade,
|
||||||
DWORD pSerial,
|
DWORD pChannelID,
|
||||||
|
DWORD pSequence,
|
||||||
DWORD pHash,
|
DWORD pHash,
|
||||||
QWORD pSignature
|
QWORD pSignature
|
||||||
);
|
);
|
||||||
|
|
||||||
BOOL verifyXPKey(
|
|
||||||
EC_GROUP *eCurve,
|
|
||||||
EC_POINT *basePoint,
|
|
||||||
EC_POINT *publicKey,
|
|
||||||
CHAR (&pKey)[PK_LENGTH + NULL_TERMINATOR]
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID generateXPKey(
|
VOID generateXPKey(
|
||||||
EC_GROUP *eCurve,
|
EC_GROUP *eCurve,
|
||||||
EC_POINT *basePoint,
|
EC_POINT *basePoint,
|
||||||
|
@ -184,8 +184,8 @@ int BN_bn2lebin(const BIGNUM *a, unsigned char *to, int tolen);
|
||||||
bool unbase24(BYTE *byteSeq, CHAR (&pKey)[PK_LENGTH + NULL_TERMINATOR]);
|
bool unbase24(BYTE *byteSeq, CHAR (&pKey)[PK_LENGTH + NULL_TERMINATOR]);
|
||||||
void base24(BYTE *byteSeq, CHAR(&pKey)[PK_LENGTH + NULL_TERMINATOR]);
|
void base24(BYTE *byteSeq, CHAR(&pKey)[PK_LENGTH + NULL_TERMINATOR]);
|
||||||
|
|
||||||
void formatXP(WCHAR *pBSection, WCHAR *pCSection, WCHAR *pText);
|
VOID formatXP(BOOL bUpgrade, WCHAR *pBSection, WCHAR *pCSection, WCHAR *pText);
|
||||||
void formatServer(WCHAR *pText);
|
VOID formatServer(BOOL bUpgrade, WCHAR *pBSection, WCHAR *pAuthSection, WCHAR *pText);
|
||||||
|
|
||||||
|
|
||||||
// windows.cpp
|
// windows.cpp
|
||||||
|
|
62
key.cpp
62
key.cpp
|
@ -73,10 +73,9 @@ void base24(BYTE *byteSeq, CHAR(&pKey)[PK_LENGTH + NULL_TERMINATOR]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Formats Windows XP key output. */
|
/* Formats Windows XP key output. */
|
||||||
void formatXP(WCHAR *pBSection, WCHAR *pCSection, WCHAR *pText) {
|
void formatXP(BOOL bUpgrade, WCHAR *pBSection, WCHAR *pCSection, WCHAR *pText) {
|
||||||
WCHAR pDashedKey[PK_LENGTH + 4 + NULL_TERMINATOR]{};
|
WCHAR pDashedKey[PK_LENGTH + 4 + NULL_TERMINATOR]{};
|
||||||
|
INT pSSection = 0;
|
||||||
int pSSection = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < wcslen(pCSection); i++)
|
for (int i = 0; i < wcslen(pCSection); i++)
|
||||||
pSSection -= pCSection[i] - '0';
|
pSSection -= pCSection[i] - '0';
|
||||||
|
@ -85,68 +84,81 @@ void formatXP(WCHAR *pBSection, WCHAR *pCSection, WCHAR *pText) {
|
||||||
pSSection += 7;
|
pSSection += 7;
|
||||||
|
|
||||||
CHAR pKey[PK_LENGTH + NULL_TERMINATOR]{};
|
CHAR pKey[PK_LENGTH + NULL_TERMINATOR]{};
|
||||||
DWORD pChannelID = _wtoi(pBSection),
|
DWORD nChannelID = wcstoul(pBSection, nullptr, 10),
|
||||||
pSequence = _wtoi(pCSection);
|
nSequence = wcstoul(pCSection, nullptr, 10);
|
||||||
|
|
||||||
|
BOOL bValid = keyXP(pKey, nChannelID, nSequence, bUpgrade);
|
||||||
|
|
||||||
DWORD pHash;
|
|
||||||
QWORD pRaw[2]{},
|
QWORD pRaw[2]{},
|
||||||
pSignature;
|
pSignature;
|
||||||
|
|
||||||
bool bValid = keyXP(pKey, pChannelID, pSequence, false);
|
DWORD pChannelID,
|
||||||
|
pSequence,
|
||||||
|
pSerial,
|
||||||
|
pHash;
|
||||||
|
|
||||||
DWORD pSerial;
|
BOOL pUpgrade;
|
||||||
BOOL pUpgrade = false;
|
|
||||||
|
|
||||||
unbase24((BYTE *)pRaw, pKey);
|
unbase24((BYTE *)pRaw, pKey);
|
||||||
unpackXP(pRaw, pUpgrade, pSerial, pHash, pSignature);
|
unpackXP(pRaw, pUpgrade, pChannelID, pSequence, pHash, pSignature);
|
||||||
|
|
||||||
|
pSerial = pChannelID * 1'000'000 + pSequence;
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
wsprintfW(pDashedKey, L"%s%s%.5S", pDashedKey, i != 0 ? L"-" : L"", &pKey[5 * i]);
|
wsprintfW(pDashedKey, L"%s%s%.5S", pDashedKey, i != 0 ? L"-" : L"", &pKey[5 * i]);
|
||||||
|
|
||||||
swprintf(
|
swprintf(
|
||||||
pText,
|
pText,
|
||||||
L"Product ID:\tPPPPP-%03d-%06d%d-23XXX\r\n\r\nBytecode:\t%016llX %016llX\r\nHash:\t\t%lX\r\nSignature:\t%llX\r\nCurve Point:\t%s\r\n\r\n%s\r\n",
|
L"PRODUCT ID:\tPPPPP-%03d-%06d%d-23XXX\r\n\r\nBYTECODE:\t%016llX %016llX\r\nUPGRADE:\t%s\r\nSERIAL:\t\t0x%lX (%d)\r\nHASH:\t\t0x%lX\r\nSIGNATURE:\t0x%llX\r\nCURVE POINT:\t%s\r\n\r\n\r\n%s\r\n",
|
||||||
pSerial / 1'000'000,
|
pChannelID,
|
||||||
pSerial % 1'000'000,
|
pSequence,
|
||||||
pSSection,
|
pSSection,
|
||||||
pRaw[1], pRaw[0],
|
pRaw[1], pRaw[0],
|
||||||
|
pUpgrade ? L"TRUE" : L"FALSE",
|
||||||
|
pSerial, pSerial,
|
||||||
pHash,
|
pHash,
|
||||||
pSignature,
|
pSignature,
|
||||||
bValid ? L"True" : L"False",
|
bValid ? L"TRUE" : L"FALSE",
|
||||||
pDashedKey
|
pDashedKey
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Formats Windows Server 2003 key output. */
|
/* Formats Windows Server 2003 key output. */
|
||||||
void formatServer(WCHAR *pText) {
|
void formatServer(BOOL bUpgrade, WCHAR *pBSection, WCHAR *pAuthSection, WCHAR *pText) {
|
||||||
WCHAR pDashedKey[32]{};
|
WCHAR pDashedKey[32]{};
|
||||||
|
|
||||||
char pKey[PK_LENGTH + NULL_TERMINATOR]{};
|
CHAR pKey[PK_LENGTH + NULL_TERMINATOR]{};
|
||||||
DWORD pHash = 0,
|
DWORD nChannelID = wcstoul(pBSection, nullptr, 10);
|
||||||
pChannelID = 0,
|
DWORD nAuthInfo = wcstoul(pAuthSection, nullptr, 0) % 0x400;
|
||||||
pAuthInfo = 0;
|
|
||||||
|
BOOL bValid = keyServer(pKey, nChannelID, nAuthInfo, bUpgrade);
|
||||||
|
|
||||||
QWORD pRaw[2]{},
|
QWORD pRaw[2]{},
|
||||||
pSignature;
|
pSignature;
|
||||||
|
|
||||||
BOOL pUpgrade = false;
|
DWORD pHash,
|
||||||
bool bValid = keyServer(pKey, 640, 0, pUpgrade);
|
pChannelID,
|
||||||
|
pAuthInfo;
|
||||||
|
|
||||||
|
BOOL pUpgrade;
|
||||||
|
|
||||||
unbase24((BYTE *)pRaw, pKey);
|
unbase24((BYTE *)pRaw, pKey);
|
||||||
unpackServer(pRaw, pUpgrade, pChannelID, pHash, pSignature, pAuthInfo);
|
unpackServer(pRaw, pUpgrade, pChannelID, pHash, pSignature, pAuthInfo);
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++)
|
for (int i = 0; i < 5; i++)
|
||||||
wsprintfW(pDashedKey, L"%s%s%.5S", pDashedKey, i != 0 ? L"-" : L"", &pKey[5 * i]);
|
swprintf(pDashedKey, L"%s%s%.5S", pDashedKey, i != 0 ? L"-" : L"", &pKey[5 * i]);
|
||||||
|
|
||||||
swprintf(
|
swprintf(
|
||||||
pText,
|
pText,
|
||||||
L"Bytecode:\t%016llX %016llX\r\nChannel ID:\t%d\r\nHash:\t\t%lX\r\nSignature:\t%llX\r\nAuthInfo:\t%d\r\nCurve Point:\t%s\r\n\r\n%s\r\n",
|
L"PRODUCT ID:\tPPPPP-%03d-CCCCCCS-45XXX\r\n\r\nBYTECODE:\t%016llX %016llX\r\nUPGRADE:\t%s\r\nCHANNEL ID:\t0x%lX (%d)\r\nHASH:\t\t0x%lX\r\nSIGNATURE:\t0x%llX\r\nAUTHINFO:\t0x%03lX\r\nCURVE POINT:\t%s\r\n\r\n%s\r\n",
|
||||||
pRaw[1], pRaw[0],
|
|
||||||
pChannelID,
|
pChannelID,
|
||||||
|
pRaw[1], pRaw[0],
|
||||||
|
pUpgrade ? L"TRUE" : L"FALSE",
|
||||||
|
pChannelID, pChannelID,
|
||||||
pHash,
|
pHash,
|
||||||
pSignature,
|
pSignature,
|
||||||
pAuthInfo,
|
pAuthInfo,
|
||||||
bValid ? L"True" : L"False",
|
bValid ? L"TRUE" : L"FALSE",
|
||||||
pDashedKey
|
pDashedKey
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,13 @@
|
||||||
#define IDB_BITMAP2 104
|
#define IDB_BITMAP2 104
|
||||||
#define IDB_BITMAP3 105
|
#define IDB_BITMAP3 105
|
||||||
#define IDB_BITMAP4 106
|
#define IDB_BITMAP4 106
|
||||||
|
#define IDB_BITMAP5 107
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 107
|
#define _APS_NEXT_RESOURCE_VALUE 108
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
|
BIN
resource.rc
BIN
resource.rc
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 182 B |
|
@ -43,7 +43,7 @@ const char pubYSv[] = "A186A2C2913E5584F05E97D3CD49E354E6C41BE329877D7FCC7B2BF87
|
||||||
const char genOrderSv[] = "41601E16BF4A1621";
|
const char genOrderSv[] = "41601E16BF4A1621";
|
||||||
|
|
||||||
// Computed private key <- CALCULATED ON MY i7-12700K in 5 minutes 40 seconds
|
// Computed private key <- CALCULATED ON MY i7-12700K in 5 minutes 40 seconds
|
||||||
const char privateKeySv[] = "4136708280A72C0C";*/
|
const char privateKeySv[] = "29AD943EA2EA15"; */
|
||||||
|
|
||||||
|
|
||||||
/* Windows XP x64 OEM
|
/* Windows XP x64 OEM
|
||||||
|
|
519
windows.cpp
519
windows.cpp
|
@ -15,13 +15,65 @@ HWND hMainWindow;
|
||||||
|
|
||||||
const WCHAR *pAboutLink = L"https://github.com/Endermanch/XPKeygen",
|
const WCHAR *pAboutLink = L"https://github.com/Endermanch/XPKeygen",
|
||||||
*pWebsite = L"https://malwarewatch.org",
|
*pWebsite = L"https://malwarewatch.org",
|
||||||
*pVersion = L"2.3",
|
*pVersion = L"2.5",
|
||||||
*pTitle = L"Windows XP Pro SP3 // Server 2003 SP0 x86 VLK - Enderman[ch]",
|
*pTitle = L"Windows XP Pro SP3 // Server 2003 SP0 x86 VLK - Enderman[ch]",
|
||||||
*pGroupTitle = L"Windows XP Pro SP3 // Server 2003 SP0 x86 VLK";
|
*pGroupTitle = L"Windows XP Pro SP3 // Server 2003 SP0 x86 VLK",
|
||||||
|
*pRBText = L"z22 / MSKey / Endermanch ◄ 14/06/2023";
|
||||||
|
|
||||||
bool bServer = false,
|
bool bServer = false,
|
||||||
|
bUpgrade = false,
|
||||||
bMusic = true;
|
bMusic = true;
|
||||||
|
|
||||||
|
const int w = 615,
|
||||||
|
h = 545,
|
||||||
|
x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2,
|
||||||
|
y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
||||||
|
|
||||||
|
/* Hexadecimal edit processor. */
|
||||||
|
LRESULT HexEditProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
|
||||||
|
static EDITBALLOONTIP balloonTip;
|
||||||
|
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_APP + IDC_EDIT1: {
|
||||||
|
balloonTip.cbStruct = sizeof(EDITBALLOONTIP);
|
||||||
|
balloonTip.pszTitle = L"Unacceptable Character";
|
||||||
|
balloonTip.pszText = L"You can only type decimal/hexadecimal numbers here.";
|
||||||
|
balloonTip.ttiIcon = TTI_ERROR;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_CHAR: {
|
||||||
|
WCHAR isXPresent[2 + 1]; // 0x and the NULL terminator.
|
||||||
|
|
||||||
|
WCHAR hexNumber = toupper(wParam);
|
||||||
|
ULONG hexLength = SendMessageW(hWindow, WM_GETTEXTLENGTH, 0, 0);
|
||||||
|
|
||||||
|
SendMessageW(hWindow, WM_GETTEXT, 3, (LPARAM)isXPresent);
|
||||||
|
|
||||||
|
if (hexNumber >= L'A' && hexNumber <= L'F' && toupper(isXPresent[1]) == 'X' ||
|
||||||
|
hexNumber >= L'0' && hexNumber <= L'9' ||
|
||||||
|
hexNumber == L'X' && hexLength == 0x01 ||
|
||||||
|
hexNumber < L' ' || hexLength == 0x0C) goto forward;
|
||||||
|
|
||||||
|
SendMessageW(hWindow, EM_SHOWBALLOONTIP, 0, (LPARAM)&balloonTip);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_NCDESTROY: {
|
||||||
|
RemoveWindowSubclass(hWindow, HexEditProc, 1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
forward:
|
||||||
|
default: return DefSubclassProc(hWindow, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Bitmap link processor. */
|
/* Bitmap link processor. */
|
||||||
LRESULT BitmapLinkProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
|
LRESULT BitmapLinkProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
|
||||||
static TRACKMOUSEEVENT trackMouse;
|
static TRACKMOUSEEVENT trackMouse;
|
||||||
|
@ -136,6 +188,98 @@ LRESULT StaticLinkProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UI
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Combo box processor. */
|
||||||
|
LRESULT CALLBACK ComboProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
|
||||||
|
switch (uMsg) {
|
||||||
|
case WM_PAINT: {
|
||||||
|
// If the combobox isn't dropdown-only, there's no support for it.
|
||||||
|
if ((GetWindowLongPtrW(hWindow, GWL_STYLE) & CBS_DROPDOWNLIST) == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
RECT rClient;
|
||||||
|
PAINTSTRUCT paintStruct;
|
||||||
|
BITMAP pBitmap;
|
||||||
|
|
||||||
|
HDC hClientDC = BeginPaint(hWindow, &paintStruct),
|
||||||
|
hCompatDC = CreateCompatibleDC(hClientDC);
|
||||||
|
|
||||||
|
HBITMAP hDropDownBitmap = LoadBitmapW((HINSTANCE)GetWindowLongPtrW(hWindow, GWLP_HINSTANCE), MAKEINTRESOURCEW(IDB_BITMAP5));
|
||||||
|
HBRUSH hBlackBrush = CreateSolidBrush(RGB(0, 0, 0));
|
||||||
|
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(128, 128, 128));
|
||||||
|
HGDIOBJ hOldBrush = SelectObject(hClientDC, hBlackBrush),
|
||||||
|
hOldPen = SelectObject(hClientDC, hPen),
|
||||||
|
hOldBitmap = SelectObject(hCompatDC, hDropDownBitmap);
|
||||||
|
|
||||||
|
// Acquire client coordinates, select current font of the window.
|
||||||
|
GetClientRect(hWindow, &rClient);
|
||||||
|
SelectObject(hClientDC, (HFONT)SendMessage(hWindow, WM_GETFONT, 0, 0));
|
||||||
|
|
||||||
|
// Draw border.
|
||||||
|
Rectangle(hClientDC, 0, 0, rClient.right, rClient.bottom);
|
||||||
|
|
||||||
|
// Set background and foreground text colors.
|
||||||
|
SetBkColor(hClientDC, RGB(0, 0, 0));
|
||||||
|
SetTextColor(hClientDC, RGB(255, 255, 255));
|
||||||
|
|
||||||
|
// Select bitmap object and copy bits.
|
||||||
|
GetObjectW(hDropDownBitmap, sizeof(pBitmap), &pBitmap);
|
||||||
|
BitBlt(
|
||||||
|
hClientDC,
|
||||||
|
rClient.right - (pBitmap.bmWidth + 3),
|
||||||
|
rClient.bottom - (rClient.bottom - rClient.top + pBitmap.bmHeight) / 2,
|
||||||
|
pBitmap.bmWidth, pBitmap.bmHeight,
|
||||||
|
hCompatDC,
|
||||||
|
0, 0,
|
||||||
|
SRCCOPY
|
||||||
|
);
|
||||||
|
|
||||||
|
// Re-select old bitmap.
|
||||||
|
SelectObject(hCompatDC, hOldBitmap);
|
||||||
|
|
||||||
|
INT nSelect = SendMessageW(hWindow, CB_GETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
// If an item is selected, we need to draw it as well.
|
||||||
|
if (nSelect >= 0) {
|
||||||
|
INT nLength = SendMessageW(hWindow, CB_GETLBTEXTLEN, nSelect, 0);
|
||||||
|
WCHAR *pBuffer = (WCHAR *)calloc(nLength + NULL_TERMINATOR, sizeof(WCHAR));
|
||||||
|
|
||||||
|
// Acquire item text.
|
||||||
|
SendMessageW(hWindow, CB_GETLBTEXT, nSelect, (LPARAM)pBuffer);
|
||||||
|
|
||||||
|
// Add left margin and draw text.
|
||||||
|
rClient.left += 5;
|
||||||
|
DrawTextW(
|
||||||
|
hClientDC,
|
||||||
|
pBuffer,
|
||||||
|
-1,
|
||||||
|
&rClient,
|
||||||
|
DT_EDITCONTROL | DT_LEFT | DT_VCENTER | DT_SINGLELINE
|
||||||
|
);
|
||||||
|
|
||||||
|
free(pBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-select previous objects.
|
||||||
|
SelectObject(hClientDC, hOldPen);
|
||||||
|
SelectObject(hClientDC, hOldBrush);
|
||||||
|
|
||||||
|
// Free memory.
|
||||||
|
DeleteObject(hBlackBrush);
|
||||||
|
DeleteObject(hPen);
|
||||||
|
|
||||||
|
EndPaint(hWindow, &paintStruct);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_NCDESTROY: {
|
||||||
|
RemoveWindowSubclass(hWindow, ComboProc, uIdSubclass);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefSubclassProc(hWindow, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
/* Main window processor. */
|
/* Main window processor. */
|
||||||
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
|
||||||
static HINSTANCE hInstance;
|
static HINSTANCE hInstance;
|
||||||
|
@ -209,7 +353,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
SelectObject(hMainDC, hFrameColor);
|
SelectObject(hMainDC, hFrameColor);
|
||||||
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
|
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
|
||||||
|
|
||||||
RoundRect(hMainDC, 10, 165, 589, 430, 12, 12);
|
RoundRect(hMainDC, 10, 165, w - 26, h - 65, 12, 12);
|
||||||
InvalidateRect(GetDlgItem(hWindow, IDC_LABEL1), nullptr, true);
|
InvalidateRect(GetDlgItem(hWindow, IDC_LABEL1), nullptr, true);
|
||||||
|
|
||||||
goto execute;
|
goto execute;
|
||||||
|
@ -228,10 +372,12 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
}
|
}
|
||||||
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL4)) {
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL4)) {
|
||||||
SetTextColor((HDC)wParam, RGB(140, 140, 255));
|
SetTextColor((HDC)wParam, RGB(140, 140, 255));
|
||||||
|
|
||||||
return (LRESULT)(hBGColorPrim);
|
return (LRESULT)(hBGColorPrim);
|
||||||
}
|
}
|
||||||
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL5)) {
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL5)) {
|
||||||
SetTextColor((HDC)wParam, RGB(255, 140, 140));
|
SetTextColor((HDC)wParam, RGB(255, 140, 140));
|
||||||
|
|
||||||
return (LRESULT)(hBGColorPrim);
|
return (LRESULT)(hBGColorPrim);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -250,10 +396,31 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT2)) {
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT2)) {
|
||||||
SetTextColor((HDC)wParam, RGB(140, 140, 255));
|
SetTextColor((HDC)wParam, RGB(140, 140, 255));
|
||||||
}
|
}
|
||||||
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT3)) {
|
||||||
|
SetTextColor((HDC)wParam, RGB(255, 255, 140));
|
||||||
|
}
|
||||||
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_COMBO1)) {
|
||||||
|
SetTextColor((HDC)wParam, RGB(255, 255, 255));
|
||||||
|
}
|
||||||
else goto execute;
|
else goto execute;
|
||||||
|
|
||||||
return (LRESULT)(hBGColorSec);
|
return (LRESULT)(hBGColorSec);
|
||||||
|
|
||||||
|
case WM_CTLCOLORLISTBOX: {
|
||||||
|
COMBOBOXINFO hComboBoxInfo{};
|
||||||
|
|
||||||
|
hComboBoxInfo.cbSize = sizeof(hComboBoxInfo);
|
||||||
|
SendDlgItemMessageW(hWindow, IDC_COMBO1, CB_GETCOMBOBOXINFO, 0, (LPARAM)&hComboBoxInfo);
|
||||||
|
|
||||||
|
SetBkMode((HDC)wParam, TRANSPARENT);
|
||||||
|
|
||||||
|
if ((HWND)lParam == hComboBoxInfo.hwndList) {
|
||||||
|
SetTextColor((HDC)wParam, RGB(255, 255, 255));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (LRESULT)(hBGColorSec);
|
||||||
|
}
|
||||||
|
|
||||||
case WM_NOTIFY: {
|
case WM_NOTIFY: {
|
||||||
LPNMHDR nmHeader = (LPNMHDR)lParam;
|
LPNMHDR nmHeader = (LPNMHDR)lParam;
|
||||||
|
|
||||||
|
@ -374,10 +541,36 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IDC_COMBO1:
|
||||||
|
switch (HIWORD(wParam)) {
|
||||||
|
case CBN_SELCHANGE:
|
||||||
|
int nSelect = SendMessageW((HWND)lParam, CB_GETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
switch (nSelect) {
|
||||||
|
case 0:
|
||||||
|
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT2), true);
|
||||||
|
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT3), false);
|
||||||
|
|
||||||
|
bServer = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT2), false);
|
||||||
|
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT3), true);
|
||||||
|
|
||||||
|
bServer = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case IDC_LABEL2: {
|
case IDC_LABEL2: {
|
||||||
switch (HIWORD(wParam)) {
|
switch (HIWORD(wParam)) {
|
||||||
case STN_CLICKED:
|
case STN_CLICKED:
|
||||||
CheckRadioButton(hWindow, IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
|
SendDlgItemMessageW(hWindow, IDC_CHECK1, BM_SETCHECK, !SendDlgItemMessageW(hWindow, IDC_CHECK1, BM_GETCHECK, 0, 0), 0);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -385,21 +578,17 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
__fallthrough;
|
__fallthrough;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDC_RADIO1:
|
case IDC_CHECK1:
|
||||||
switch (HIWORD(wParam)) {
|
switch (HIWORD(wParam)) {
|
||||||
case BN_CLICKED:
|
case BN_CLICKED:
|
||||||
EnableWindow(GetDlgItem(hMainWindow, IDC_BUTTON4), true);
|
bUpgrade = IsDlgButtonChecked(hWindow, IDC_CHECK1);
|
||||||
|
|
||||||
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT1), true);
|
|
||||||
EnableWindow(GetDlgItem(hMainWindow, IDC_INPUT2), true);
|
|
||||||
|
|
||||||
bServer = false;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*
|
||||||
case IDC_LABEL3: {
|
case IDC_LABEL3: {
|
||||||
switch (HIWORD(wParam)) {
|
switch (HIWORD(wParam)) {
|
||||||
case STN_CLICKED:
|
case STN_CLICKED:
|
||||||
|
@ -425,6 +614,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
@ -433,21 +623,24 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDC_BUTTON2: {
|
case IDC_BUTTON2: {
|
||||||
WCHAR *pText = (WCHAR *)calloc(512, sizeof(WCHAR));
|
WCHAR *pText = (WCHAR *)calloc(512, sizeof(WCHAR)),
|
||||||
HWND hEdit = GetDlgItem(hMainWindow, IDC_EDIT1);
|
pBSection[4]{}, pCSection[8]{}, pAuthSection[8]{};
|
||||||
|
|
||||||
if (bServer) {
|
|
||||||
formatServer(pText);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
WCHAR pBSection[4]{}, pCSection[8]{};
|
|
||||||
HWND hInput1 = GetDlgItem(hMainWindow, IDC_INPUT1),
|
HWND hInput1 = GetDlgItem(hMainWindow, IDC_INPUT1),
|
||||||
hInput2 = GetDlgItem(hMainWindow, IDC_INPUT2);
|
hInput2 = GetDlgItem(hMainWindow, IDC_INPUT2),
|
||||||
|
hEdit = GetDlgItem(hMainWindow, IDC_EDIT1);
|
||||||
|
|
||||||
SendMessageW(hInput1, WM_GETTEXT, 3 + NULL_TERMINATOR, (LPARAM)pBSection);
|
SendMessageW(hInput1, WM_GETTEXT, 3 + NULL_TERMINATOR, (LPARAM)pBSection);
|
||||||
SendMessageW(hInput2, WM_GETTEXT, 6 + NULL_TERMINATOR, (LPARAM)pCSection);
|
SendMessageW(hInput2, WM_GETTEXT, 6 + NULL_TERMINATOR, (LPARAM)pCSection);
|
||||||
|
|
||||||
formatXP(pBSection, pCSection, pText);
|
if (bServer) {
|
||||||
|
HWND hInput3 = GetDlgItem(hMainWindow, IDC_INPUT3);
|
||||||
|
|
||||||
|
SendMessageW(hInput3, WM_GETTEXT, 5 + NULL_TERMINATOR, (LPARAM)pAuthSection);
|
||||||
|
formatServer(bUpgrade, pBSection, pAuthSection, pText);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
formatXP(bUpgrade, pBSection, pCSection, pText);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendMessageW(hEdit, WM_SETTEXT, 0, (LPARAM)pText);
|
SendMessageW(hEdit, WM_SETTEXT, 0, (LPARAM)pText);
|
||||||
|
@ -463,16 +656,16 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDC_BUTTON4: {
|
case IDC_BUTTON4: {
|
||||||
DWORD msDigits = randomRange(0, 999),
|
DWORD nChannelID = randomRange(1, 999),
|
||||||
lsDigits = randomRange(0, 999'999);
|
nSequence = randomRange(0, 999'999);
|
||||||
|
|
||||||
WCHAR pBSection[4]{}, pCSection[8]{};
|
WCHAR pBSection[4]{}, pCSection[8]{};
|
||||||
|
|
||||||
wsprintfW(pBSection, L"%03d", msDigits);
|
wsprintfW(pBSection, L"%03d", nChannelID);
|
||||||
wsprintfW(pCSection, L"%06d", lsDigits);
|
wsprintfW(pCSection, L"%06d", nSequence);
|
||||||
|
|
||||||
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT1), WM_SETTEXT, 0, (LPARAM)pBSection);
|
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT1), WM_SETTEXT, 0, (LPARAM)pBSection);
|
||||||
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT2), WM_SETTEXT, 0, (LPARAM)pCSection);
|
if (!bServer) SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT2), WM_SETTEXT, 0, (LPARAM)pCSection);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -579,11 +772,6 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
|
|
||||||
InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont);
|
InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont);
|
||||||
|
|
||||||
const int w = 615,
|
|
||||||
h = 495,
|
|
||||||
x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2,
|
|
||||||
y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
|
||||||
|
|
||||||
hMainWindow = CreateWindowExW(
|
hMainWindow = CreateWindowExW(
|
||||||
0,
|
0,
|
||||||
L"XPKeygen",
|
L"XPKeygen",
|
||||||
|
@ -650,104 +838,76 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
|
|
||||||
SendMessageW(hGroupBox, WM_SETFONT, (WPARAM)hCaptionFont, 0);
|
SendMessageW(hGroupBox, WM_SETFONT, (WPARAM)hCaptionFont, 0);
|
||||||
|
|
||||||
HWND hRPKLabel = CreateWindowExW(
|
|
||||||
0,
|
|
||||||
L"Static", L"Raw Product Key:",
|
|
||||||
WS_CHILD | WS_VISIBLE,
|
|
||||||
20, 190,
|
|
||||||
100, 16,
|
|
||||||
hMainWindow, nullptr,
|
|
||||||
hInstance, nullptr
|
|
||||||
);
|
|
||||||
|
|
||||||
SendMessageW(hRPKLabel, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
|
||||||
|
|
||||||
HWND hInput1 = CreateWindowExW(
|
|
||||||
0,
|
|
||||||
L"Edit",
|
|
||||||
L"",
|
|
||||||
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
|
|
||||||
ES_LEFT | ES_NUMBER,
|
|
||||||
130, 189,
|
|
||||||
40, 20,
|
|
||||||
hMainWindow,
|
|
||||||
(HMENU)IDC_INPUT1,
|
|
||||||
hInstance,
|
|
||||||
nullptr
|
|
||||||
);
|
|
||||||
|
|
||||||
SendMessageW(hInput1, EM_SETCUEBANNER, 0, (LPARAM)L"BBB");
|
|
||||||
SendMessageW(hInput1, WM_SETTEXT, 0, (LPARAM)L"640");
|
|
||||||
SendMessageW(hInput1, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
|
||||||
|
|
||||||
SendMessageW(hInput1, EM_SETLIMITTEXT, (WPARAM)3, 0);
|
|
||||||
|
|
||||||
HWND hRPKDash = CreateWindowExW(
|
|
||||||
0,
|
|
||||||
L"Static", L"-",
|
|
||||||
WS_CHILD | WS_VISIBLE,
|
|
||||||
173, 190,
|
|
||||||
10, 16,
|
|
||||||
hMainWindow, nullptr,
|
|
||||||
hInstance, nullptr
|
|
||||||
);
|
|
||||||
|
|
||||||
SendMessageW(hRPKDash, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
|
||||||
|
|
||||||
HWND hInput2 = CreateWindowExW(
|
|
||||||
0,
|
|
||||||
L"Edit",
|
|
||||||
L"",
|
|
||||||
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
|
|
||||||
ES_LEFT | ES_NUMBER,
|
|
||||||
181, 189,
|
|
||||||
70, 20,
|
|
||||||
hMainWindow,
|
|
||||||
(HMENU)IDC_INPUT2,
|
|
||||||
hInstance,
|
|
||||||
nullptr
|
|
||||||
);
|
|
||||||
|
|
||||||
SendMessageW(hInput2, EM_SETCUEBANNER, 0, (LPARAM)L"CCCCCC");
|
|
||||||
SendMessageW(hInput2, WM_SETTEXT, 0, (LPARAM)L"883400");
|
|
||||||
SendMessageW(hInput2, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
|
||||||
|
|
||||||
SendMessageW(hInput2, EM_SETLIMITTEXT, (WPARAM)6, 0);
|
|
||||||
|
|
||||||
HWND hRandomize = CreateWindowExW(
|
|
||||||
0,
|
|
||||||
L"Button",
|
|
||||||
L"Randomize",
|
|
||||||
WS_CHILD | WS_VISIBLE | WS_TABSTOP,
|
|
||||||
260, 188,
|
|
||||||
75, 22,
|
|
||||||
hMainWindow,
|
|
||||||
(HMENU)IDC_BUTTON4,
|
|
||||||
hInstance,
|
|
||||||
nullptr
|
|
||||||
);
|
|
||||||
|
|
||||||
SendMessageW(hRandomize, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
|
||||||
|
|
||||||
HWND hVersionLabel = CreateWindowExW(
|
HWND hVersionLabel = CreateWindowExW(
|
||||||
0,
|
0,
|
||||||
L"Static", L"Version:",
|
L"Static", L"Version:",
|
||||||
WS_CHILD | WS_VISIBLE,
|
WS_CHILD | WS_VISIBLE,
|
||||||
20, 220,
|
20, 190,
|
||||||
100, 16,
|
50, 16,
|
||||||
hMainWindow, nullptr,
|
hMainWindow, nullptr,
|
||||||
hInstance, nullptr
|
hInstance, nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
SendMessageW(hVersionLabel, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
SendMessageW(hVersionLabel, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
||||||
|
|
||||||
HWND hRadio1 = CreateWindowExW(
|
HWND hComboBox = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
WC_COMBOBOX,
|
||||||
|
L"",
|
||||||
|
WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_BORDER | WS_TABSTOP |
|
||||||
|
CBS_DROPDOWNLIST | CBS_HASSTRINGS,
|
||||||
|
70, 190 - 2,
|
||||||
|
400, 20,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_COMBO1,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SetWindowSubclass(hComboBox, (SUBCLASSPROC)ComboProc, IDC_COMBO1, 0);
|
||||||
|
|
||||||
|
SendMessageW(hComboBox, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
SendMessageW(hComboBox, CB_ADDSTRING, 0, (LPARAM)L"Windows XP (SP0 - SP3)");
|
||||||
|
SendMessageW(hComboBox, CB_ADDSTRING, 0, (LPARAM)L"Windows Server 2003 (SP0)");
|
||||||
|
|
||||||
|
SendMessageW(hComboBox, CB_SETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
HWND hUpgrade = CreateWindowExW(
|
||||||
|
WS_EX_WINDOWEDGE,
|
||||||
|
L"Button",
|
||||||
|
L"",
|
||||||
|
WS_VISIBLE | WS_CHILD | WS_TABSTOP |
|
||||||
|
BS_AUTOCHECKBOX,
|
||||||
|
480, 190 - 1,
|
||||||
|
17, 20,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_CHECK1,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hUpgrade, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
HWND hUpgradeLabel = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static",
|
||||||
|
L"Upgrade",
|
||||||
|
WS_CHILD | WS_VISIBLE |
|
||||||
|
SS_NOTIFY,
|
||||||
|
497, 190 + 1,
|
||||||
|
50, 16,
|
||||||
|
hMainWindow, (HMENU)IDC_LABEL2,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hUpgradeLabel, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
/*HWND hRadio1 = CreateWindowExW(
|
||||||
WS_EX_WINDOWEDGE,
|
WS_EX_WINDOWEDGE,
|
||||||
L"Button",
|
L"Button",
|
||||||
L"",
|
L"",
|
||||||
WS_VISIBLE | WS_CHILD | WS_GROUP | WS_TABSTOP |
|
WS_VISIBLE | WS_CHILD | WS_GROUP | WS_TABSTOP |
|
||||||
BS_AUTORADIOBUTTON,
|
BS_AUTORADIOBUTTON,
|
||||||
70, 219,
|
70, 190 - 1,
|
||||||
17, 20,
|
17, 20,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_RADIO1,
|
(HMENU)IDC_RADIO1,
|
||||||
|
@ -763,7 +923,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"Windows XP VLK",
|
L"Windows XP VLK",
|
||||||
WS_CHILD | WS_VISIBLE |
|
WS_CHILD | WS_VISIBLE |
|
||||||
SS_NOTIFY,
|
SS_NOTIFY,
|
||||||
89, 221,
|
89, 190 + 1,
|
||||||
90, 16,
|
90, 16,
|
||||||
hMainWindow, (HMENU)IDC_LABEL2,
|
hMainWindow, (HMENU)IDC_LABEL2,
|
||||||
hInstance, nullptr
|
hInstance, nullptr
|
||||||
|
@ -777,7 +937,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"",
|
L"",
|
||||||
WS_VISIBLE | WS_CHILD | WS_TABSTOP |
|
WS_VISIBLE | WS_CHILD | WS_TABSTOP |
|
||||||
BS_AUTORADIOBUTTON,
|
BS_AUTORADIOBUTTON,
|
||||||
200, 219,
|
200, 190 - 1,
|
||||||
17, 20,
|
17, 20,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_RADIO2,
|
(HMENU)IDC_RADIO2,
|
||||||
|
@ -791,13 +951,128 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"Windows Server 2003 VLK",
|
L"Windows Server 2003 VLK",
|
||||||
WS_CHILD | WS_VISIBLE |
|
WS_CHILD | WS_VISIBLE |
|
||||||
SS_NOTIFY,
|
SS_NOTIFY,
|
||||||
218, 221,
|
218, 190 + 1,
|
||||||
142, 16,
|
142, 16,
|
||||||
hMainWindow, (HMENU)IDC_LABEL3,
|
hMainWindow, (HMENU)IDC_LABEL3,
|
||||||
hInstance, nullptr
|
hInstance, nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
SendMessageW(hRadioLabel2, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
SendMessageW(hRadioLabel2, WM_SETFONT, (WPARAM)hLabelFont, 0);*/
|
||||||
|
|
||||||
|
HWND hSerialLabel = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static", L"Serial:",
|
||||||
|
WS_CHILD | WS_VISIBLE,
|
||||||
|
20, 220 + 1,
|
||||||
|
50, 16,
|
||||||
|
hMainWindow, nullptr,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hSerialLabel, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
||||||
|
|
||||||
|
HWND hChannelID = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Edit",
|
||||||
|
L"",
|
||||||
|
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
|
||||||
|
ES_LEFT | ES_NUMBER,
|
||||||
|
70, 220 - 1,
|
||||||
|
40, 20,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_INPUT1,
|
||||||
|
hInstance,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hChannelID, EM_SETCUEBANNER, 0, (LPARAM)L"BBB");
|
||||||
|
SendMessageW(hChannelID, WM_SETTEXT, 0, (LPARAM)L"640");
|
||||||
|
SendMessageW(hChannelID, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
SendMessageW(hChannelID, EM_SETLIMITTEXT, (WPARAM)3, 0);
|
||||||
|
|
||||||
|
HWND hSerialDash = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static", L"-",
|
||||||
|
WS_CHILD | WS_VISIBLE,
|
||||||
|
113, 220,
|
||||||
|
10, 16,
|
||||||
|
hMainWindow, nullptr,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hSerialDash, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
||||||
|
|
||||||
|
HWND hSequence = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Edit",
|
||||||
|
L"",
|
||||||
|
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
|
||||||
|
ES_LEFT | ES_NUMBER,
|
||||||
|
121, 220 - 1,
|
||||||
|
70, 20,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_INPUT2,
|
||||||
|
hInstance,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hSequence, EM_SETCUEBANNER, 0, (LPARAM)L"CCCCCC");
|
||||||
|
SendMessageW(hSequence, WM_SETTEXT, 0, (LPARAM)L"883400");
|
||||||
|
SendMessageW(hSequence, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
SendMessageW(hSequence, EM_SETLIMITTEXT, (WPARAM)6, 0);
|
||||||
|
|
||||||
|
HWND hRandomize = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Button",
|
||||||
|
L"Randomize",
|
||||||
|
WS_CHILD | WS_VISIBLE | WS_TABSTOP,
|
||||||
|
200, 220 - 2,
|
||||||
|
75, 22,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_BUTTON4,
|
||||||
|
hInstance,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hRandomize, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
HWND hAuthInfoLabel = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static", L"AuthInfo:",
|
||||||
|
WS_CHILD | WS_VISIBLE,
|
||||||
|
290, 220 + 1,
|
||||||
|
70, 16,
|
||||||
|
hMainWindow, nullptr,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hAuthInfoLabel, WM_SETFONT, (WPARAM)hBoldFont, 0);
|
||||||
|
|
||||||
|
HWND hAuthInfo = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Edit",
|
||||||
|
L"",
|
||||||
|
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
|
||||||
|
WS_DISABLED | ES_LEFT,
|
||||||
|
350, 220 - 1,
|
||||||
|
50, 20,
|
||||||
|
hMainWindow,
|
||||||
|
(HMENU)IDC_INPUT3,
|
||||||
|
hInstance,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SetWindowSubclass(hAuthInfo, HexEditProc, IDC_EDIT1, 0);
|
||||||
|
|
||||||
|
SendMessageW(hAuthInfo, EM_SETCUEBANNER, 0, (LPARAM)L"0 - 1023");
|
||||||
|
SendMessageW(hAuthInfo, EM_SETLIMITTEXT, (WPARAM)5, 0);
|
||||||
|
|
||||||
|
SendMessageW(hAuthInfo, WM_SETTEXT, 0, (LPARAM)L"0x1A4");
|
||||||
|
|
||||||
|
SendMessageW(hAuthInfo, WM_APP + IDC_EDIT1, 0, 0);
|
||||||
|
SendMessageW(hAuthInfo, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
HWND hEdit = CreateWindowExW(
|
HWND hEdit = CreateWindowExW(
|
||||||
0,
|
0,
|
||||||
|
@ -805,7 +1080,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"",
|
L"",
|
||||||
WS_CHILD | WS_VISIBLE | WS_BORDER |
|
WS_CHILD | WS_VISIBLE | WS_BORDER |
|
||||||
ES_MULTILINE | ES_READONLY |
|
ES_MULTILINE | ES_READONLY |
|
||||||
ES_LEFT | ES_UPPERCASE,
|
ES_LEFT,
|
||||||
20, 250,
|
20, 250,
|
||||||
w - 57, h - 360,
|
w - 57, h - 360,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
|
@ -874,7 +1149,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
pVersionString,
|
pVersionString,
|
||||||
WS_CHILD | WS_VISIBLE |
|
WS_CHILD | WS_VISIBLE |
|
||||||
SS_NOTIFY,
|
SS_NOTIFY,
|
||||||
10, 436,
|
10, h - 58,
|
||||||
170, 16,
|
170, 16,
|
||||||
hMainWindow, (HMENU)IDC_LABEL4,
|
hMainWindow, (HMENU)IDC_LABEL4,
|
||||||
hInstance, nullptr
|
hInstance, nullptr
|
||||||
|
@ -888,10 +1163,10 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
HWND hBRText = CreateWindowExW(
|
HWND hBRText = CreateWindowExW(
|
||||||
0,
|
0,
|
||||||
L"Static",
|
L"Static",
|
||||||
L"z22 / mskey / Endermanch ◄ 16/04/2023",
|
pRBText,
|
||||||
WS_CHILD | WS_VISIBLE,
|
WS_CHILD | WS_VISIBLE,
|
||||||
w - (170 + 20), 436,
|
w - (173 + 20), h - 58,
|
||||||
170, 16,
|
173, 16,
|
||||||
hMainWindow, (HMENU)IDC_LABEL5,
|
hMainWindow, (HMENU)IDC_LABEL5,
|
||||||
hInstance, nullptr
|
hInstance, nullptr
|
||||||
);
|
);
|
||||||
|
|
22
xp.cpp
22
xp.cpp
|
@ -48,7 +48,8 @@ const char privateKeyXP[] = "B9E99B9BB9812E"; // "677A485D4BE4A0";*/
|
||||||
VOID unpackXP(
|
VOID unpackXP(
|
||||||
QWORD (&pRaw)[2],
|
QWORD (&pRaw)[2],
|
||||||
BOOL &pUpgrade,
|
BOOL &pUpgrade,
|
||||||
DWORD &pSerial,
|
DWORD &pChannelID,
|
||||||
|
DWORD &pSequence,
|
||||||
DWORD &pHash,
|
DWORD &pHash,
|
||||||
QWORD &pSignature
|
QWORD &pSignature
|
||||||
) {
|
) {
|
||||||
|
@ -59,7 +60,8 @@ VOID unpackXP(
|
||||||
pUpgrade = FIRSTNBITS(pRaw[0], 1);
|
pUpgrade = FIRSTNBITS(pRaw[0], 1);
|
||||||
|
|
||||||
// Serial = Bits [1..30] -> 30 bits
|
// Serial = Bits [1..30] -> 30 bits
|
||||||
pSerial = NEXTSNBITS(pRaw[0], 30, 1);
|
pChannelID = NEXTSNBITS(pRaw[0], 30, 1) / 1'000'000;
|
||||||
|
pSequence = NEXTSNBITS(pRaw[0], 30, 1) % 1'000'000;
|
||||||
|
|
||||||
// Hash = Bits [31..58] -> 28 bits
|
// Hash = Bits [31..58] -> 28 bits
|
||||||
pHash = NEXTSNBITS(pRaw[0], 28, 31);
|
pHash = NEXTSNBITS(pRaw[0], 28, 31);
|
||||||
|
@ -72,7 +74,8 @@ VOID unpackXP(
|
||||||
VOID packXP(
|
VOID packXP(
|
||||||
QWORD (&pRaw)[2],
|
QWORD (&pRaw)[2],
|
||||||
BOOL pUpgrade,
|
BOOL pUpgrade,
|
||||||
DWORD pSerial,
|
DWORD pChannelID,
|
||||||
|
DWORD pSequence,
|
||||||
DWORD pHash,
|
DWORD pHash,
|
||||||
QWORD pSignature
|
QWORD pSignature
|
||||||
) {
|
) {
|
||||||
|
@ -81,7 +84,7 @@ VOID packXP(
|
||||||
// 64 * 2 = 128
|
// 64 * 2 = 128
|
||||||
|
|
||||||
// Signature [114..59] <- Hash [58..31] <- Serial [30..1] <- Upgrade [0]
|
// Signature [114..59] <- Hash [58..31] <- Serial [30..1] <- Upgrade [0]
|
||||||
pRaw[0] = FIRSTNBITS(pSignature, 5) << 59 | FIRSTNBITS(pHash, 28) << 31 | (QWORD)pSerial << 1 | pUpgrade;
|
pRaw[0] = FIRSTNBITS(pSignature, 5) << 59 | FIRSTNBITS(pHash, 28) << 31 | (QWORD)(pChannelID * 1'000'000 + pSequence) << 1 | pUpgrade;
|
||||||
pRaw[1] = NEXTSNBITS(pSignature, 51, 5);
|
pRaw[1] = NEXTSNBITS(pSignature, 51, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +101,8 @@ BOOL verifyXPKey(
|
||||||
pSignature;
|
pSignature;
|
||||||
|
|
||||||
DWORD pData,
|
DWORD pData,
|
||||||
pSerial,
|
pChannelID,
|
||||||
|
pSequence,
|
||||||
pHash;
|
pHash;
|
||||||
|
|
||||||
BOOL pUpgrade;
|
BOOL pUpgrade;
|
||||||
|
@ -107,9 +111,9 @@ BOOL verifyXPKey(
|
||||||
unbase24((BYTE *)pRaw, pKey);
|
unbase24((BYTE *)pRaw, pKey);
|
||||||
|
|
||||||
// Extract RPK, hash and signature from bytecode.
|
// Extract RPK, hash and signature from bytecode.
|
||||||
unpackXP(pRaw, pUpgrade, pSerial, pHash, pSignature);
|
unpackXP(pRaw, pUpgrade, pChannelID, pSequence, pHash, pSignature);
|
||||||
|
|
||||||
pData = pSerial << 1 | pUpgrade;
|
pData = (pChannelID * 1'000'000 + pSequence) << 1 | pUpgrade;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
@ -203,7 +207,7 @@ VOID generateXPKey(
|
||||||
QWORD pRaw[2]{},
|
QWORD pRaw[2]{},
|
||||||
pSignature = 0;
|
pSignature = 0;
|
||||||
|
|
||||||
// Data segment of the RPK.
|
// Data segment of the RPK (first 31 bits).
|
||||||
DWORD pData = (pChannelID * 1'000'000 + pSequence) << 1 | pUpgrade;
|
DWORD pData = (pChannelID * 1'000'000 + pSequence) << 1 | pUpgrade;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -271,7 +275,7 @@ VOID generateXPKey(
|
||||||
BN_bn2lebinpad(s, (BYTE *)&pSignature, BN_num_bytes(s));
|
BN_bn2lebinpad(s, (BYTE *)&pSignature, BN_num_bytes(s));
|
||||||
|
|
||||||
// Pack product key.
|
// Pack product key.
|
||||||
packXP(pRaw, pUpgrade, pChannelID * 1'000'000 + pSequence, pHash, pSignature);
|
packXP(pRaw, pUpgrade, pChannelID, pSequence, pHash, pSignature);
|
||||||
|
|
||||||
EC_POINT_free(r);
|
EC_POINT_free(r);
|
||||||
} while (pSignature > BITMASK(55));
|
} while (pSignature > BITMASK(55));
|
||||||
|
|
Loading…
Reference in New Issue