AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RegGetKeySecurity

Ein Thema von CoRe.eXtreem · begonnen am 6. Nov 2008 · letzter Beitrag vom 11. Nov 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#11

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 12:11
Da steht doch

dwRevision [in]

The revision level to assign to the security descriptor. This parameter must be SECURITY_DESCRIPTOR_REVISION.

oder sehe ich das falsch?

Delphi-Quellcode:
    .data
   lpSubKey         db   "SOFTWARE\Classes\.7z\2",0
   phkResult          dd   0

    .data?
   pSecurityDescriptor      SECURITY_DESCRIPTOR <>

    .code
    
start:
   xor   eax,eax

   push   offset phkResult
   push   KEY_ALL_ACCESS
   push   0
   push   offset lpSubKey
   push   HKEY_LOCAL_MACHINE
   call   RegOpenKeyEx


   push   offset pSecurityDescriptor
   call   IsValidSecurityDescriptor

   test   eax,eax               ; EAX 00000000 (Das ist schonmal positiv)
   jnz   @_ExitProcess


   push   SECURITY_DESCRIPTOR_REVISION
   push   offset pSecurityDescriptor
   call   InitializeSecurityDescriptor


   push   sizeof SECURITY_DESCRIPTOR
   push   offset pSecurityDescriptor
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity

   push   phkResult
   call   RegCloseKey

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
Muss jetzt erstmal den SecurityDescriptor richtig erstellen bzw. Speicher zuweisen. Ich denke dort liegt der fehler.
Das mit der Domäne kommt später, muss jetzt erst mal den SecurityDescriptor erstellen. Bevor da nicht alle EAX rückgabewerte der API überall auf 0 ist geht es nicht weiter.
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#12

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 13:19
So, jetzt habe ich den code mal überarbeitet.
Ich initialisierte den "SecurityDescriptor" und prüfe diesen zum Schluss mit "IsValidSecurityDescriptor".
EAX gibt mir als wert EAX = 00000001 zurück. Alles super, d.h. der initialisierte SecurityDescriptor ist Gültig.

Kann jedoch mit dem API call "RegGetKeySecurity2 noch immer nicht die DACL in den SecurityDescriptor zurück geben lassen. Zugriffsverletzung. Könnte heulen.

Habe ich vieleicht irgendwas übersehen? Mir fliegen bald die raus....


Delphi-Quellcode:
    .data
   lpSubKey         db   "SOFTWARE\Classes\.7z\2",0
   phkResult          dd   0

    .data?
   pSecurityDescriptor      SECURITY_DESCRIPTOR <>
   buffer_addr         dd   ?

    .code
    
start:
   xor   eax,eax
   nop

   nop
   push   offset phkResult
   push   KEY_ALL_ACCESS
   push   0
   push   offset lpSubKey
   push   HKEY_LOCAL_MACHINE
   call   RegOpenKeyEx            ; EAX must zero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_MIN_LENGTH
   push   GPTR
   call   GlobalAlloc            ; EAX must nonzero
   nop                  ; EAX = (new object handle)

   nop   
   mov   buffer_addr,eax
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_REVISION
   push   offset buffer_addr
   call   InitializeSecurityDescriptor      ; EAX must nonzero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   offset buffer_addr
   call   IsValidSecurityDescriptor      ; EAX must nonzero
   nop                  ; EAX = 00000001

   nop
   xor   eax,eax
   nop

   nop
   push   sizeof buffer_addr
   push   offset buffer_addr
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity
   nop

   nop
   push   phkResult
   call   RegCloseKey
   nop

   nop
   push   offset buffer_addr
   call   GlobalFree
   nop

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
Zugriffsverletzung:

Delphi-Quellcode:
EAX 00000004
ECX 00403017 RegAth.00403017
EDX 00000000
EBX 00000000
ESP 0012FF14
EBP 0012FF74
ESI 02000000
EDI 00000000
EIP 761BC7FD advapi32.761BC7FD
C 0 ES 0023 32bit 0(FFFFFFFF)
P 0 CS 001B 32bit 0(FFFFFFFF)
A 0 SS 0023 32bit 0(FFFFFFFF)
Z 0 DS 0023 32bit 0(FFFFFFFF)
S 0 FS 003B 32bit 7FFDE000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00010202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 empty 0.0
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 0.0
ST7 empty 0.0
               3 2 1 0 E S P U O Z D I
FST 0000 Cond 0 0 0 0 Err 0 0 0 0 0 0 0 0 (GT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#13

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 13:31
wie gesagt, hab kein plan davon :>
um Luckies frage neu aufzugreiffen: warum eigentlich asm ?
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#14

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 14:15
So, sieht gut aus.

Jetzt funktioniert es ohne Zugriffsverletzung,...

Jetzt bekomme ich bei dem Api Call "RegGetKeySecurity" nur noch ERROR_ACCESS_DENIED (00000005) zurück.

Sehr seltsam, sogar unter Systemrechten.

Warum ich das in ASM mach?
Gibt eigentlich keinen besonderen Grund, ich programmiere einfach gerne in ASM. Wenn ich ehrlich bin kann ich schon gar kein Delphi mehr. ;P

Delphi-Quellcode:
    .data
   lpSubKey         db   "SOFTWARE\Google",0
   phkResult          dd   0

    .data?
   pSecurityDescriptor      SECURITY_DESCRIPTOR <>
   buffer_addr         dd   ?
   buffer_size         dd   ?

    .code
    
start:
   xor   eax,eax
   nop

   nop
   push   offset phkResult
   push   KEY_ALL_ACCESS
   push   0
   push   offset lpSubKey
   push   HKEY_CURRENT_USER
   call   RegOpenKeyEx            ; EAX must zero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_MIN_LENGTH
   push   GPTR
   call   GlobalAlloc            ; EAX must nonzero
   nop                  ; EAX = (new object handle)

   nop   
   mov   buffer_addr,eax
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   SECURITY_DESCRIPTOR_REVISION
   push   offset buffer_addr
   call   InitializeSecurityDescriptor      ; EAX must nonzero
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   offset buffer_addr
   call   IsValidSecurityDescriptor      ; EAX must nonzero
   nop                  ; EAX = 00000001

   nop
   xor   eax,eax
   nop

   nop
   mov   eax,sizeof buffer_addr
   mov   buffer_size,eax
   nop

   nop
   xor   eax,eax
   nop

   nop
   push   offset buffer_size
   push   offset buffer_addr
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity
   nop

   cmp   eax,ERROR_SUCCESS
   jne   @_Error

   @_CleanUp:

   nop
   push   phkResult
   call   RegCloseKey
   nop

   nop
   push   offset buffer_addr
   call   GlobalFree
   nop

   @_ExitProcess:
   push   0
   call   ExitProcess


   @_Error:

   push   0
   push   0
   push   0
   push   0
   Call   MessageBox

   jmp   @_CleanUp


end start
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#15

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 14:24
Zitat von CoRe.eXtreem:
So, sieht gut aus.
Jetzt bekomme ich bei dem Api Call "RegGetKeySecurity" nur noch ERROR_ACCESS_DENIED (00000005) zurück.

Sehr seltsam, sogar unter Systemrechten.
[/delphi]
Das ist genau das problem das ich auch bei den dateien habe.
Kann es sein dass dein XP von einem Domain Admin installiert wurde und du gerade mit nem lokalen Admin Account der nicht in der domain liegt arbeitest?

Genau in dieser konstellation habe ich probleme mit ACCESS_DENIED
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#16

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 14:34
Zitat von Volle:
Zitat von CoRe.eXtreem:
So, sieht gut aus.
Jetzt bekomme ich bei dem Api Call "RegGetKeySecurity" nur noch ERROR_ACCESS_DENIED (00000005) zurück.

Sehr seltsam, sogar unter Systemrechten.
[/delphi]
Das ist genau das problem das ich auch bei den dateien habe.
Kann es sein dass dein XP von einem Domain Admin installiert wurde und du gerade mit nem lokalen Admin Account der nicht in der domain liegt arbeitest?

Genau in dieser konstellation habe ich probleme mit ACCESS_DENIED
Wenigstens liegt es jetzt zu 99% nicht mehr an meinem Source-Code. Ok, wenn mir der EAX Register den Wert ERROR_ACCESS_DENIED zurück gibt, dann verweigert das System den Zugriff.

Das witzige ist ja das ich mir Systemrechte erschlichen habe und nicht einmal mit Systemrechten funktioniert es.

Habe Vista und arbeite nicht in einer Domäne.

Habe gerade noch etwas gefunden, vielleicht muss ich noch Privilegien setzen.

Siehe MSDN ganz unten (http://msdn.microsoft.com/en-us/libr...78(VS.85).aspx)

Zitat:
When you call the RegOpenKeyEx function, the system checks the requested access rights against the key's security descriptor. If the user does not have the correct access to the registry key, the open operation fails. If an administrator needs access to the key, the solution is to enable the SE_TAKE_OWNERSHIP_NAME privilege and open the registry key with WRITE_OWNER access. For more information, see Enabling and Disabling Privileges.
Ich denke, dass ist noch das Entscheidende was fehlt.

http://msdn.microsoft.com/en-us/libr...19(VS.85).aspx

Denke nicht das es mit der Domäne zusammenhängt, dass braucht man glaub ich nur wenn man die SID des USERS etc. ermitteln möchte.



Greatz

EDIT:

Before enabling any of these potentially dangerous privileges, determine that functions or operations in your code actually require the privileges.

EDIT2:

So, das Programm hat nun Debug-Rechte!

http://home.arcor.de/microware/Debug.png

Jetzt kann ich auf den Schlüssel zugreifen,.. aber es kommt jetzt wieder zu einer Zugriffsverletzung.

Bin echt gespannt ob ich das jemals in Griff bekomme. ;(
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

Registriert seit: 30. Nov 2003
61 Beiträge
 
Delphi 2005 Personal
 
#17

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 15:40
Die Zugriffsverletzung ist behoben.

Es lag ganz einfach daran das ich den Schlüssel den ich angegeben habe das hier --> \ vergessen habe.

"SOFTWARE\Google\",0

Wichtig zu wissen ist, wenn man mit dem API call "RegGetSecurity" z.B.: den DACL abfragen möchte, dann muss das Programm entsprechende Rechte besitzen. (siehe MSDN http://msdn.microsoft.com/en-us/libr...78(VS.85).aspx)

Meinem Programm habe ich "SeDebugPrivilege" zugteilt.

@Volle, wenn du das bei dir auch machst, dann klappt es sicherlich auch mit deinem "ACCESS_DENIED" Problem!



Der komplette Source-Code wird in kürze nachgereicht.

Greatz Core
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#18

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 15:52
ich werds versuchen, mal schauen was dann geht
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Volle

Registriert seit: 25. Nov 2003
Ort: Stuttgart
100 Beiträge
 
Delphi 7 Personal
 
#19

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 16:09
Also irgendwas laeuft z.Z. total schief

ich hab versucht den Code den Luckie verlinkt hat in C++ zu uebersetzen. Ich bekomme beim aufruf von

AccessCheck() den Errorcode 5 zurueck -> ACCESS_DENIED

Nagut, dann fehlen mir evtl die erwaehnten debug rechte. Den spass eingebaut:

AdjustTokenPrivileges() liefert 5 zurueck -> ACCESS_DENIED

ich weis grad echt nich mehr weiter
Eine Frage hab ich da noch: geht das ganze mit eingeschraenkten benutzerrechten ? Im moment bin ich zwar mit Adminrechten angemeldet, aber spaeter sollte das Prog mit eingeschraenkten Rechten laufen -> wenn das ueberhaupt nicht moeglich ist dann brauch ich garnicht weitermachen.
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#20

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 16:13
Zitat von CoRe.eXtreem:
Ich versuche jetzt ganz einfach mal das hier http://www.codeproject.com/KB/dotnet...?display=Print in ASM zu portieren.
Schön, nur ergibt das in der Praxis wenig Sinn für HKCU, da der Benutzer dort (neben Administratoren, die den Zugriff ohnehin erzwingen können) als einziger Leserechte hat. Leserechte für den internen (Pseudo-)Account "RESTRICTED" bedeutet nicht, dass jeder Benutzer mit einem eingschränkten Token Zugriff hat - es dient als Filter, um die Rechte zu definieren, die man trotz eines eingschränkten Tokens hat (CreateRestrictedToken).

Kurz: Es stellt sich mir die Frage nach dem Sinn, die Sicherheitsbeschreibung ermitteln zu müssen. In den meisten Fällen kommt man ohne aus. Bleibt also offen, was eigentlich erreicht werden soll...

Edit: Definiere "mit eingeschraenkten Rechten".
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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