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 1 von 3  1 23      
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

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

RegGetKeySecurity

  Alt 6. Nov 2008, 15:02
Hallo Zusammen,

leider ist es kein Delphi aber ich hoffe ihr könnt mir trotzdem helfen. Ich bin schon am verzweifeln!

Ich möchte mit einem einfachen API Call "RegGetKeySecurity" die DACL vom gewünschten Schlüssel auslesen.


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

   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   sizeof pSecurityDescriptor      <-- Ich vermute der Fehler liegt hier
   push   offset pSecurityDescriptor
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity

   push   phkResult
   call   RegCloseKey

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
Was könnte da falsch sein?

Danke!

Greatz
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: RegGetKeySecurity

  Alt 6. Nov 2008, 20:49
Weißt du, wie es in C geht?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

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

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 10:29
Hier ein Auszug aus MSDN.

http://msdn.microsoft.com/en-us/library/aa379313(VS.85).aspx

Syntax

RegGetKeySecurity(HKEY hKey,SECURITY_INFORMATION SecurityInformation,PSECURITY_DESCRIPTOR pSecurityDescriptor,LPDWORD lpcbSecurityDescriptor);

Parameters

hKey [in]

A handle to an open key for which to retrieve the security descriptor.
SecurityInformation [in]

A SECURITY_INFORMATION value that indicates the requested security information.
pSecurityDescriptor [out, optional]

A pointer to a buffer that receives a copy of the requested security descriptor.
lpcbSecurityDescriptor [in, out]

A pointer to a variable that specifies the size, in bytes, of the buffer pointed to by the pSecurityDescriptor parameter. When the function returns, the variable contains the number of bytes written to the buffer.
  Mit Zitat antworten Zitat
Benutzerbild von CoRe.eXtreem
CoRe.eXtreem

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

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 11:29
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   sizeof SECURITY_DESCRIPTOR      ;<-- Ich vermute der Fehler liegt hier
   push   offset pSecurityDescriptor
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity

   push   phkResult
   call   RegCloseKey

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
Der "SECURITY_DESCRIPTOR" gehört in die nicht initialisierte section. Jetzt ist nur noch die Frage wie ich diesen initialisiere vor der verwendung.

In der MSDN (http://msdn.microsoft.com/en-us/libr...61(VS.85).aspx) steht dazu folgendes,...

The SECURITY_DESCRIPTOR structure contains the security information associated with an object. Applications use this structure to set and query an object's security status.

Because the internal format of a security descriptor can vary, we recommend that applications not modify the SECURITY_DESCRIPTOR structure directly. For creating and manipulating a security descriptor, use the functions listed in the See Also section.


Vielleicht kann mir bei der initialisierung des SECURITY_DESCRIPTOR helfen.

Viele Grüße
  Mit Zitat antworten Zitat
Volle

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

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 11:32
http://msdn.microsoft.com/en-us/library/aa378863(VS.85).aspx
Code:
BOOL WINAPI InitializeSecurityDescriptor(
  __out PSECURITY_DESCRIPTOR pSecurityDescriptor,
  __in  DWORD dwRevision
);
pSecurityDescriptor [out]
A pointer to a SECURITY_DESCRIPTOR structure that the function initializes.

dwRevision [in]
The revision level to assign to the security descriptor. This parameter must be SECURITY_DESCRIPTOR_REVISION.



ich hoffe das hilft
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
 
#6

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 11:34
Danke, genau das habe ich auch gerade gefunden.
Das Problem ist nur ich bekomme im CPU Register EAX 00000001 raus.

EAX 00000001 <---
ECX 00403020 RegAth.00403020
EDX 00292CA0
EBX 7FFD9000
ESP 0012FF8C
EBP 0012FF94
ESI 00000000
EDI 00000000
EIP 00401029 RegAth.00401029
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 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00000202 (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

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   SECURITY_DESCRIPTOR_REVISION
   push   offset pSecurityDescriptor
   call   InitializeSecurityDescriptor


   push   sizeof SECURITY_DESCRIPTOR      ;<-- Ich vermute der Fehler liegt hier
   push   offset pSecurityDescriptor
   push   DACL_SECURITY_INFORMATION
   push   offset phkResult
   call   RegGetKeySecurity

   push   phkResult
   call   RegCloseKey

   @_ExitProcess:
   push   0
   call   ExitProcess

end start
  Mit Zitat antworten Zitat
Volle

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

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 11:39
hoi,

sorry ich hab absolut keine ahnung von asm
Ich weis nich wie es mit dem Registry verhalten von windows ist aber wenn mit die Dacl's mit dateien verwendest musst du aufpassen ob du in einer domain bist oder nicht ... das is alles ein wenig undurchsichtig bzw ungeschickt.

wenn du es so garnich hinbekommst mach es doch auf die, zugegeben unschoene, art dass du einfach versuchst etwas zu aendern, sollte das nicht klappen wirds wohl an den zugriffsrechten liegen. wenns klappt dann machste es wieder rueckgaenig.

ich hab z.b. ueber die Dacl's versucht rauszufinden ob ich schreibrechte auf ne datei hab. kannste total erden. Ich hab keinen besseren weg als umbennen und bei bedarf wieder zurueck umbennen gefunden.

cYa

[edit]
probier mal Software anstatt SOFTWARE
[/edit]

[edit2]
ich mach das in C so: ( wie gesagt is mit dateien, is aber eigentlich gleich)
Code:
DWORD dwSizeNeeded=0;
AnsiString filePath=Edit1->Text;
BYTE* pSecDescriptorBuf;
pSecDescriptorBuf = new BYTE[1];
bool bSuccess = GetFileSecurity((filePath.c_str()),DACL_SECURITY_INFORMATION,pSecDescriptorBuf,1,&dwSizeNeeded);


delete pSecDescriptorBuf;
pSecDescriptorBuf = new BYTE[dwSizeNeeded];
bSuccess = GetFileSecurity((const_cast<char*>filePath.c_str()),DACL_SECURITY_INFORMATION,pSecDescriptorBuf,dwSizeNeeded,&dwSizeNeeded);
also erstmal anfragen und schauen wie gross der buffer sein muss und dann nochmal mit der richtigen groesse. vielleciht liegts bei dir da auch dran?
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
 
#8

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 11:51
Hey Volle!

Vielen Dank für deine Hilfe!

Das mit dem DACL ist ein absoluter Müll! Bis ich das mal blicke,....

Das Problem ist, man findet dazu auch fast nichts im Internet oder zumindest nicht genug.

Ich versuche jetzt ganz einfach mal das hier http://www.codeproject.com/KB/dotnet...?display=Print in ASM zu portieren.

So wie es aussieht benötige ich die Größe schon bei der initialisierung vom SECURITY_DESCRIPTOR.

Von den Rechten her ist es kein Thema,... Probiere es hin und wieder mit Systemrechten. Also Vollzugriff auf alles, daran lag es nicht.

Komisches DACL,...

Grüßle
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 12:01
Zitat von Volle:
ich hab z.b. ueber die Dacl's versucht rauszufinden ob ich schreibrechte auf ne datei hab. kannste total erden. Ich hab keinen besseren weg als umbennen und bei bedarf wieder zurueck umbennen gefunden.
Nö, man muss es nur richtig machen: http://www.michael-puff.de/Developer...ileAccess.html

@ CoRe.eXtreem: Warum machst du das überhaupt alles mit ASM?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Volle

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

Re: RegGetKeySecurity

  Alt 7. Nov 2008, 12:05
vielleicht hilft dir das weiter:
msdn

bist sicher das dwRevision die grösse sein soll? hoert sich fuer mich nich so an .. das is doch eher ne konstante oder?

@luckie:

bist du sicher dass das auch in ner domain geht, wenn die datei von einem domain user angelegt wurde und ein nicht domain user die rechte abfragen will? Hab grad leider kein delphi da und hab nich so arg lust das sinnloser weise in c++ zu portieren um dann festzustellendass es genauso wenig klappt wie bei mir
cYa n' sTay [ S ! C ]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:24 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