From 36b2eb3e7d304a292ca7b5b7f18377b7a67ad63d Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 20:46:36 +1000 Subject: [PATCH 01/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 47 ++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index e4040ec..3554077 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -32,10 +32,7 @@ QWORD MOD = 0; QWORD NON_RESIDUE = 0; QWORD f[6] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; -int productID1; -int productID2; -int productID3; -int productID4; +int productID[4]; int activationMode; int ConfirmationID::calculateCheckDigit(int pid) @@ -693,6 +690,22 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h QWORD hardwareIDVal = ((QWORD)v1 << 32) | v2; for (i = 0; i < 8; ++i) hwid[i] = (hardwareIDVal >> (8 * i)) & 0xFF; + unsigned __int32 v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; + unsigned __int32 v4 = v3 & 0xFFFFF800; + unsigned __int32 v5 = buffer[1] & 0x7F; + unsigned __int32 v6 = buffer[1] >> 7; + unsigned __int32 v7 = ((v5 << 25) | v4) >> 11; + productID[1] = v7 & 0x000003FF; + unsigned __int32 v8 = v7 & 0xFFFFFC00; + unsigned __int32 v9 = (v6 >> 11) & 0x00001FFF; + unsigned __int32 v10 = v9 & 0x00001C00; + unsigned __int32 v11 = v9 & 0x000003FF; + unsigned __int32 v12 = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; + unsigned __int32 v13 = (v11 << 22) & 0xFFFFFFFF; + unsigned __int32 v14 = v13 | v12; + productID[2] = v14 & 0x000FFFFF; + productID[2] = calculateCheckDigit(productID[2]); + productID[3] = (v14 & 0x3FF00000) >> 20; *version = buffer[0] & 7; } @@ -889,11 +902,11 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ case 1: case 4: memcpy(&parsed, installation_id, sizeof(parsed)); - productID1 = parsed.ProductIDLow & ((1 << 17) - 1); - productID2 = (parsed.ProductIDLow >> 17) & ((1 << 10) - 1); - productID3 = (parsed.ProductIDLow >> 27) & ((1 << 24) - 1); + productID[0] = parsed.ProductIDLow & ((1 << 17) - 1); + productID[1] = (parsed.ProductIDLow >> 17) & ((1 << 10) - 1); + productID[2] = (parsed.ProductIDLow >> 27) & ((1 << 24) - 1); version = (parsed.ProductIDLow >> 51) & 15; - productID4 = (parsed.ProductIDLow >> 55) | (parsed.ProductIDHigh << 9); + productID[3] = (parsed.ProductIDLow >> 55) | (parsed.ProductIDHigh << 9); switch (activationMode) { case 0: if (version != (totalCount == 41 ? 9 : 10)) @@ -911,20 +924,17 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ case 2: case 3: decode_iid_new_version(installation_id, hardwareID, &version); - productID1 = stoi(productid.substr(0,5)); + productID[0] = stoi(productid.substr(0,5)); std::string channelid = productid.substr(6,3); char *p = &channelid[0]; for (; *p; p++) { *p = toupper((unsigned char)*p); } - if (strcmp(&channelid[0], "OEM") == 0) { - productID2 = stoi(productid.substr(12,3)); - productID3 = calculateCheckDigit((stoi(productid.substr(15,1)) * 100000) + (stoi(productid.substr(18,5)))); - productID4 = (stoi((productid.substr(10,2))) / 100000) * 1000; + p = &channelid[0]; + if (strcmp(p, "OEM") == 0) { + productID[3] = (stoi((productid.substr(10,2))) / 100000) * 1000; } else { - productID2 = stoi(productid.substr(6,3)); - productID3 = stoi(productid.substr(10,7)); - productID4 = stoi(productid.substr(18,5)); + productID[3] = stoi(productid.substr(18,5)); } switch (activationMode) { case 2: @@ -938,11 +948,10 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ memcpy(&parsed, hardwareID, 8); break; } - //printf("Product ID: %05u-%03u-%07u-%05u\n", productId1, productId2, productId3, productId4); - + unsigned char keybuf[16]; memcpy(keybuf, &parsed.HardwareID, 8); - QWORD productIdMixed = (QWORD)productID1 << 41 | (QWORD)productID2 << 58 | (QWORD)productID3 << 17 | productID4; + QWORD productIdMixed = (QWORD)productID[0] << 41 | (QWORD)productID[1] << 58 | (QWORD)productID[2] << 17 | productID[3]; memcpy(keybuf + 8, &productIdMixed, 8); TDivisor d; From e3bdc93249edea13f125f011d85c65e7b268fbb2 Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 20:49:09 +1000 Subject: [PATCH 02/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index 3554077..e594429 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -690,19 +690,19 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h QWORD hardwareIDVal = ((QWORD)v1 << 32) | v2; for (i = 0; i < 8; ++i) hwid[i] = (hardwareIDVal >> (8 * i)) & 0xFF; - unsigned __int32 v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; - unsigned __int32 v4 = v3 & 0xFFFFF800; - unsigned __int32 v5 = buffer[1] & 0x7F; - unsigned __int32 v6 = buffer[1] >> 7; - unsigned __int32 v7 = ((v5 << 25) | v4) >> 11; + DWORD v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; + DWORD v4 = v3 & 0xFFFFF800; + DWORD v5 = buffer[1] & 0x7F; + DWORD v6 = buffer[1] >> 7; + DWORD v7 = ((v5 << 25) | v4) >> 11; productID[1] = v7 & 0x000003FF; - unsigned __int32 v8 = v7 & 0xFFFFFC00; - unsigned __int32 v9 = (v6 >> 11) & 0x00001FFF; - unsigned __int32 v10 = v9 & 0x00001C00; - unsigned __int32 v11 = v9 & 0x000003FF; - unsigned __int32 v12 = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; - unsigned __int32 v13 = (v11 << 22) & 0xFFFFFFFF; - unsigned __int32 v14 = v13 | v12; + DWORD v8 = v7 & 0xFFFFFC00; + DWORD v9 = (v6 >> 11) & 0x00001FFF; + DWORD v10 = v9 & 0x00001C00; + DWORD v11 = v9 & 0x000003FF; + DWORD = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; + DWORD = (v11 << 22) & 0xFFFFFFFF; + DWORD = v13 | v12; productID[2] = v14 & 0x000FFFFF; productID[2] = calculateCheckDigit(productID[2]); productID[3] = (v14 & 0x3FF00000) >> 20; From 3e5e03df4d2b8eaf994310133c1eec997ab1fa66 Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 20:54:34 +1000 Subject: [PATCH 03/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index e594429..744913e 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -700,9 +700,9 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h DWORD v9 = (v6 >> 11) & 0x00001FFF; DWORD v10 = v9 & 0x00001C00; DWORD v11 = v9 & 0x000003FF; - DWORD = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; - DWORD = (v11 << 22) & 0xFFFFFFFF; - DWORD = v13 | v12; + DWORD v12 = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; + DWORD v13 = (v11 << 22) & 0xFFFFFFFF; + DWORD v14 = v13 | v12; productID[2] = v14 & 0x000FFFFF; productID[2] = calculateCheckDigit(productID[2]); productID[3] = (v14 & 0x3FF00000) >> 20; From b451a04f3c0a9753af348d77f56c4886797efe86 Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 21:32:12 +1000 Subject: [PATCH 04/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index 744913e..f08ded4 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -925,14 +925,8 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ case 3: decode_iid_new_version(installation_id, hardwareID, &version); productID[0] = stoi(productid.substr(0,5)); - std::string channelid = productid.substr(6,3); - char *p = &channelid[0]; - for (; *p; p++) { - *p = toupper((unsigned char)*p); - } - p = &channelid[0]; - if (strcmp(p, "OEM") == 0) { - productID[3] = (stoi((productid.substr(10,2))) / 100000) * 1000; + if (stoi(productid.substr(6,3)) == 0) { + productID[3] = (stoi((productid.substr(10,2)))) * 1000; } else { productID[3] = stoi(productid.substr(18,5)); } From 1aeceb28f18b67c104c33db51d8ae2a0100a5cb7 Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 21:56:53 +1000 Subject: [PATCH 05/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index f08ded4..64bbd65 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -925,10 +925,11 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ case 3: decode_iid_new_version(installation_id, hardwareID, &version); productID[0] = stoi(productid.substr(0,5)); - if (stoi(productid.substr(6,3)) == 0) { - productID[3] = (stoi((productid.substr(10,2)))) * 1000; + int channelID = stoi(productid.substr(6,3)); + if (channelID == 0) { + productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; } else { - productID[3] = stoi(productid.substr(18,5)); + productID[3] = ((stoi(productid.substr(18,2))) * 1000) + productID[3]; } switch (activationMode) { case 2: From 25db955b615efe2cba35070655a1533a4d820f86 Mon Sep 17 00:00:00 2001 From: pottzman Date: Wed, 6 Sep 2023 22:56:28 +1000 Subject: [PATCH 06/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index 64bbd65..e460aee 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -924,13 +924,6 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ case 2: case 3: decode_iid_new_version(installation_id, hardwareID, &version); - productID[0] = stoi(productid.substr(0,5)); - int channelID = stoi(productid.substr(6,3)); - if (channelID == 0) { - productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; - } else { - productID[3] = ((stoi(productid.substr(18,2))) * 1000) + productID[3]; - } switch (activationMode) { case 2: if (version != 3) @@ -941,7 +934,18 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ return ERR_UNKNOWN_VERSION; } memcpy(&parsed, hardwareID, 8); - break; + productID[0] = stoi(productid.substr(0,5)); + std::string channelid = productid.substr(6,3); + char *p = &channelid[0]; + for (; *p; p++) { + *p = toupper((unsigned char)*p); + } + p = &channelid[0]; + if (strcmp(p, "OEM") == 0) { + productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; + } else { + productID[3] = ((stoi(productid.substr(18,2))) * 1000) + productID[3]; + } } unsigned char keybuf[16]; From a7e97e45ee22f733dffb6ef7b792e6f8200ee0d2 Mon Sep 17 00:00:00 2001 From: pottzman Date: Thu, 7 Sep 2023 17:16:00 +1000 Subject: [PATCH 07/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index e460aee..69605a5 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -940,8 +940,7 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ for (; *p; p++) { *p = toupper((unsigned char)*p); } - p = &channelid[0]; - if (strcmp(p, "OEM") == 0) { + if (strcmp(&channelid[0], "OEM") == 0) { productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; } else { productID[3] = ((stoi(productid.substr(18,2))) * 1000) + productID[3]; From f3472313624fc5070ef45554631c0f40090dd60c Mon Sep 17 00:00:00 2001 From: pottzman Date: Thu, 7 Sep 2023 17:29:07 +1000 Subject: [PATCH 08/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index 69605a5..b4a4bc0 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -690,7 +690,7 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h QWORD hardwareIDVal = ((QWORD)v1 << 32) | v2; for (i = 0; i < 8; ++i) hwid[i] = (hardwareIDVal >> (8 * i)) & 0xFF; - DWORD v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; + /*DWORD v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; DWORD v4 = v3 & 0xFFFFF800; DWORD v5 = buffer[1] & 0x7F; DWORD v6 = buffer[1] >> 7; @@ -705,7 +705,7 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h DWORD v14 = v13 | v12; productID[2] = v14 & 0x000FFFFF; productID[2] = calculateCheckDigit(productID[2]); - productID[3] = (v14 & 0x3FF00000) >> 20; + productID[3] = (v14 & 0x3FF00000) >> 20;*/ *version = buffer[0] & 7; } @@ -941,10 +941,16 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ *p = toupper((unsigned char)*p); } if (strcmp(&channelid[0], "OEM") == 0) { + productID[1] = stoi(productid.substr(12,3)); + productID[2] = (stoi(productid.substr(15,1)) * 1000000) + stoi(productid.substr(18,5)); + productID[2] = calculateCheckDigit(productID[2]); productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; } else { - productID[3] = ((stoi(productid.substr(18,2))) * 1000) + productID[3]; + productID[1] = stoi(productid.substr(6,3)); + productID[2] = stoi(productid.substr(10,7)); + productID[3] = stoi(productid.substr(18,5)); } + fmt::print("ProductID: {}-{}-{}-{} \n", productID[0], productID[1], productID[2], productID[3]); } unsigned char keybuf[16]; From 6c06732331a1ae674fe639b5635c18dc034dc132 Mon Sep 17 00:00:00 2001 From: pottzman Date: Thu, 7 Sep 2023 18:05:58 +1000 Subject: [PATCH 09/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index b4a4bc0..5325ccd 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -942,7 +942,7 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ } if (strcmp(&channelid[0], "OEM") == 0) { productID[1] = stoi(productid.substr(12,3)); - productID[2] = (stoi(productid.substr(15,1)) * 1000000) + stoi(productid.substr(18,5)); + productID[2] = (stoi(productid.substr(15,1)) * 100000) + stoi(productid.substr(18,5)); productID[2] = calculateCheckDigit(productID[2]); productID[3] = ((stoi(productid.substr(10,2))) * 1000) + productID[3]; } else { From 1d5e233c19fb9feddda6e8cf3088b6e311bc1d5e Mon Sep 17 00:00:00 2001 From: pottzman Date: Thu, 7 Sep 2023 18:44:47 +1000 Subject: [PATCH 10/10] Update confid.cpp --- src/libumskt/confid/confid.cpp | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/libumskt/confid/confid.cpp b/src/libumskt/confid/confid.cpp index 5325ccd..2eb6b42 100644 --- a/src/libumskt/confid/confid.cpp +++ b/src/libumskt/confid/confid.cpp @@ -690,22 +690,6 @@ void ConfirmationID::decode_iid_new_version(unsigned char* iid, unsigned char* h QWORD hardwareIDVal = ((QWORD)v1 << 32) | v2; for (i = 0; i < 8; ++i) hwid[i] = (hardwareIDVal >> (8 * i)) & 0xFF; - /*DWORD v3 = ((buffer[0] & 0xFFFFFF80) >> 7) & 0xFFFFFFFF; - DWORD v4 = v3 & 0xFFFFF800; - DWORD v5 = buffer[1] & 0x7F; - DWORD v6 = buffer[1] >> 7; - DWORD v7 = ((v5 << 25) | v4) >> 11; - productID[1] = v7 & 0x000003FF; - DWORD v8 = v7 & 0xFFFFFC00; - DWORD v9 = (v6 >> 11) & 0x00001FFF; - DWORD v10 = v9 & 0x00001C00; - DWORD v11 = v9 & 0x000003FF; - DWORD v12 = (((v6 << 21) & 0xFFFFFFFF) | v8) >> 10; - DWORD v13 = (v11 << 22) & 0xFFFFFFFF; - DWORD v14 = v13 | v12; - productID[2] = v14 & 0x000FFFFF; - productID[2] = calculateCheckDigit(productID[2]); - productID[3] = (v14 & 0x3FF00000) >> 20;*/ *version = buffer[0] & 7; } @@ -950,7 +934,7 @@ int ConfirmationID::Generate(const char* installation_id_str, char confirmation_ productID[2] = stoi(productid.substr(10,7)); productID[3] = stoi(productid.substr(18,5)); } - fmt::print("ProductID: {}-{}-{}-{} \n", productID[0], productID[1], productID[2], productID[3]); + //fmt::print("ProductID: {}-{}-{}-{} \n", productID[0], productID[1], productID[2], productID[3]); } unsigned char keybuf[16];