Delphi-PRAXiS
Seite 1 von 3  1 23      

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr.
Seite 1 von 3  1 23      

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