Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Dateien und Registry-Einträge für eine Anwenugn simulier

  Alt 10. Jan 2008, 12:31
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;
$2B or not $2B
  Mit Zitat antworten Zitat