Hi janek2012, could your software be altered to be compatible with x64 versions of NT5. could it also be made to accept user input "pidgen.dll" file
Looking through forums for fix. Running Win 8.1pro Build 9600, now asking for "Activate Windows", was fine when I got the old HP Z800 Workstation. Assistance much appreciated
Hello guys, is there any PID Key Checker that can check who issued Windows 10 Product keys? For example: Issued by: MSDN Issued by: Azure (Dreamspark/Imagine) Issued by: Microsoft (Commercial use) So you can check if the key is genuine retail key (like the ones sold on Microsoft) or if it's a MSDN/Azure retail key. Thanks!
Hi, You have to recompile CHKPIDS_XP_2003 using a 64-bit version of the C Compiler "Pelles C for Windows". Don't forget to specify x64 architecture in projet options (linker). It works for me.
Hi, can someone please explain for a total beginner what's the procedure for getting an updated PID checker? Thank you
Im looking for a possibility to check multiple MAK keys on their Activation status, so how many left. I can see it for every single key with "Microsoft Pid Checker" but it doesnt work for batches with a result etc. Are there now any profiles around for Windows 10 Check of Ultimate Checker EDIT: Oh wow this is incredible, you can use the config files of the PID Checker with this too...lol, havent came to my mind since months. I downloaded it from Majorgeeks it has office 2019 and Windows 10 full support files
I would love to use this one with Windows 10 and Server 2019 but I am struggeling to find the PKeyConfig files, can anybody please point me to the right direction?
does anybody know if there is a tool floating around somewhere that can do what this tool does except for office 2000/XP/2003/2007?
So, Darki playing with IDA, and found this. Code: sppcomapi.dll __int64 __fastcall CLicensingStateTools::get_DefaultKeyFromRegistry(CLicensingStateTools *this, unsigned __int16 **a2) --> v6 = ReadProductKeyFromRegistry(0i64, &hMem); --> Value = CRegUtilT<void *,CRegType,0,1>::GetValue(a1, v10, L"DigitalProductId", (BYTE **)&hMem, &v14); --> v13 = CProductKeyUtilsT<CEmptyType>::BinaryDecode((char *)hMem + 52, v11, &v15); a1: pointer to 16-byte product key data (from DigitalProductId4.m_abCdKey or registry). a2: length of the data (unused much in the snippet). a3: output pointer to store the decoded Unicode product key string. which produce, Code: __int64 __fastcall CProductKeyUtilsT(__m128i *a1) { char Src[54]; [__int16 *v20;] v20 = 0i64; v22 = *(_OWORD *)L"BCDFGHJKMPQRTVWXY2346789"; [__m128i] v21 = *a1; if ( (_mm_srli_si128(v21, 8).m128i_u64[0] & 0xF0000000000000i64) != 0 ) BREAK CODE __int64 v6 = 24i64; BOOL v7 = (v21.m128i_i8[14] & 8) != 0; v21.m128i_i8[14] ^= (v21.m128i_i8[14] ^ (4 * ((v21.m128i_i8[14] & 8) != 0))) & 8; do { __int64 LODWORD(v8) = 0; for ( i = 14i64; i >= 0; --i ) { v10 = v21.m128i_u8[i] + ((_DWORD)v8 << 8); v21.m128i_i8[i] = v10 / 0x18; v8 = v10 % 0x18; } *(_WORD *)&Src[2 * v6-- - 2] = *((_WORD *)v22 + v8); } while ( v6 >= 0 ); if ( v21.m128i_i8[0] ) BREAK CODE else { if ( v7 ) { [__int64] v11 = 2 * v8; memmove_0(&v24, Src, 2 * v8); *(_WORD *)&Src[v11 - 2] = 78; } v12 = STRAPI_CreateCchBufferN(0x2Du, 0x1Eui64, &v20); if ( v12 >= 0 ) { v13 = v20; v14 = &v24; for ( j = 0; j < 25; ++j ) { v16 = *v14++; v17 = j + j / 5; v13[v17] = v16; } *a3 = v13; } else BREAK CODE } } i did try uderstand source of `janek2012's magic decoding function` well, found it for you ~~~~~~~~~~~~~~ if you like the whole code, well. Code: __int64 __fastcall CProductKeyUtilsT<CEmptyType>::BinaryDecode(__m128i *a1, __int64 a2, unsigned __int16 **a3) { unsigned __int16 *v3; // rbx unsigned int v5; // edi __int64 v6; // r9 BOOL v7; // r10d __int64 v8; // r8 __int64 i; // rcx unsigned int v10; // r8d __int64 v11; // rbx int v12; // eax unsigned __int16 *v13; // r9 __int16 *v14; // r10 int j; // r8d unsigned __int16 v16; // ax __int64 v17; // rcx HANDLE ProcessHeap; // rax unsigned __int16 *v20; // [rsp+28h] [rbp-51h] BYREF __m128i v21; // [rsp+30h] [rbp-49h] __int128 v22[3]; // [rsp+40h] [rbp-39h] wchar_t v23; // [rsp+70h] [rbp-9h] __int16 v24; // [rsp+78h] [rbp-1h] BYREF char Src[54]; // [rsp+7Ah] [rbp+1h] BYREF v3 = 0i64; v23 = aBcdfghjkmpqrtv[24]; v22[0] = *(_OWORD *)L"BCDFGHJKMPQRTVWXY2346789"; v20 = 0i64; v22[1] = *(_OWORD *)L"MPQRTVWXY2346789"; v22[2] = *(_OWORD *)L"Y2346789"; v21 = *a1; if ( (_mm_srli_si128(v21, 8).m128i_u64[0] & 0xF0000000000000i64) != 0 ) goto LABEL_2; v6 = 24i64; v7 = (v21.m128i_i8[14] & 8) != 0; v21.m128i_i8[14] ^= (v21.m128i_i8[14] ^ (4 * ((v21.m128i_i8[14] & 8) != 0))) & 8; do { LODWORD(v8) = 0; for ( i = 14i64; i >= 0; --i ) { v10 = v21.m128i_u8[i] + ((_DWORD)v8 << 8); v21.m128i_i8[i] = v10 / 0x18; v8 = v10 % 0x18; } *(_WORD *)&Src[2 * v6-- - 2] = *((_WORD *)v22 + v8); } while ( v6 >= 0 ); if ( v21.m128i_i8[0] ) { LABEL_2: v5 = -2147024883; CBreakOnFailureT<CEmptyType>::CheckToBreakOnFailure(2147942413i64); } else { if ( v7 ) { v11 = 2 * v8; memmove_0(&v24, Src, 2 * v8); *(_WORD *)&Src[v11 - 2] = 78; } v12 = STRAPI_CreateCchBufferN(0x2Du, 0x1Eui64, &v20); v5 = v12; if ( v12 >= 0 ) { v13 = v20; v14 = &v24; for ( j = 0; j < 25; ++j ) { v16 = *v14++; v17 = j + j / 5; v13[v17] = v16; } v3 = 0i64; *a3 = v13; } else { CBreakOnFailureT<CEmptyType>::CheckToBreakOnFailure((unsigned int)v12); v3 = v20; } } CChkMacroETWLoggerT<CEmptyType>::LogHResultEvent(v5); if ( v3 ) { ProcessHeap = GetProcessHeap(); HeapFree(ProcessHeap, 0, v3 - 2); CChkMacroETWLoggerT<CEmptyType>::LogHResultEvent(0i64); } return v5; }