Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi API von Reg.exe (https://www.delphipraxis.net/115650-api-von-reg-exe.html)

Metal_Snake2 15. Jun 2008 19:22


API von Reg.exe
 
Hallo,

ich bin gerade dabei das Programm "Reg.exe" welches Standartmäßig (zumindes in XP) dabei ist zu analysieren.
Es ist ein Kommandozeilen- basierendes 32-bit programm. Habe es schon mit Regmon, Procmon analysiert jedoch bekomme ich einach
nicht heraus wie es das Programm schaft Einträge anzuseigen die z.B. Regedit/Regedit32 nicht findet. Reg.exe scheint auch nicht dei Native- API zu benutzen. Bin gerade verwirrt, kann es sein das dass Programm mit NTSetInformationKey einpaar besondere flags setzt vor dem lesen der Schlüssel Werte? Danke für lesen, ich hoff echt das mir jemand weiter helfen kann.

Dezipaitor 15. Jun 2008 21:17

Re: API von Reg.exe
 
Was willst du denn machen?

Olli 15. Jun 2008 23:05

Re: API von Reg.exe
 
Wie wäre es mit der gleichen Methode die auch bei Dateien funktioniert? Backup/Restore-Privileg um Dateien zu listen die man ansonsten nicht sehen kann? Immerhin gibt es Registry-APIs um ähnliches Backups von Schlüsseln und Hives anzufertigen, warum soll das hier nicht ähnlich funktionieren?

Die entsprechenden Funktionen werden auch importiert:

- AdjustTokenPrivileges
- LookupPrivilegeValueW
- OpenProcessToken

Olli 15. Jun 2008 23:14

Re: API von Reg.exe
 
Es gibt einen Aufruf von MSDN-Library durchsuchenAdjustTokenPrivileges in der ganzen Binärdatei (habe die 32bit-Version von Vista SP1) und die Funktion welche den Aufruf enthält - welche ich mal spontan SetPrivilegeByName genannt habe - nur viermal aufgerufen. Alle vier Aufrufe bestätigen exakt meine oben gemachte Annahme.

Code:
.text:010079F4 078                 push   2               ; int
.text:010079F6 07C                push   offset Name    ; "SeBackupPrivilege"
.text:010079FB 080                 push   [ebp+lpSystemName] ; lpSystemName
.text:010079FE 084                 call   SetPrivilegeByName
Code:
.text:01007C75 074                 push   2               ; int
.text:01007C77 078                 push   offset aSerestoreprivilege ; "SeRestorePrivilege"
.text:01007C7C 07C                push   [ebp+lpSystemName] ; lpSystemName
.text:01007C7F 080                 call   SetPrivilegeByName
Code:
.text:01007DDE 070                 push   2               ; int
.text:01007DE0 074                 push   offset aSerestoreprivilege ; "SeRestorePrivilege"
.text:01007DE5 078                 push   [ebp+lpSystemName] ; lpSystemName
.text:01007DE8 07C                call   SetPrivilegeByName
Code:
.text:01007F37 070                 push   2               ; int
.text:01007F39 074                 push   offset aSerestoreprivilege ; "SeRestorePrivilege"
.text:01007F3E 078                 push   [ebp+lpSystemName] ; lpSystemName
.text:01007F41 07C                call   SetPrivilegeByName

Metal_Snake2 16. Jun 2008 13:44

Re: API von Reg.exe
 
Erstmal danke für die das Antworten!

Also ich glaub ich habe mich nicht genau genug ausgedrückt, deswegen hast du mich @Olli eventuell falsch verstanden.
Ich möchte keine Keys Laden, Speichern, Importieren oder Exportieren.

Ich mache es mal jetzt so konkret wie es nur sein kann weil ich echt am verzweifeln bin wie das funktioniert:

Also ich installiere mal aus spass den "Adramax Keylogger", der fügt einen Autostart eintrag in HKLM\...\Run hinzu.
Über dem Usermode per DLL- Injektion schaft er es indem er wie ich denke ziemlich viele Registry- WinAPIs hookt, den Autostart
Eintag für alle dei Anwendungen welche mit der DLL infiziert sind zu verstecken.

Mich wundert nun folgendes: Autorun, msconfig oder gar registrie Editoren welche auf dei Native API (NtQueryKey und co) aufsetzen
finden diesen Eintrag nicht! Wie schaft es das dieses kleinen prog "reg.exe" (ist meistens in System Verzeichnis)
über den Komandozeilenbefehl "Reg Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run " trotzdem diesen versteckten Schlüssel Wert zu finden. Was natürlich sein könnte ist das es der Keylogger einfach nicht schaft seine DLL in den Adressraum von Reg.exe zu injezieren da es nur ein Komandozeilenbasierendes prog ist (ohne gui). Oder verwender reg.exe einpaar Tricks?

Edit: Ich hab gerad mir ProcMon nachgeschaut und es werden wirklich nicht die Dll in reg.exe injeziert.
Hmm und das ist jetzt wohl der vorteil von Reg.exe das es keine GUI...also Fenster hat?

Olli 16. Jun 2008 14:42

Re: API von Reg.exe
 
Zitat:

Zitat von Metal_Snake2
Erstmal danke für die das Antworten!

Also ich glaub ich habe mich nicht genau genug ausgedrückt, deswegen hast du mich @Olli eventuell falsch verstanden.
Ich möchte keine Keys Laden, Speichern, Importieren oder Exportieren.

Es klang so, als wölltest du wissen, wieso reg.exe etwas sehen kann, was einige andere Programme nicht sehen. Das Backup-Privileg ermöglicht exakt das.

Zitat:

Zitat von Metal_Snake2
Mich wundert nun folgendes: Autorun, msconfig oder gar registrie Editoren welche auf dei Native API (NtQueryKey und co) aufsetzen
finden diesen Eintrag nicht! Wie schaft es das dieses kleinen prog "reg.exe" (ist meistens in System Verzeichnis)
über den Komandozeilenbefehl "Reg Query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run " trotzdem diesen versteckten Schlüssel Wert zu finden. Was natürlich sein könnte ist das es der Keylogger einfach nicht schaft seine DLL in den Adressraum von Reg.exe zu injezieren da es nur ein Komandozeilenbasierendes prog ist (ohne gui). Oder verwender reg.exe einpaar Tricks?

Wie startest du denn reg.exe? Von der Kommandozeile aus? Wenn ja, versuche mal folgendes. Schreibe ein kleines Programm und starte von dem aus via ShellExecute, ShellExecuteEx und WinExec jeweils einmal reg.exe und schau dir die Ausgabe an. Ein Verdacht wäre, daß der Keylogger nicht alle entsprechenden APIs hookt oder gar nur den Hook auf ShellExecute(Ex) registriert hat.

Zitat:

Zitat von Metal_Snake2
Edit: Ich hab gerad mir ProcMon nachgeschaut und es werden wirklich nicht die Dll in reg.exe injeziert.
Hmm und das ist jetzt wohl der vorteil von Reg.exe das es keine GUI...also Fenster hat?

Das wiederum könnte darauf hinweisen, daß das Hooking über Fensterhooks initialisiert wird. Daß also Fensterhooks die Methode sind um anfangs in den Adreßraum des Prozesses zu kommen in dem manipuliert werden soll.

Metal_Snake2 16. Jun 2008 15:54

Re: API von Reg.exe
 
Also es liegt wirklich daran das die DLL nicht in Reg.exe indiziert werden konnte.

Also ich gehe jetzt mal einen schritt weiter und frage mich nun folgedes.

Wie schaft es das Autostart Manager Programm OSAM(Hier zu kriegen) ohne einen Kernelmode Treiber registry Einträge zu finden welche versteckt sind.

Ich mein ich habe mal zu testzwecken den "Elite Keylogger" runtergeladen und installiert, er verwendet einen "Low-Level" kernelmode- Treiber. Ok es werden einpaar SSDT- Funktionen gehookt und auch mehr, somit dürfte ja ein Programm welches nur im
Usermode rumspielt wie OSAM eigentlich keine chance haben an die Schlüssel ranzukommen. Aber irgendwie schaft es das Programm
die Einträge zu finden.

Ich hab mir folgendes überlegt:

Kann es sein das OSAM direkt von den Registry Hives auslies? Oder OSAM einen trick verwendet und ZW* Systemaufrufe vom Usermode ausführt, indem er die Methoden aus der NtDll verwendet, macht aber keinen unterschied zu NT* aufrufen.

Hab mich schon öfters gefragt wie das prog sowas schaft, ich hoffe Olli kannst mir weiterhelfen.

Danke

Olli 16. Jun 2008 19:48

Re: API von Reg.exe
 
Zitat:

Zitat von Metal_Snake2
Ich mein ich habe mal zu testzwecken den "Elite Keylogger" runtergeladen und installiert, er verwendet einen "Low-Level" kernelmode- Treiber. Ok es werden einpaar SSDT- Funktionen gehookt und auch mehr, somit dürfte ja ein Programm welches nur im Usermode rumspielt wie OSAM eigentlich keine chance haben an die Schlüssel ranzukommen. Aber irgendwie schaft es das Programm die Einträge zu finden.

Da muesste man sich den Treiber und das Programm welches schafft ihn zu umgehen angucken.

Zitat:

Zitat von Metal_Snake2
Kann es sein das OSAM direkt von den Registry Hives auslies?

Unwahrscheinlich. Wenn ich mich recht entsinne, geht das nur unter ganz bestimmten Umstaenden.

Zitat:

Zitat von Metal_Snake2
Oder OSAM einen trick verwendet und ZW* Systemaufrufe vom Usermode ausführt, indem er die Methoden aus der NtDll verwendet, macht aber keinen unterschied zu NT* aufrufen.

Zw* == Nt* im Usermode. Und da alle Aufrufe durch das Callgate in den Kernelmode fuehren, sollte SSDT-Hooking hier effektiv sein.

richard_boderich 16. Jun 2008 20:37

Re: API von Reg.exe
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Metal Snake

Probier mal ob mein Testprogramm die Autostarteinträge findet. Würde mich mal interessieren. Von Adramax hab ich nur ein Keylogger light getestet und der wird gefunden. Einfach die Exe starten und auf Scan Komplett drücken.

Metal_Snake2 18. Jun 2008 16:03

Re: API von Reg.exe
 
@richard_boderich

ne dein Testprogramm findet nix, wie den auch...in dem Adressraum deines Progs. werden die DLLs von Adramax injeziert, also all deine Registry Aufrufe sind gehookt. Ich entnehme aus dem Registry-Pfad das du scheinbar mit der Nativen API arbeitest, aber auch die Funktionen hookt die DLL.

@Olli

Ich hab dem Autor vom OSAM geschrieben aber er antwortet nicht. Naja warum jetzt reg.exe die versteckten Einträge findet ist klar
aber wie es OSAM schaft ist mir schleierhaft.

Hat jemand ne idee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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