Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Installationskey auslesen (https://www.delphipraxis.net/81221-installationskey-auslesen.html)

Mackhack 22. Nov 2006 20:28


Installationskey auslesen
 
Hi,

wollte mal fragen ob der Registrierungsschluessel von Windows in der Registry als klartext gespeichert oder verschluesselt. Ich meine aber nicht den Schluessel den man in den System Properties angezeigt bekommt.

Es gibt naemlich n Programm was ich gefunden habe Jelly's Magic Keyfinder der den Installationskey ausliest. Aber nur von der Platte von der gebootet wurde. Was ich aber braeuchte ist von einer USB Platte von einem Kunden der seinen Original-Aufkleber zerrissen hat und somit nicht mehr sein Windows installieren kann. Wenn es aber in der Registry abgespeichert ist als Klartext muesste es ja weiterhin moeglich sein ihn noch auszulesen.

Danke!

Hobby-Programmierer 22. Nov 2006 23:51

Re: Installationskey auslesen
 
Moin ...,
der Windows Reg-Key liegt verschlüsselt in der Registry. Es gibt aber inzwischen genug Keyfinder die den Original Key wieder anzeigen können, frag mich aber nicht wie. Bei Jellys KeyFinder bekommst Du aber mit vielen Antiviren Programmen Schwierigkeiten - wird als Trojaner erkannt und geblockt!!

Ps. Ich habe einen auf meiner BartPe CD bei dem man das i386 Verzeichnis zum auslesen selbst bestimmen kann. Werd nacher mal schauen wie das Programm heisst ...
LG Mario

Mackhack 23. Nov 2006 00:24

Re: Installationskey auslesen
 
Hi,

ja den Jelly Keyfinder haben wir auch hier.

Waere echt nett wenn du nach dem anderen Programm gucken koenntest. Weist du wie der Algo aussieht um den wieder zurueckzubekommen oder in welchem Reg-Schluessel der steckt?

Wir machen damit im Geschaeft nichts illegales. Der Kunde hat wie gesagt sein Windows offiziell gekauft und hat seinen Aufkleber ausversehen verrissen, der arme alte Mann!

_frank_ 23. Nov 2006 11:40

Re: Installationskey auslesen
 
hier mal ne unit, die ich mal gefunden habe...

Delphi-Quellcode:
unit unit2;
{
**************************************************************************************
* Unit MSProdKey v2.2                                                                *
*                                                                                    *
*  Description: Decode and View the Product Key, Product ID and Product Name used to *
*               install: Windows 2000, XP, Server 2003, Office XP, 2003.            *
*               *Updated* Now works for users with Non-Administrative Rights.       *
*               Code cleanup and changes, Commented.                                *
*                                                                                    *
*  Usage: Add MSProdKey to your Application's uses clause.                          *
*                                                                                    *
*  Example 1:                                                                       *
*                                                                                    *
* procedure TForm1.Button1Click(Sender: TObject);                                   *
* begin                                                                             *
*   if not IS_WinVerMin2K then // If the Windows version isn't at least Windows 2000 *
*   Edit1.Text := 'Windows 2000 or Higher Required!' // Display this message        *
*   else // If the Windows version is at least Windows 2000                          *
*   Edit1.Text := View_Win_Key; // View the Windows Product Key                     *
*   Label1.Caption := PN; // View the Windows Product Name                          *
*   Label2.Caption := PID; // View the Windows Product ID                           *
* end;                                                                              *
*                                                                                    *
*  Example 2:                                                                       *
* procedure TForm1.Button2Click(Sender: TObject);                                   *
* begin                                                                             *
*   if not IS_OXP_Installed then // If Office XP isn't installed                    *
*   Edit1.Text := 'Office XP Required!' // Display this message                     *
*   else // If Office XP is installed                                               *
*   Edit1.Text := View_OXP_Key; // View the Office XP Product Key                   *
*   Label1.Caption := DN; // View the Office XP Product Name                        *
*   Label2.Caption := PID; // View the Office XP Product ID                         *
* end;                                                                              *
*                                                                                    *
*  Example 3:                                                                       *
* procedure TForm1.Button3Click(Sender: TObject);                                   *
* begin                                                                             *
*   if not IS_O2K3_Installed then // If Office 2003 isn't installed                 *
*   Edit1.Text := 'Office 2003 Required!' // Display this message                   *
*   else // If Office 2003 is installed                                             *
*   Edit1.Text := View_O2K3_Key; // View the Office 2003 Product Key                *
*   Label1.Caption := DN; // View the Office 2003 Product Name                      *
*   Label2.Caption := PID; // View the Office 2003 Product ID                       *
* end;                                                                              *
*                                                                                    *
**************************************************************************************
}

interface

uses Registry, Windows, SysUtils, Classes;

function IS_WinVerMin2K: Boolean; // Check OS for Win 2000 or higher
function View_Win_Key: string; // View the Windows Product Key
//function IS_OXP_Installed: Boolean; // Check if Office XP is installed
//function View_OXP_Key: string; // View the Office XP Product Key
//function IS_O2K3_Installed: Boolean; // Check if Office 2003 is installed
//function View_O2K3_Key: string; // View the Office 2003 Product Key
function DecodeProductKey(const HexSrc: array of Byte): string;
  // Decodes the Product Key(s) from the Registry

var
  Reg: TRegistry;
  binarySize: INTEGER;
  HexBuf: array[0..28] of BYTE;
  temp: TStringList;
  KeyName, KeyName2, SubKeyName, PN, PID, DN: string;

implementation

function IS_WinVerMin2K: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (OS.dwMajorVersion >= 5) and
    (OS.dwPlatformId = VER_PLATFORM_WIN32_NT);
  PN    := ''; // Holds the Windows Product Name
  PID   := ''; // Holds the Windows Product ID
end;


function View_Win_Key: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion',false) then
    begin
      if Reg.GetDataType('DigitalProductId') = rdBinary then
      begin
        PN        := (Reg.ReadString('ProductName'));
        PID       := (Reg.ReadString('ProductID'));
        binarySize := Reg.GetDataSize('DigitalProductId');
        //SetLength(HexBuf, binarySize);
        if binarySize > 0 then
        begin
          Reg.ReadBinaryData('DigitalProductId', HexBuf[0], binarySize);
        end;
      end;
    end;
  finally
    Reg.Free;
    Reg:=nil;
  end;

  Result := '';
  Result := DecodeProductKey(HexBuf);
end;

function DecodeProductKey(const HexSrc: array of Byte): string;
const
  StartOffset: Integer = $34; { //Offset 34 = Array[52] }
  EndOffset: Integer  = $34 + 15; { //Offset 34 + 15(Bytes) = Array[64] }
  Digits: array[0..23] of CHAR = ('B', 'C', 'D', 'F', 'G', 'H', 'J',
    'K', 'M', 'P', 'Q', 'R', 'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9');
  dLen: Integer = 29; { //Length of Decoded Product Key }
  sLen: Integer = 15;
  { //Length of Encoded Product Key in Bytes (An total of 30 in chars) }
var
  HexDigitalPID: array[0..28] of CARDINAL;
  Des: array[0..28] of CHAR;
  I, N: INTEGER;
  HN, Value: CARDINAL;
begin
  //SetLength(HexDigitalPID, dLen);
  for I := StartOffset to EndOffset do
  begin
    HexDigitalPID[I - StartOffSet] := HexSrc[I];
  end;

  //SetLength(Des, dLen + 1);

  for I := dLen - 1 downto 0 do
  begin
    if (((I + 1) mod 6) = 0) then
    begin
      Des[I] := '-';
    end
    else
    begin
      HN := 0;
      for N := sLen - 1 downto 0 do
      begin
        Value := (HN shl 8) or HexDigitalPID[N];
        HexDigitalPID[N] := Value div 24;
        HN   := Value mod 24;
      end;
      Des[I] := Digits[HN];
    end;
  end;
  Des[dLen] := Chr(0);

  for I := 0 to Length(Des) do
  begin
    Result := Result + Des[I];
  end;
end;

end.
aufgerufen wird das Ganze nach dem Einbinden der Unit z.B. per
Delphi-Quellcode:
Edit1.Text := View_Win_Key;
HTH Frank

Hobby-Programmierer 23. Nov 2006 12:46

Re: Installationskey auslesen
 
Mahlzeit ...,
Zitat:

Zitat von Mackhack
Waere echt nett wenn du nach dem anderen Programm gucken koenntest.

Sie haben Post :stupid:
Ich wollte das Tool nicht unbedingt hier posten, auch wenn es nicht illegal ist :lol:

LG Mario

Luckie 23. Nov 2006 12:58

Re: Installationskey auslesen
 
Acuh wenn er im Kommentar schreibt, dass er jetzt auch ohne Administratorenrechte ginge, bezweifle ich das doch sehr:
Delphi-Quellcode:
Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion',false) then
Müsste heißen:
Delphi-Quellcode:
Reg := TRegistry.Create(KEY_READ); // <== KEY_READ, nur lesend öffnen !!!
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion',false) then

SirThornberry 23. Nov 2006 13:04

Re: Installationskey auslesen
 
Den Source kann man aber auch noch vereinfachen. Anstelle der ersten Schleife kann man auch gleich "Move" nutzen.
[Edit]
ok, hab müll geschrieben. Die entsprechende Stelle geht so nicht zu vereinfachen.
Mir ist bei dem testen der Funktion aber auch aufgefallen das ich einen anderen Key zurück bekomme als ich bei der Installations eingegeben hab.
[/Edit]

MaBuSE 23. Nov 2006 13:59

Re: Installationskey auslesen
 
Zitat:

Zitat von Luckie
Acuh wenn er im Kommentar schreibt, dass er jetzt auch ohne Administratorenrechte ginge, bezweifle ich das doch sehr:

Ich habe keine Admin Rechte und es geht auch ohne Deine Änderung :mrgreen:

Wenn man im Google nach "Unit MSProdKey" sucht, findet man auch die komplette unit. ;-)

Luckie 23. Nov 2006 14:03

Re: Installationskey auslesen
 
Kann eigentlich nicht sein. Gibt man bei Create keine Zugriffsrechte an wird er mit Lese- und Schreibrechten geöffnet. Und ein eingeschränkter Benutzer hat in HKLM keine Schreibrechte, weswegen der Zugriff fehlschlagen sollte.

MaBuSE 23. Nov 2006 14:13

Re: Installationskey auslesen
 
Zitat:

Zitat von Luckie
Kann eigentlich nicht sein. Gibt man bei Create keine Zugriffsrechte an wird er mit Lese- und Schreibrechten geöffnet. Und ein eingeschränkter Benutzer hat in HKLM keine Schreibrechte, weswegen der Zugriff fehlschlagen sollte.

Ist aber definitiv so. Ich habe keine Admin Rechte auf dem PC.
Ich lade Dich genre mal auf einen Kaffe hier im Büro ein. Dann kannst Du es selbst sehen ;-)
(Kassel -> FFM ist ja nicht sooo weit) :mrgreen:

ps: Vieleicht hat man als nicht Admin dort schreibrechte :gruebel:

Namenloser 23. Nov 2006 14:33

Re: Installationskey auslesen
 
Ich habe die Unit aus Interesse mal getestet. Allerdings entspricht der ausgegebene Code nicht dem, der auf meinem PC steht. Kann das daran liegen, dass es sich um ein oem-gerät handelt?

ich benutze winxp home...

SirThornberry 23. Nov 2006 14:44

Re: Installationskey auslesen
 
Zitat:

Zitat von NamenLozer
Ich habe die Unit aus Interesse mal getestet. Allerdings entspricht der ausgegebene Code nicht dem, der auf meinem PC steht. Kann das daran liegen, dass es sich um ein oem-gerät handelt?

ich benutze winxp home...

Bei mir ist gleiches der Fall. OEM und winxp home.

ste_ett 23. Nov 2006 15:07

Re: Installationskey auslesen
 
Habt ihr den Code so benutzt, wie er oben steht?
Bei mir gibt's da eine Arraygrenzenüberschreitung.

Delphi-Quellcode:
var
  Reg: TRegistry;
  binarySize: INTEGER;
  HexBuf: array[0..28] of BYTE;
  temp: TStringList;
  KeyName, KeyName2, SubKeyName, PN, PID, DN: string;



// muss heissen

  HexBuf: array[0..163] of BYTE;
"binarySize" hat, zumindest beim WinXP-Key, den Wert 164, also ist der Array viel zu klein. :)

SirThornberry 23. Nov 2006 15:46

Re: Installationskey auslesen
 
ich hab für den Registrybuffer ein dynamisches Array genommen.

Mackhack 23. Nov 2006 18:34

Re: Installationskey auslesen
 
Hi,

bei meinem System Windows XP MCE 05, English, als Admin eingelogged funzt die Unit tadellos!

Danke!

\\Edit: Ich hab noch eine weitere Frage. Wenn ich eine 2.5" HDD (die ein OS installiert hat) per Externem Gehaeuse an einen PC anschliesse kann ich dann mit diesem Code auch auf die Registry zugreifen und den Code auslesen? Denn das ist/war mein Hauptaugenmerk zu diesem Thread!

Nochmals, vielen Dank!

Balu der Bär 23. Nov 2006 18:48

Re: Installationskey auslesen
 
Bei mir ebenfalls, konnte keinen Fehler erkennen. :-)

Mackhack 23. Nov 2006 21:49

Re: Installationskey auslesen
 
Weis jemand wie man solch eine Berechnung reverse-engenieeren kann? Ich meine MS sollte doch nicht etwa das Verfahren offengelegt haben oder?

MaBuSE 24. Nov 2006 07:50

Re: Installationskey auslesen
 
Zitat:

Zitat von Mackhack
Weis jemand wie man solch eine Berechnung reverse-engenieeren kann? Ich meine MS sollte doch nicht etwa das Verfahren offengelegt haben oder?

Debugging ;-)

Mackhack 25. Nov 2006 16:49

Re: Installationskey auslesen
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von Mackhack
Weis jemand wie man solch eine Berechnung reverse-engenieeren kann? Ich meine MS sollte doch nicht etwa das Verfahren offengelegt haben oder?

Debugging ;-)

Stimmt!

Garfield 26. Nov 2006 13:14

Re: Installationskey auslesen
 
Zitat:

Zitat von NamenLozer
Ich habe die Unit aus Interesse mal getestet. Allerdings entspricht der ausgegebene Code nicht dem, der auf meinem PC steht. Kann das daran liegen, dass es sich um ein oem-gerät handelt?

Zitat:

Zitat von Mackhack
bei meinem System Windows XP MCE 05, English, als Admin eingelogged funzt die Unit tadellos!

Ich habe so eine Routine auch schon mal getestet und sie hat bei mir nicht funktioniert. Irgendwo habe ich dann den Hinweis gefunden, dass die Verschlüsselung von der Sprachversion abhängig sein soll.

Mackhack 27. Nov 2006 18:57

Re: Installationskey auslesen
 
Hi,

weis jemand wie man diesen Key auch von einer Festplatte aus auslesen kann die per USB angeschlossen wurde? Man muesste das ja verbinden koennen denn die Registry steht doch so weit ich weis im windowsverzeichnis\system32\config oder so.

Hat da jemand ne Idee?

Danke!

Mackhack 28. Nov 2006 19:51

Re: Installationskey auslesen
 
Kann mir niemand helfen bei dem Problem? Online finde ich auch nichts passendes, muss aber machbar sein denk ich!

Vlt. gibts ja doch noch einen DPler der mir vlt. helfen kann!

Danke euch viel mals!

Sunlight7 28. Nov 2006 23:16

Re: Installationskey auslesen
 
Hallo Mackhack!

Soweit ich das gesehen habe, liest der Quellcode oben den Key direkt von der Registry...
Da hast Du kaum Chancen, das von der Festlatte direkt zu holen.
Evtl. findet sich ein Programm, das die Registry Datei (oder besser Teile davon) importieren kann.
Dann das mit ner Extra Installation machen...

Nur ne Idee, keine Ahnung, ob machbar :gruebel:

Grüßle!

Mackhack 28. Nov 2006 23:34

Re: Installationskey auslesen
 
Hi Sunlight7,

ich habe jetzt mal so angefangen dass ich mir die Rechte fuer die Registry hole und den Schluessel als Hive exportiere. Mal sehen ob ich dann zurecht komme. Bisher hatte ich mit noch keinem "Keyfinder" Programm glueck damit. Alle streiken obwohl ich mit Adminrechten gearbeitet habe!

Sonst noch Vorschlaege?

OldGrumpy 29. Nov 2006 04:41

Re: Installationskey auslesen
 
Du hast momentan zwei Probleme: Zum einen suchen die Keyfinder-Programme in einem fest definierten Registryzweig nach dem Key und zum anderen hast Du nur quasi post-mortem Registry Hives zur Verfügung.
Folgende Lösung fällt mir dazu ein:

- Eine XP-Installation der gleichen Art wie auf der USB-Platte einrichten (also OEM, Home, Pro, MCE, whatever)
- Registry Hive von der USB-Platte mittels RegEdit in die lokale Registry einklinken.
- Die fraglichen Werte mit RegEdit exportieren und an die gleiche Stelle der lokalen Registry wieder importieren
- Das lokale XP hat nun die gleiche Key-Info wie das XP auf der USB-Platte
- Keyfinder nach Geschmack benutzen
- XP-Installation wieder löschen :)

Was die KeyFinder-Unit angeht: Ich erinnere mich dunkel, dass MS irgendwann den Algorithmus zum Abspeichern verändert hat. Hab das aber auch nicht weiter verfolgt, ich benutze meist den Belarc Advisor um mir mal eben den Key anzuschauen.

Sunlight7 1. Dez 2006 07:08

Re: Installationskey auslesen
 
Zitat:

Zitat von Mackhack
weis jemand wie man diesen Key auch von einer Festplatte aus auslesen kann die per USB angeschlossen wurde? Man muesste das ja verbinden koennen denn die Registry steht doch so weit ich weis im windowsverzeichnis\system32\config oder so.

Moin!

Problem gelöst, aber da ich mir net 100%ig sicher bin, wie Legal das ist, gibts den Source nur per PN.

Grüßle!

Mackhack 1. Dez 2006 07:11

Re: Installationskey auslesen
 
Vielen lieben Dank! :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz