Prozess Speicher versteckt lesen/schreiben



  • Ich habe das Problem, dass ich nicht auf einen Prozess zugreifen kann, da er u.a. von SSDT Hooks geschützt ist.
    Ok so weit ging es dann noch. Konnte alle SSDT Hooks entfernen und hab gedacht jetzt kann ich beliebig über OpenProcess(); ReadProcessMemory/WriteProcessMemory aus dem Usermode heraus hantieren.
    Aber: Ging nicht.
    Weil: Der Schutz überprüft offene Handles auf den Prozess und beendet ggfls das program.

    Wie komme ich da drumrum? Ich könnte zwar die Priorität hochsetzen, OpenProcess;RPM;CloseHandle aufrufen und priorität zurücksetzen, aber das ist auch nicht sicher (race conditions...)

    Kann ich nicht aus dem KernelTreiber heraus entsprechend was aus dem Prozess lesen?
    MmCopyVirtualMemory sah ja gut aus, bis ich gesehn hab das es NT6.0 vorraussetzt, was ich aufgrund der Portablität als kritische Einschränkung sehe.
    Außerdem brauch das ja auch ein Handle...

    Ich hab was in Erinnerung mit:

    1. In den prozessraum des prozesses wechseln
    2. Lesen/Schreiben
    3. Zurückwechseln

    aber wie geht das? Und was passiert, wenn der prozess zwischendurch beendet,ausgelagert o.ä. wird?

    Letzte Alternative wäre ein Hook auf ZwQuerySystemInformation und mein Handle raus löschen....Ist aber auch aufwendig



  • hey,

    über welches anticheat-system reden wir denn hier?

    bei hackshield z.b. kannste während das spiel lädt(/die funktionen gehookt sind) ne dll in das spiel injecten...

    prozessinternet hat man dann natürlich alle möglichkeiten zum lesen/schreiben des memorys (memcpy etc.)

    lg



  • nur interesse halber, wie entfernt man die SSDT hooks?



  • es geht um u.a. XTrap und GameGuard
    Da ich nicht immer weiß, welches angewand wird (mehrere Varianten sind möglich) und ich die gleiche Methode auf andre Programm anwenden will, soll es nicht davon abhängen.

    Es kann davon ausgegangen werden, dass Injections nicht möglich sind, genausowenig wie Inline Hooks im Prozess (schonmal wegen fehlender Injections)

    Hab gesehn das ProcessHacker einige der KernelMethoden selbst implementiert. Aber u.a. wird zumindest bei einer MmCopyVirtualMemory verwendet.
    Wie sieht es ansonsten mit Verwendbarkeit under Win2k-Win7 aus? (Abgesehn von 32/64Bit Probs)

    SSDT hooks entfernt man so, wie man welche anbringt 😉
    Einfach mal googlen, ist sehr aufwendig (zu erklären) und hier OT



  • Ich denke nicht, dass das Programm Handles überprüfen kann ohne einen Treiber zu installieren.

    Mein Plan für GameGuard war und ist es entsprechende API-Funktionen selbst zu implementieren. Dafür müsstest du dir einen kleinen Driver basteln.



  • Das programm (xTrap) verwendet einen Treiber und hookt die SSDT (s.o.)
    Ich habe ebenfalls einen Treiber, der die SSDT enthookt

    Die Frage ist nun, wie erstelle (oder bekomme) ich eine Crash-sichere Read/Write API, ohne Handles zu verwenden?

    Und: es ist möglich, aus Ring3 Handles zu überprüfen: http://w-shadow.com/blog/2006/10/19/listing-all-open-handles/



  • Flamefire schrieb:

    Und: es ist möglich, aus Ring3 Handles zu überprüfen: http://w-shadow.com/blog/2006/10/19/listing-all-open-handles/

    Hook das. 🙂



  • Das war die Idee, die ich im 1.Post angesprochen hatte: NtQuerySystemInformation zu hooken.
    Ist aber etwas knifflig, da dort wieder Pointer umzubiegen sind, die sich möglicherweise in OSes ändern



  • Hast du mal überprüft ob GameGuard eventuell nur ReadProcessMemory überwacht aber nicht NTReadVirtualMemory? Lustig wärs 😉



  • Gameguard weiß ich grad nicht
    Xtrap ist wie gesagt im Kernel vertreten mit regelmäßigen handlechecks und hooks auf viele SSDT einträge



  • Flamefire hast du icq oder msn? Ich hab auch probleme mit gameguard und versuche es zu bypassen vielleicht schaffen wir es zusammen



  • Flamefire schrieb:

    Gameguard weiß ich grad nicht
    Xtrap ist wie gesagt im Kernel vertreten mit regelmäßigen handlechecks und hooks auf viele SSDT einträge

    Habe etwas über Xtrap gelesen, wer zur Hölle lädt sich sowas in das System?
    Da hab ich lieber einen Trojaner, der macht nicht soviel Frickelei.



  • zu dem Thema hab ich auch mal ne Frage:
    wie kann Gameguard hooks erkennen? Es kann irgendwie änderungen in der Code Section finden aber wie?



  • winexec schrieb:

    zu dem Thema hab ich auch mal ne Frage:
    wie kann Gameguard hooks erkennen? Es kann irgendwie änderungen in der Code Section finden aber wie?

    Hashing.

    Auch etwas interessantes, zwar auf Warden bezogen, aber sicherlich hilfreich:

    http://blog.cypherjb.com/2009/11/winninja-module-hiding-code.html



  • hä? was soll das bringen, wenn ich meine DLL verstecke? der Hook befindet sich doch in der Gameexe dann da bringt es auch nix wenn die DLL unsichtbar ist.
    Und was ist PEB?



  • winexec schrieb:

    hä? was soll das bringen, wenn ich meine DLL verstecke? der Hook befindet sich doch in der Gameexe dann da bringt es auch nix wenn die DLL unsichtbar ist.
    Und was ist PEB?

    Nach Möglichkeit solltest du keine Spielfunktionen hooken.
    Hook API-Funktionen, also DirectX/WinAPI etc.
    Lass nur die Codesection des Prozesses in Ruhe.

    Außerdem bezieht sich der Link nicht nur auf DLLs.
    Du musst nach Möglichkeit herausfinden, was den Code hasht und da entsprechend hooken.



  • ich muss aber die Code Section des Games hooken



  • winexec schrieb:

    ich muss aber die Code Section des Games hooken

    ...

    Du musst nach Möglichkeit herausfinden, was den Code hasht und da entsprechend hooken.

    Kannst ja mal PEiD nach Signaturen bekannter Krypto/Hasing-Algorithmen ansetzen und sehen wo du eventuell ansetzen könntest.
    Gibt aber recht wenige Möglichkeiten da was zu machen.

    Edit: Einen Memory-Breakpoint auf die Codesection zu setzen ist auch ne super Idee. Was soll den sonst auf die Codesection zugreifen ?



  • Icematix schrieb:

    Edit: Einen Memory-Breakpoint auf die Codesection zu setzen ist auch ne super Idee. Was soll den sonst auf die Codesection zugreifen ?

    An sich ja, nicht aber, wenn das ganze Ding noch mit Themida geschützt ist 😉
    Für die neuste Variante habe ich keinen Bypass für olly. Trotz Ring0 Plugins wie Phantom.

    Da ich nur auf Daten-Speicher zugreifen muss, hat es in meinem Fall gereicht, die ZwQuerySystemInformation zu hooken. Dann übergeb ich meinem Treiber nur die PID und immer wenn die PID ZwQuerySystemInformation aufruft, kommt aus "irgendeinem" Grund nichts zurück 😃 😃 😃

    Funktioniert soweit. Das lustige war aber: Als ich die PID einfach so an meine Treiber geben wollte, hat Xtrap das erkannt und geblockt. Nicht schlecht...Jetzt übergebe ich die eben verschlüsselt. War nicht so leicht eine Verschlüsselung im Kernel zu basteln, aber musste ja nix gutes werden.



  • War nicht so leicht eine Verschlüsselung im Kernel zu basteln, aber musste ja nix gutes werden.
    

    DWORD pid ^= 1

    Sollte reichen 😃


Anmelden zum Antworten