So ändern Sie eine Funktion in eine DLL kompiliert
Ich möchte wissen, ob es möglich ist, zu "Bearbeiten" den code in eine bereits kompilierte DLL.
I. E. Stell dir vor, es ist eine Funktion, die aufgerufen wird sum(a,b)
innen Math.dll
welche addiert die zwei zahlen a
und b
Sagen wir, ich habe verloren, den source-code meiner DLL. Also das einzige was ich habe ist die binäre DLL-Datei.
Gibt es eine Möglichkeit, die ich öffnen konnte, Binär-Datei, und suchen Sie, wo meine Funktion befindet, und ersetzen Sie die sum(a,b)
routine mit, zum Beispiel, eine andere routine, dass gibt die Multiplikation von a
und b
(statt der Summe)?
In Zusammenfassung, ist es posible zu Bearbeiten Binär-code-Dateien?
vielleicht mit dem reverse-engineering-tools wie ollydbg?
Wenn Sie die Funktion in der dll exportiert, warum nicht einfach wickeln Sie die dll?
Ich bin nicht nur darüber zu reden exportierten Funktionen in der DLL. Was ist, wenn die Summe(a,b) ist eine private Funktion in der Dll? nicht exportiert zu werden, öffentlich. ist es posible zu suchen, diese Routinen und ändern Sie Sie?
mögliche Duplikate von Suche eine Funktion in einer Demontage
Ich denke, das ist nur ein teilweise "duplizieren".
InformationsquelleAutor Herno | 2013-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist definitiv möglich (solange die DLL nicht kryptographisch signiert ist), aber es ist eine Herausforderung. Sie können es mit einem einfachen Hex-editor, obwohl abhängig von der Größe der DLL müssen Sie aktualisieren eine Menge Abschnitte. Versuchen Sie nicht, Lesen Sie die raw-binary, sondern führen Sie es durch einen disassembler.
Innerhalb der kompilierten binären werden Sie sehen, eine Reihe von esoterischen bytes. Alle opcodes, die normalerweise geschrieben in Assembler-Anweisungen wie "anrufen", "jmp", etc. übersetzt wird der Rechnerarchitektur abhängig byte entspricht. Wenn Sie einen disassembler der disassembler wird, ersetzen Sie diese binären Werte mit Montageanleitung, so dass es viel einfacher ist, zu verstehen, was passiert ist.
Innerhalb der kompilierten binären Sie werden auch sehen, eine Menge von Referenzen zu hart codiert Standorten. Zum Beispiel, statt zu sehen, "rufen Sie add ()", es wird "call 0xFFFFF." Der Wert hier ist in der Regel ein Verweis auf eine Anweisung, sitzen an einem bestimmten offset in der Datei. In der Regel ist dies die erste Anweisung der Zugehörigkeit zu der Funktion aufgerufen wird. Zu anderen Zeiten ist es stack-setup/cleanup-code. Dies ist abhängig vom compiler.
Solange die Anweisungen, die Sie ersetzen sind die exakt gleiche Größe wie die original-Anleitung, Ihre Abstände noch Stimmen, und Sie brauchen nicht zu aktualisieren, der rest der Datei. Jedoch, wenn Sie ändern die Größe der Anweisungen, die Sie ersetzen, müssen Sie manuell aktualisieren Sie alle Verweise auf Speicherorte (das ist wirklich mühsam, btw).
Tipp: Wenn Sie die Anweisungen, die Sie sind hinzufügen, werden kleinere als das, was Sie ersetzt haben, können Sie pad den rest mit NOPs für zu halten, die Standorte von erste ab.
Hoffe, das hilft, und happy hacking 🙂
InformationsquelleAutor Freedom_Ben
Umwege, eine Bibliothek zur Instrumentierung beliebiger Win32-Funktionen auf x86-Rechnern. Umwege fängt Win32-Funktionen, die durch neu-schreiben der target-Funktion-Bilder. Das Detours-Paket enthält auch Dienstprogramme zum befestigen beliebiger DLLs und Daten-Segmente (sogenannte payloads) für alle Win32-binary.
Download
InformationsquelleAutor sergmat
Können Sie, natürlich, hex-editieren der DLL zu Inhalt Ihres Herzens und tun alle Arten von fancy Dinge. Aber die Frage ist, warum sich überhaupt die Mühe, wenn Ihre Absicht ist, ersetzen Sie die Funktion, um mit zu beginnen?
Erstellen Sie eine neue DLL, die neue Funktion, und ändern Sie den code, der Anrufe die Funktion, die in der alten DLL zum Aufruf der Funktion in der neuen DLL.
Oder haben Sie verlieren Sie den source-code der Anwendung als auch? 😉
InformationsquelleAutor Nik Bougalis
sind Sie besser dran mit einem decompiler wie redgates .net reflector oder jetbrains resharper decompiler. es gibt open-source-diejenigen, die auch gerne
http://www.jetbrains.com/decompiler/
http://ilspy.net/
Leicht zu öffnen DLL-Dateien auf speichern, um MVisual Projekt oder kopieren Sie die codes der Klasse und cs-Dateien
InformationsquelleAutor Aoun allah Billel