Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Registry lässt sich nicht lesen (rdUnknown) -> Typ ermitteln (https://www.delphipraxis.net/106655-registry-laesst-sich-nicht-lesen-rdunknown-typ-ermitteln.html)

Harry M. 14. Jan 2008 16:10


Registry lässt sich nicht lesen (rdUnknown) -> Typ ermitt
 
Hallo :)

ich versuche unter Xp Pro Sp2 einen RegKey auszulesen dessen Type unbekannt ist (rdUnknown). Nur geht - bzw ließt es irgendwie nicht - sonst würde ich ja nicht Posten :mrgreen:

Soweit so gut... versuche habe ich es mit GetDataSize & ReadBinaryData. Auch wenn es nicht zur Exception kommt bleibt der Buffer leer da GetDataSize -1 zurückgibt so das die Schleife eh nie durchlaufen würde. Auch wenn ich diesen Wert mit 255 initalisiere kommen am Ende nur Nullen raus (ohne Einsen dazwischen).

Wiseo ? Fehlende Priviliegen etc. können es ja nicht sein, da das das Programm eh nur mit Systemrechten läuft (bzw Zugriff auf dem Key bekommt).

Delphi-Quellcode:
program RegTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Registry, WIndows, Classes;

const
  Key = '\SAM\SAM\Domains\Account\Users\Names\';
  Value = '@'; // for empty / default value

var
  Reg: TRegistry;
  slKeys, slValues: TStringList;
  I, X, J, k, iSize: Integer;
  P: PChar;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := WIndows.HKEY_LOCAL_MACHINE;
  if Reg.OpenKeyReadOnly(Key) then begin
    writeln('successfull opening');
    slKeys := TStringList.Create;
    Reg.GetKeyNames(slKeys);
    for I := 0 to slKeys.Count-1 do begin
      slValues := TstringList.Create;
      if Reg.OpenKeyReadOnly(Key + slKeys.Strings[I]) then begin
        Reg.GetValueNames(slValues);
        for X := 0 to slValues.Count-1 do begin
          writeln('lese value in ' + slKeys.Strings[I]);
          J := Reg.GetDataSize(Value);
          GetMem(p, j);
          Reg.ReadBinaryData(Value, p^, J);

          for k := 0 to j - 1 do
            writeln(IntToHex(Byte(p[k]), 2));

          FreeMem(p, j);
          end;

        slValues.Free;
        end;
        end;


    slKeys.Free;
    end else
    writeln('error');

  Reg.Free;
  readln;
end.
Im Detail geht es mir eigendlich um den Typen da dieser Wert Name eines Übergeodnen Keys ist.

lbccaleb 14. Jan 2008 16:19

Re: RegValue lässt sich nicht lesen (rdUnknown)
 
wenn du wirklich den obengeschrieben schlüssel lesen oder schreiben willst (egal was) wirst du immer ne fehlermeldung in windows bekommen, da dieser schlüssel durch windows geschützt ist...

Harry M. 14. Jan 2008 16:21

Re: RegValue lässt sich nicht lesen (rdUnknown)
 
Wie bereits geschrieben: Fehlende Priviliegen etc. können es ja nicht sein, da das das Programm eh nur mit Systemrechten läuft (bzw Zugriff auf dem Key bekommt).

AT %time /interactive delphi32.exe
AT %time /interactive regedit.exe

hilft ganz gut :)

lbccaleb 14. Jan 2008 16:49

Re: Registry lässt sich nicht lesen (rdUnknown) -> Typ er
 
das ist alles irgendwas für die windows passwörter, diese werden in einer sam datei angelegt (natürlich verschlüsselt) und windows schützt diese dateien, indem jegliche zugriffsrechte auf sie gesperrt werden!! nur windows selber kann die dateine lesen oder in sie schreiben!!

ich denke mal das dieser ordner (zumindest sieht es ganz danach aus, denn ich habe bei vista auch keinerlei zugriffsrechte mit nem admin account auf den ordner) auch von windows geschützt wird, und die zusammenhänge durch den gleichen namen naheliegend sind, nur leider kann ich dir nicht genau sagen was es mit dem registry ordner wirklich auf sich hat!!

aber was willst du denn in dem ordner überhaupt???

Harry M. 14. Jan 2008 18:27

Re: Registry lässt sich nicht lesen (rdUnknown) -> Typ er
 
WinDOS speichert die Kennwörter in Dateien Windows hingegen kennst die Registry. Und dann werden keine Kennwörter gespeichert sodneren deren Hashes (LM/NTLM/NTLM2). Mit der SAM dem Security Account Manger wird dies lediglich verwaltet.

Ich versuche die Hashes aus der Registry zu holen. (Ich brauch das für mein Admin -> Programm) Liegen im bennaten Key. Das Problem, ich muss erst die Kontentyp aus der Reg holen ist als RegistryType (zb 0x1AF) gespeichert. Mit dem ausgelesenen kann ich eine ebene Höher im Key in den Order wescheln und dort den Hash lesen.

Übrigens: Unter Vista hat man die Sicherheitslücke via AT sich Systemrechte zuzulegen abgeschafft :)
Dumm nur das man jetzt (was unter XP meines Wissens nicht ging, ein belibiges Programm zB cmd.exe als service eintagen und dies auch noch Interactiv starten - Aber das ist ein anderes Thema.)

Christian Seehase 14. Jan 2008 21:08

Re: Registry lässt sich nicht lesen (rdUnknown) -> Typ er
 
Moin Harry,

dann wirst Du, wohl oder übel, einen Dienst schreiben müssen, der den Zugriff erledigt, und über Dein Hauptprogramm gesteuert wird.

Harry M. 14. Jan 2008 23:09

Re: Registry lässt sich nicht lesen (rdUnknown) -> Typ er
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Christian Seehase,
bleibt aber immer noch die Frage wie ich den Type des Values als String bekomme.

Christian Seehase 14. Jan 2008 23:21

Re: Registry lässt sich nicht lesen (rdUnknown) -> Typ er
 
Moin Harry,

wie's aussieht korrespondiert diese Angabe ja immer mit einem Key, wobei man damit dann den Key zu einem Userkonto ermitteln kann.
Wenn Du den partout als String haben willst, musst Du wohl IntToHex nehmen.

[EDIT]
Wenn Du mit Bereichen arbeiten willst, mit denen man, als Anwender, eigentlich gar nicht direkt in Berührung kommen soll, solltest Du mal in Erwägung ziehen, auf TRegistry zu verzichten, und direkt mit den API-Funktionen zu arbeiten.
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.

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