mirror of
https://github.com/Neo-Desktop/WindowsXPKg
synced 2024-11-21 21:31:01 +02:00
Slight refactor, prepare for QWORD upgrade
This commit is contained in:
parent
3922223b9f
commit
1c5f93b687
@ -57,7 +57,7 @@ typedef uint32_t DWORD;
|
|||||||
typedef uint64_t QWORD;
|
typedef uint64_t QWORD;
|
||||||
|
|
||||||
// Global variables
|
// Global variables
|
||||||
extern char charset[];
|
extern char pCharset[];
|
||||||
|
|
||||||
// util.cpp
|
// util.cpp
|
||||||
void endian(BYTE *data, int length);
|
void endian(BYTE *data, int length);
|
||||||
@ -74,8 +74,8 @@ EC_GROUP *initializeEllipticCurve(
|
|||||||
);
|
);
|
||||||
|
|
||||||
// key.cpp
|
// key.cpp
|
||||||
void unbase24(DWORD *byteSeq, const char *cdKey);
|
void unbase24(BYTE *byteSeq, const char *cdKey);
|
||||||
void base24(char *cdKey, DWORD *byteSeq);
|
void base24(char *cdKey, BYTE *byteSeq);
|
||||||
|
|
||||||
// cli.cpp
|
// cli.cpp
|
||||||
void print_product_key(char *pk);
|
void print_product_key(char *pk);
|
||||||
|
12
src/key.cpp
12
src/key.cpp
@ -5,7 +5,7 @@
|
|||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
|
||||||
/* Converts from CD-key to a byte sequence. */
|
/* Converts from CD-key to a byte sequence. */
|
||||||
void unbase24(DWORD *byteSeq, const char *cdKey) {
|
void unbase24(BYTE *byteSeq, const char *cdKey) {
|
||||||
BYTE pDecodedKey[PK_LENGTH + NULL_TERMINATOR]{};
|
BYTE pDecodedKey[PK_LENGTH + NULL_TERMINATOR]{};
|
||||||
BIGNUM *y = BN_new();
|
BIGNUM *y = BN_new();
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ void unbase24(DWORD *byteSeq, const char *cdKey) {
|
|||||||
// Remove dashes from the CD-key and put it into a Base24 byte array.
|
// Remove dashes from the CD-key and put it into a Base24 byte array.
|
||||||
for (int i = 0, k = 0; i < strlen(cdKey) && k < PK_LENGTH; i++) {
|
for (int i = 0, k = 0; i < strlen(cdKey) && k < PK_LENGTH; i++) {
|
||||||
for (int j = 0; j < 24; j++) {
|
for (int j = 0; j < 24; j++) {
|
||||||
if (cdKey[i] != '-' && cdKey[i] == charset[j]) {
|
if (cdKey[i] != '-' && cdKey[i] == pCharset[j]) {
|
||||||
pDecodedKey[k++] = j;
|
pDecodedKey[k++] = j;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -34,15 +34,15 @@ void unbase24(DWORD *byteSeq, const char *cdKey) {
|
|||||||
int n = BN_num_bytes(y);
|
int n = BN_num_bytes(y);
|
||||||
|
|
||||||
// Place the generated code into the byte sequence.
|
// Place the generated code into the byte sequence.
|
||||||
BN_bn2bin(y, (BYTE *)byteSeq);
|
BN_bn2bin(y, byteSeq);
|
||||||
BN_free(y);
|
BN_free(y);
|
||||||
|
|
||||||
// Reverse the byte sequence.
|
// Reverse the byte sequence.
|
||||||
endian((BYTE *)byteSeq, n);
|
endian(byteSeq, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Converts from byte sequence to the CD-key. */
|
/* Converts from byte sequence to the CD-key. */
|
||||||
void base24(char *cdKey, DWORD *byteSeq) {
|
void base24(char *cdKey, BYTE *byteSeq) {
|
||||||
BYTE rbyteSeq[16];
|
BYTE rbyteSeq[16];
|
||||||
BIGNUM *z;
|
BIGNUM *z;
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ void base24(char *cdKey, DWORD *byteSeq) {
|
|||||||
cdKey[25] = 0;
|
cdKey[25] = 0;
|
||||||
|
|
||||||
for (int i = 24; i >= 0; i--)
|
for (int i = 24; i >= 0; i--)
|
||||||
cdKey[i] = charset[BN_div_word(z, 24)];
|
cdKey[i] = pCharset[BN_div_word(z, 24)];
|
||||||
|
|
||||||
BN_free(z);
|
BN_free(z);
|
||||||
}
|
}
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
|
||||||
char charset[] = "BCDFGHJKMPQRTVWXY2346789";
|
char pCharset[] = "BCDFGHJKMPQRTVWXY2346789";
|
||||||
const std::string filename = "keys.json";
|
const std::string filename = "keys.json";
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
|
||||||
char charset[] = "BCDFGHJKMPQRTVWXY2346789";
|
char pCharset[] = "BCDFGHJKMPQRTVWXY2346789";
|
||||||
|
|
||||||
void unpackServer(DWORD *osFamily, DWORD *hash, DWORD *sig, DWORD *prefix, DWORD *raw) {
|
void unpackServer(DWORD *osFamily, DWORD *hash, DWORD *sig, DWORD *prefix, DWORD *raw) {
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ bool verifyXPKey(EC_GROUP *eCurve, EC_POINT *generator, EC_POINT *publicKey, cha
|
|||||||
|
|
||||||
QWORD sig = 0;
|
QWORD sig = 0;
|
||||||
|
|
||||||
unbase24(bKey, cdKey);
|
unbase24((BYTE *)bKey, cdKey);
|
||||||
|
|
||||||
// Extract data, hash and signature from the bytecode.
|
// Extract data, hash and signature from the bytecode.
|
||||||
unpackXP(bKey, pID, checkHash, sig);
|
unpackXP(bKey, pID, checkHash, sig);
|
||||||
@ -241,7 +241,7 @@ void generateXPKey(EC_GROUP *eCurve, EC_POINT *generator, BIGNUM *order, BIGNUM
|
|||||||
// the CD-key longer than 25 characters.
|
// the CD-key longer than 25 characters.
|
||||||
|
|
||||||
// Convert the key to Base24.
|
// Convert the key to Base24.
|
||||||
base24(pKey, bKey);
|
base24(pKey, (BYTE *)bKey);
|
||||||
|
|
||||||
BN_free(c);
|
BN_free(c);
|
||||||
BN_free(s);
|
BN_free(s);
|
||||||
|
Loading…
Reference in New Issue
Block a user