The Ultimate PID Checker

Discussion in 'MDL Projects and Applications' started by janek2012, Jul 18, 2010.

  1. spinalGR

    spinalGR MDL Senior Member

    Oct 16, 2014
    426
    86
    10
  2. pottzman

    pottzman MDL Member

    Dec 8, 2009
    217
    353
    10
    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
     
  3. spinalGR

    spinalGR MDL Senior Member

    Oct 16, 2014
    426
    86
    10
    #383 spinalGR, Apr 1, 2019
    Last edited: Apr 2, 2019
    Any latest version from janek ?? Is janek2012 active on forums?
     
  4. LostED

    LostED SVF Patch Lover

    Jul 30, 2009
    7,231
    21,619
    240
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  5. Sajjo

    Sajjo MDL Member

    Feb 6, 2018
    2,886
    4,046
    90
  6. maukaguy

    maukaguy MDL Novice

    Sep 20, 2015
    1
    0
    0
    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
     
  7. mariuselt

    mariuselt MDL Novice

    May 20, 2019
    2
    0
    0
    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!
     
  8. cyril634

    cyril634 MDL Novice

    May 19, 2015
    1
    1
    0
    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.
     
  9. Sajjo

    Sajjo MDL Member

    Feb 6, 2018
    2,886
    4,046
    90
    #389 Sajjo, Oct 13, 2019
    Last edited: Jan 4, 2025

    Attached Files:

  10. zipippino

    zipippino MDL Novice

    Nov 5, 2019
    1
    0
    0
    Hi, can someone please explain for a total beginner what's the procedure for getting an updated PID checker? Thank you
     
  11. Horst90

    Horst90 MDL Novice

    Sep 23, 2019
    1
    0
    0
    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 :D
     
  12. digitalsta

    digitalsta MDL Novice

    Mar 6, 2021
    1
    0
    0
    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?
     
  13. pottzman

    pottzman MDL Member

    Dec 8, 2009
    217
    353
    10
    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?
     
  14. Dark Vador

    Dark Vador X Æ A-12

    Feb 2, 2011
    4,787
    7,055
    150
    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;
    }
    
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...