
Patching -Assembly -Code zur Änderung des Verhaltens eines vorhandenen Programms ist bei Malware -Analyse, Software Reverse Engineering und breiteren Domänen der Sicherheitsforschung nicht ungewöhnlich. Dieses Projekt erweitert den beliebten IDA Pro Disassembler auf einen robusteren interaktiven Binär -Patching -Workflow, der für eine schnelle Iteration entwickelt wurde.
Dieses Projekt wird derzeit von einer kleinen Gabelung der allgegenwärtigen Keystone -Engine angetrieben, die X86/X64 und ARM/ARM64 -Patchen unterstützt, um die verbleibenden Keystone -Architekturen in einer zukünftigen Veröffentlichung zu ermöglichen.
Besonderer Dank geht an Hex-Rays für die Unterstützung der Entwicklung dieses Plugins.
Dieses Plugin erfordert IDA 7.6 und Python 3. Es unterstützt Windows, Linux und MacOS.
Bitte beachten Sie, dass ältere Versionen von IDA (8.2 und unten) nicht mit Python 3.11 und höher kompatibel sind.
Führen Sie die folgende Zeile in der IDA -Konsole aus, um das Plugin automatisch zu installieren:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())Alternativ kann das Plugin manuell installiert werden, indem das verteilbare Plugin -Paket für Ihre jeweilige Plattform von der Releases -Seite heruntergeladen und auf Ihren Plugins -Ordner entpackt wird.
Es wird dringend empfohlen, dieses Plugin in IDAs User Plugin -Verzeichnis zu installieren:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))Das Patching -Plugin lädt automatisch für unterstützte Architekturen (x86/x64/arm/arm64) und injizieren relevante Patching -Aktionen in das Menü mit dem Rechtsklick -Kontext der IDA -Demontageansichten:

Eine vollständige Auflistung der kontextuellen Patching -Aktionen wird in den folgenden Abschnitten beschrieben.
Das Dialogfeld "Haupt -Patching" kann über die Action -Action Assemble im Menü mit der rechten Maustaste gestartet werden. Es simuliert eine grundlegende IDA -Demontageansicht, mit der eine oder mehrere Anweisungen in schneller Folge bearbeitet werden können.

Die Montagelinie ist ein bearbeitbares Feld, mit dem Anweisungen in Echtzeit geändert werden können. Wenn Sie die Eingabetaste drücken, werden die eingegebene Anweisung in die Datenbank festgelegt.
Ihr aktueller Standort (auch bekannt als Ihr Cursor) wird immer grün hervorgehoben. Anweisungen, die aufgrund Ihres Patchs / Bearbeitens in Rot gepackt werden, werden vor dem Festlegen des Patchs rot hervorgehoben.

Schließlich können die UP und DOWN -Pfeil -Tasten verwendet werden, während sie sich weiterhin auf das Feld der editierbaren Montage des Textes konzentrieren, um den Cursor schnell auf und ab, ohne die Maus zu verwenden.
Die häufigste Patching -Aktion besteht darin, eine oder mehrere Anweisungen herauszufinden. Aus diesem Grund ist die NOP -Aktion im Rechtsklickmenü immer sichtbar, um einen schnellen Zugriff zu erhalten.

Einzelne Anweisungen können sowie ein ausgewählter Anweisungsbereich NOP'ed werden.
Einen bedingten Sprung zu erzwingen, immer einen „guten“ Pfad durchzuführen, ist eine weitere häufige Patching -Aktion. Das Plugin zeigt diese Aktion nur an, wenn Sie mit der rechten Maustaste auf einen bedingten Sprunganweis klicken.

Wenn Sie nie einen bedingten Sprung machen möchten, können Sie ihn stattdessen einfach nopieren!
Patches können jederzeit in einer ausgewählten ausführbaren Datei über das Patching -Untermenü gespeichert (angewendet) werden. Die Schnellanpassungsaktion macht es noch schneller, nachfolgende Patches mit denselben Einstellungen zu speichern.

Das Plugin bemüht sich auch aktiv, eine Sicherung ( .bak ) der ursprünglichen ausführbaren Datei beizubehalten, mit der der aktuelle Satz von Datenbankpatches bei jedem Speichern "sauber" verwendet wird.
Wenn Sie mit einem Patch jemals unzufrieden sind, können Sie einfach mit der rechten Maustaste auf Patch (gelbe) Anweisungsblöcke klicken, um sie auf ihren ursprünglichen Wert zurückzuversetzen.

Während es "einfach" ist, Bytes wieder auf ihren ursprünglichen Wert zurückzukehren, kann es "schwierig" sein, die Analyse in ihren vorherigen Zustand wiederherzustellen. Die Rückkehr eines Patchs kann gelegentlich zusätzliche menschliche Fixups erfordern.
Zeit und Motivation zulässigen, zukünftige Arbeiten können umfassen:
xor eax, eax; ret; )) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
Ich begrüße externe Beiträge, Probleme und Feature -Anfragen. Bitte stellen Sie an der develop dieses Repositorys Anfragen an, wenn Sie möchten, dass sie für eine zukünftige Veröffentlichung in Betracht gezogen werden.