Überprüfen ob eine Datei injected wurde

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    Überprüfen ob eine Datei injected wurde

    Hey liebe Comm...

    Wie ich bereits im Titel geschrieben habe, versuche ich herauszufinden, wie ich prüfen kann ob eine Datei injected wurde.

    Auf meinem PVP Server werden mittels dll Injection leider ziemlich viele Lücken ausgenutzt die so auf die schnelle nicht zu lösen sind.


    Das Spiel ist nur über meinen Launcher spielbar. D.h. wenn ich von vornherein prüfen kann ob die spieldatei (z.b. spiel.exe) injected wurde, kann ich ihn einfach aus dem Spiel werfen.

    Ich bin leider blutiger Anfänger, was sowas angeht. Hat da jemand Rat für mich? Ich hab schon überlegt, ob durch das Injecten nicht vielleicht sogar der Hash-Code der Datei verändert wird?

    Ich bedanke mich schonmal für eure Hilfe
    Als blutiger Anfänger leider ziemlich schwer sich vor sowas zu schützen.
    Es gibt ja auch verschiedene Injection Möglichkeiten:

    - LoadLibrary über CreateRemoteThread
    - Manual Mapping
    - etc.

    Bei LoadLibrary ist es noch recht einfach, du kannst dir ein Handle zum Game-Prozess mittels OpenProcess()
    beschaffen, und dann dort die Module iterieren und halt entsprechend reagieren wenn ein Modul da nicht hingehört.

    Beim Manual Mapping wird es wesentlich schwieriger, da gibt es nicht so einfach die Möglichkeit Module zu iterieren weil beim Manual Mapping
    die Bibliothek manuell in den Prozess eingepflegt wird und nicht auf die "Liste" von Modules gesetzt.

    Das ist ein ziemlich komplexes Thema und für einen blutigen Anfänger ziemlich schwer erste Erfolge zu erzielen.
    Es gibt noch mehrere Möglichkeiten als die o.G. aber die müsstest du schonmal abdecken weil es mittlerweile Injector gibt die auf Knopfdruck die Methode ändern.

    Anti Cheat Software muss heutzutage soweit gehen, das u.U. Rootkits eingesetzt werden um vom Ring0 (Kernel Mode) mit Treibern gearbeitet werden muss um die Leute abzuhalten irgendwelchen Mist zu bauen :D

    Das ist keine einfache Sache.

    Tobias17 schrieb:

    Ich hab schon überlegt, ob durch das Injecten nicht vielleicht sogar der Hash-Code der Datei verändert wird?

    Injected wird erst, wenn der Zielprozess sich bereits im Arbeitsspeicher befindet. Ein Hash der Datei kannst du nur auf der Festplatte selbst erstellen. Wenn du versuchen würdest den Arbeitsspeicher zu hashen, würdest du unterschiedliche Hashs bekommen, weil sich im Arbeitsspeicher beim Prozess ja auch sonst viel tut, nicht nur die injected Library.

    seh schrieb:

    Ein Hash der Datei kannst du nur auf der Festplatte selbst erstellen. Wenn du versuchen würdest den Arbeitsspeicher zu hashen, würdest du unterschiedliche Hashs bekommen, weil sich im Arbeitsspeicher beim Prozess ja auch sonst viel tut, nicht nur die injected Library.

    Von den statischen Adressen sollte man aber einen dauerhaft gültigen Hash erzeugen können. Wenn die Bytes im .TEXT-Bereich modifiziert werden (z.B. mit NOPs [0x90] - No Operation), würde sich logischerweise auch der Hash ändern.
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Genau, es gibt halt wirklich mehrere Möglichkeiten wie man sowas angeht.

    .TEXT Bereich auf Modifikationen zu prüfen würde gehen, allerdings deckst du damit halt nur die Instruktionen ab, d.h. würde jemand am vorhandenen Instruktionsset etwas ändern würde es ein anderer Hash werden.

    Meistens reicht es aber eben den .DATA Bereich zu modifizieren um den gewünschten Vorteil zu bekommen. Und der .DATA Bereich ist eben der Bereich der total variabel ist.

    Dürfte man erfahren um was es sich für ein Spiel handelt?

    seh schrieb:

    Genau, es gibt halt wirklich mehrere Möglichkeiten wie man sowas angeht.

    .TEXT Bereich auf Modifikationen zu prüfen würde gehen, allerdings deckst du damit halt nur die Instruktionen ab, d.h. würde jemand am vorhandenen Instruktionsset etwas ändern würde es ein anderer Hash werden.

    Meistens reicht es aber eben den .DATA Bereich zu modifizieren um den gewünschten Vorteil zu bekommen. Und der .DATA Bereich ist eben der Bereich der total variabel ist.

    Dürfte man erfahren um was es sich für ein Spiel handelt?


    Es handelt sich um Nostale.

    Die meisten nutzen Packetlogger und spammen dann damit. So erhalten Sie Vorteile wie Gold usw oder lassen den Server crashen
    Welche Server Files benutzt du? Emulator oder geleakte Files?
    Falls du einen Emulator nutzt und den Quellcode dazu hast, dann fixt du das ganze besser auf der Server Seite.
    Serverseitig lässt sich da nämlich meistens relativ einfach was machen und du brauchst keine Angst, das jemand das ganze wieder umgeht.
    @Tobias17 Ich hatte dir ne PM geschickt, wenn du magst kontaktier mich mal per Discord, dann kann ich dir damit vielleicht helfen.

    Es ist wahrscheinlich wesentlich einfacher eine Art Statistik System serverseitig aufzubauen um so herauszufinden, wie oft ein Spieler eine gewisse Funktion nutzt. Wenn es statistisch in kurzer Zeit übertriebene Werte sind, wie z.B. keine Ahnung, mit dem Packet Logger wird z.B. ein Paket simuliert, welches dem Spieler Gold gibt, sowas lässt sich an sich beheben, du musst jederzeit wissen für was wird Gold ausgegeben. Du hast auf jeden Fall die Möglichkeit es serverseitig zu beheben, wie leicht es ist, weiß ich nicht, ich gehe schon davon aus, dass es einiges an Zeit brauchen wird, aber es wird mit Sicherheit einfacher sein als clientseitig da in Sachen ANti Cheat was zu basteln :)