![]() |
Dateien und Registry-Einträge für eine Anwenugn simulieren
Moin. Ich wollt mal fragen ob jemand von euch eine Möglichkeit kennt, mit der ich einem Programm "vorgauckeln" kann, das div. Dateien in einem bestimmten Ordner sowie bestimmte Regitsry-Einträge vorhanden sind. Sowas ähnlich macht glaub ich Thinstall. Damit kann man Anwendungen "virtualisiert" in einer exe-Datei "installieren" und hat dann eine portable Anwendung.
Gruß DerAnkh |
Re: Dateien und Registry-Einträge für eine Anwenugn simulier
Beim "Vorgaukeln" würde mir Hooken der entsprechenden API-Funktionen für diesen Prozess einfallen.
|
Re: Dateien und Registry-Einträge für eine Anwenugn simulier
Vor einer Weile hab ich auch mal an sowas gedacht,
(nja, hatt noch nicht genügend Zeit dafür gefunden) sozusagen eine MiniSandbox für ein Programm. Und das Hooken API wäre da bestimmt eine gute Idee, nur welche Funktionen da alle gehookt werden sollen/müssen ist da eines der Probleme. (OK und mit Hooks hab ich auch noch keine Erfahrungen und das müßte ich och erstmal lernen -.-'') Im Grunde mußt du nur alle "nötigen" API's umleiten, welche auf Dateien und die Registry zugreifen. Aufruf im Programm > dein Hook > WinAPI im Hook mußt du dann nur noch Anhand der übergebenen Parameter entscheiden was gemacht werden soll - Zugriff sperren (z.B. per Rückgabewert behaupten die Datei gäbe es nicht) - selber den Zugiff ausführen (da kann man dann z.B. Pfade ändern) - oder alles an die WinAPI weiterleiten (wenn nichts geändert werden soll) |
Re: Dateien und Registry-Einträge für eine Anwenugn simulier
also was ich bis jetzt gefunden habe sind folgende APIs
Code:
Diese werden wohl für ein RootKit verwendet, um Dateien zu verstecken, aber ich will ja genau das Gegenteil.
NtCreateFile
ZwOpenFile ZwQueryDirectoryFile ZwOpenKey ZwQueryKey ZwQueryValueKey ZwEnumerateValueKey ZwEnumerateKey ZwSetValueKey ZwCreateKey Was ich vor habe ist sowas ähnliches wie eine MiniSandBox. Ich Bastel mir gerade ein eigenes "Menü" für meine PortableApps und nun wollte ich mal sehen ob es möglich ist auch Programme portabel zu machen die eigentlich installiert werden sollen. Ich werd mir mal die Hook-Tutorials angucken und sehen wie weit ich komme. Gruß tr909 |
Re: Dateien und Registry-Einträge für eine Anwenugn simulier
viele Rootkits machen halt "nur" Ersteres (Zugriff sperren)
also Funktion abfangen und wenn einer der "gewünschten" Datei-/Schlüssel-/Wertnamen verlangt wird, dann einfach behaupten die/der/den Datei/Schlüssel/Wert gäbe es nicht und ansonsten wird der Aufruf an die WinAPI weitergeleitet. Du mußt genau das Gegenteil machen: Datei-/Schlüssel-/Wertname prüfen und wenn erforderlich der WinAPI einen anderen Namen übergeben oder selber ein passendes Ergebnis (Result) zurückgeben. z.B. wenn du alles was in C:\Verzeichnis1\... drin ist in X:\Verzeichnis2\ speichern willst, dann brauchst du nur alle Datei-/Verzeichnisnamen welche das Programm verlangt überprüfen und wenn der Name mit C:\Verzeichnis1\ anfängt, dann dieses durch X:\Verzeichnis2\ ersetzen und den neuen Namen an die WinAPI weitergeben. So als einfaches Beispiel (ohne Behandlung von Groß-Kleinschreibung, langen/kurzen Dateinamen, unterschiedlichen Mountadressen und was es sonst noch gibt...)
Delphi-Quellcode:
APIDirExists := @DirExists; // billiger Hook-Ersatz
DirExists := @DirExistsHook; Function DirExistsHook(Dir: String): Typ; Begin // einfach nur ein bestimmtes Verzeichnis umleiten If Copy(Dir, 1, 16) = 'C:\Verzeichnis1\' Then Dir := 'X:\Verzeichnis2\' + Copy(Dir, 17, Length(Dir); Result := APIDirExists(Dir); End;
Delphi-Quellcode:
APIDirExists := @DirExists; // billiger Hook-Ersatz
DirExists := @DirExistsHook; Function DirExistsHook(Dir: String): Typ; Begin // umleiten If Copy(Dir, 1, 16) = 'C:\Verzeichnis1\' Then Begin Dir := 'X:\Verzeichnis2\' + Copy(Dir, 17, Length(Dir); Result := APIDirExists(Dir); // sperren/verstecken End Else If Copy(Dir, 1, 16) = 'D:\Verzeichnis3\' Then Begin Result := False; // so tun als gäbe es das Verzeichnis End Else If Copy(Dir, 1, 16) = 'D:\Verzeichnis4\' Then Begin Result := True; // unverändert behandeln lassen End Else Result := APIDirExists(Dir); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz