2016-05-12 5 views
-2

Ich erinnere mich, dass ich an einem Punkt eine kompilierte binäre Fähigkeit deaktivieren musste, auf das Internet zuzugreifen, und ich habe vergessen, wie ich es gemacht habe.Winsock API-Aufrufe in einer kompilierten Binärdatei ändern, um 0 oder -1 zurückzugeben

Sie können die Winsock-Aufrufe nicht einfach aus der Importtabelle löschen, da dann ein schwerwiegender Fehler auftritt. Wie ich mich erinnere, gab es jedoch eine Möglichkeit, eine bestimmte Funktion immer 0 oder 1. Zum Beispiel, wenn WSAStartup immer -1 zurückgibt, dann beendet das alle weiteren Versuche, von der Anwendung auf das Internet zuzugreifen.

Es ist möglich, dass ich mich nicht erinnere, und ich habe tatsächlich eine Binärdatei geändert, die in den Speicher geladen wurde, aber ich dachte, ich hätte irgendwie eine statische Binärdatei auf der Festplatte geändert, um Netzwerk API-Aufrufe abzulehnen. Wie kann ich das machen?

+1

Wäre es nicht einfacher, den Zugriff auf das Netzwerk in Ihrem Code zu beenden. –

+0

@DavidHeffernan Ich habe weder Zugriff auf den Quellcode für diese Binärdatei, noch habe ich die Abhängigkeiten, die notwendig sind, um sie zu kompilieren, selbst wenn ich den Quellcode hätte. –

+1

OK. In diesem Fall warum nicht die Firewall benutzen? –

Antwort

0

Der Trick ist vermutlich, dass die Import-Tabelle bezieht sich nicht nur auf WSAStartup, sondern auf Ws2_32.dll : WSAStartup, .... Sie können den letzten Teil nicht patch (unwahrscheinlich, um eine bequeme Funktion in WS2_32.dll zu finden), aber Sie können definitiv den DLL-Namen selbst patchen.

Nun betrifft dies alle Funktionen von dieser DLL, aber es bedeutet nicht, dass Ihre Ersatz-DLL alle Funktionen ersetzen muss. Die meisten Funktionen könnten weitergeleitet werden, d. H. Wsprox.Dll:Foo weiterleiten an Ws2_32.Dll:Foo.

Aber in diesem Fall könnten Sie wahrscheinlich nur jede Funktion stopfen. Die Funktionssignaturen sind für keine Funktion außer WSAStartup irrelevant. Der Loader muss nur Einträge haben. Heck, mit etwas Hacking könntest du alle Funktionsnamen als Synonyme für WSAStartup definieren. Setzen Sie einfach Foo=WSAStartup in die Exportliste.

+0

Richtig, aber ich hatte gehofft zu vermeiden, eine Stub-Funktion oder ws2_32.dll Ersetzung zu schreiben. Wenn es eine andere Funktion gibt, die die gleichen Argumentbreiten wie WSAStartup verwendet und immer -1 zurückgibt, könnte man sie natürlich in die Importtabelle auf diese Funktion verweisen, aber ich denke nicht, dass es eine gibt und eine alternative Version von ws2_32.dll erstellt einen solchen Export einzudämmen, wäre ein Ärgernis. –

+0

Wenn Sie keine Ersatz-DLL schreiben oder einen Netzwerkfiltertreiber schreiben oder eine Firewall verwenden, ist das Patchen der Importtabelle die einzige verbleibende Option. Da Sie keinen Quellcode haben, schreiben Sie eine separate Launcher-App, die die Haupt-App startet und Code einfügt, um die Tabelle beim Start zu patchen. –