Wie funktioniert RunAsDate?

  • Allgemein

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Wie funktioniert RunAsDate?

    Hallo,

    mich interessiert welche Mechanismen in RunAsDate werkeln. Der Hersteller schreibt dazu nur:
    RunAsDate intercepts the kernel API calls that returns the current date and time (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime), and replaces the current date/time with the date/time that you specify.

    Aber nicht welche Funktionen dazu genutzt werden und wie diese parametriert sind. Da sich die Änderungen nur auf eine konkrete Instanz und nicht alle Prozesse der gleichen .exe-Datei beziehen, muss die Instanz von RunAsDate selbst erzeugt worden sein. Ich würde das Datum jedoch gerne für alle Instanzen modifizieren. Kennt sich da jemand aus?

    vG fufu
    @PlayToday Wenn Du fufus Post nochmal liest, dann siehst Du, dass er das bereits weiß und geschrieben (sogar aus der Doku zitiert) hat. Also nein, eher weniger. ;)
    Er fragt sich, wie das intern aussieht, welche Parameter für die internen Funktionen vorhanden sind und wie er das auf alle Instanzen ausweiten kann, weil das anscheinend nur immer eine entsprechend modifiziert startet.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hier die Kurzfassung, wie RunAsDate funktioniert:

    - Liest die eingestellten Parameter aus dem Dialog (oder von der Kommandozeile)
    - Startet den Zielprozess mit unterbrochenem Hauptthread (CreateProcess mit Flag CREATE_SUSPENDED)
    - Extrahiert eine DLL aus seinen Ressourcen ins Temp-Verzeichnis
    - Kopiert die DLL in den Adressraum des Zielprozesses
    - Kopiert eine nackte Funktion (ich nenne sie mal "Primer") in den Zielprozess. Der Primer ruft LoadLibrary und GetProcAddress auf der injizierten DLL auf.
    - Kopiert die Parameter für die Aufrufe des Primers in den Zielprozess (DLL-Name + Funktionsname "InitDate")
    - CreateRemoteThread startet den Primer. Der lädt die DLL, findet die InitDate-Funktion und ruft sie auf.

    InitDate läuft im Adressraum des Zielprozesses:
    - Findet die Einsprungpunkte der 3 auf der Webseite genannten Funktionen
    - Überschreibt jeweils die ersten 6 Byte der gefundenen Adressen (d.h. den Anfang der Funktionen) mit eigenem Code
    - Der eigene Code springt zu einer passenden in der DLL implementierten Funktion
    - Die implementierte Funktion führt zunächst den überschriebenen Funktionsheader aus und kann dann mit dem Call machen was sie will - hier wird der Rückgabewert geändert.

    Zurück in RunAsDate:
    - Setzt das gestartete Programm via ResumeThread fort
    - Nachbereitung, Aufräumen + Programmende.
    Gruß
    hal2000