Delphihelper ist ein Python Ida Pro -Plugin, das die Analyse der in der Delphi -Programmiersprache geschriebenen Binärdateien von X86/X86_64 unterstützen soll.
Kopieren Sie DelphiHelper -Verzeichnis und DelphiHelper.py im IDA -Plugin -Verzeichnis:
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ Laden Sie die IDR -Wissensbasis -Dateien manuell herunter, indem Sie die folgenden Anweisungen befolgen, oder führen Sie das Skript setup_IDRKB.py aus.
Hinweis : Die Installation
py7zrist erforderlich, um das Setup -Skript auszuführen:pip install py7zr
Delphihelper sollte mit IDA 8.4 und später unter Windows, MacOS und GNU/Linux kompatibel sein.
Um das Delphihelper -Plugin zu verwenden, muss der Ressourcenabschnitt in IDA geladen werden. Dies kann erreicht werden, indem die Ressourcen für das Box oder die Option -R im Befehlszeilenschalter überprüft werden.
Hinweis : Die IDA -Autoanalyse muss vor der Verwendung des Plugins abgeschlossen sein.
<Alt-Shift-H> : Druckenhilfe<Alt-Shift-R> : VMT-Parser ausführen<Alt-Shift-F> : DFM-Finder ausführen (Delphi Form Viewer-Fenster anzeigen)<Alt-Shift-E> : Förderung der Einstiegspunktfunktion ausführen<Alt-Shift-S> : Führen Sie den IDR-Wissensbasislader für SysInit und System aus<Alt-Shift-A> : Führen Sie den IDR-Wissensbasislader für ausgewählte Einheiten aus Hotkey : <Alt-Shift-R>
Der Parser der virtuellen Methode Tabelle (VMT) muss mit dem Cursor an der Startadresse einer VMT -Struktur ausgeführt werden. Diese Struktur kann sich befinden, indem die Funktionen CreateForm , CreateObject usw.; Sobald die Funktion gefunden wurde, sollte das letzte Argument die VMT -Struktur sein.
In den meisten Fällen gibt es eine Abfolge von zwei Anweisungen:
mov <register>, <VMTStructureOffset>
call CreateForm
Zum Beispiel:
Sobald Sie auf der Struktur (VMTStructureOffset EG off_664A8C ), drücken Sie <Enter> :
Drücken Sie den Hotkey <Alt-Shift-R> . Das Ergebnis sieht nach unten aus:
Die VMT -Struktur enthält viele nützliche Informationen, die in verschiedenen RTTI -Tabellen gespeichert sind. Die interessantesten sind:
Der VMT -Parser extrahiert automatisch Daten aus diesen Tabellen und speichert sie in IDA -Enums und -strukturen.
Die Feldtabelle speichert einen Namen, einen Typ und einen Versatz jedes veröffentlichten Feldes. Der VMT -Parser extrahiert und speichert alle diese Einträge für jede VMT -Struktur in IDA Enums:
Die vom VMT -Parser erstellten Enums haben das folgende Format: %ObjectName%_Fields . Die Namen von Enum -Einträgen haben dieses Format: %ObjectName%_%FieldType%_%FieldName% :
Die vom VMT-Parser erstellten Einträge von Enums können dann durch Drücken der integrierten IDA-Verknüpfung <M> benannt werden, die zur Benennung symbolischer Konstanten verwendet werden.
Vor
Nach
Die virtuelle Methode Tabelle speichert Hinweise auf alle virtuellen Methoden, die für eine Klasse und ihre Basisklassen deklariert sind:
Der VMT -Parser extrahiert Zeiger aus der VMT und speichert sie in eine IDA -Struktur, die von der Parsed VMT -Struktur benannt ist. Die Namen von Struktureinträgen haben das folgende Format: %MethodName%_%MethodOffset% :
Die Einträge aus vom VMT-Parser erstellten Strukturen können dann durch Drücken der integrierten IDA-Verknüpfung <T> benannt werden, die zum Benennen von Struktur-Offsets verwendet wird.
Vor
Nach
Die Methode Tabelle speichert Namen und Zeiger veröffentlichter Methoden. Die Methode -Tabelle enthält auch Zeiger von Delphi -Ereignishandlern, auf die vom Delphi Form Viewer gefunden und zugegriffen werden kann (weitere Informationen finden Sie unter DFM -Finder)
Hotkey : <Alt-Shift-F
Der DFM -Finder versucht, alle DFMs in einem Ressourcenabschnitt des analysierten Delphi -Binärs gespeichert und danach den VMT -Parser auf allen VMT -Strukturen auszuführen, die mit gefundenen DMFs verbunden sind. Nachdem alle VMT -Strukturen verarbeitet wurden, wird eine neue interaktive IDA -Unteransicht ( Delphi Form Viewer ) angezeigt. Die Unteransicht zeigt eine Baumansicht von Delphi -Formularbeschreibungen, die aus DFM extrahiert wurden:
Fettgedruckte Knoten repräsentieren Komponenten mit einem Delphi -Ereignis. Folgen Sie solchen fett gedruckten Knoten tiefer in einem Subtree, bis Sie den Knoten des kräftigen Properties erkennen, wo Sie ein blau gefärbtes Delphi -Ereignis finden. Wenn Sie auf das Ereigniselement klicken, werden Sie im Fenster IDA -Demontage in einen entsprechenden Ereignishandler verschoben.
Grüne Knoten repräsentieren Komponenten, die eine binäre Datei eingebettet haben. Folgen Sie solchen grünen Knoten tiefer in einem Subtree, bis Sie grünen Properties erkennen, wo Sie ein grünes Element finden können. Das Element zeigt einen Dateipfad der eingebetteten Binärdatei, die vom DFM -Finder fallen gelassen wurde. %IDAWorkingDirectory%_extracted_%BinaryFileName% Ziel -Subverzeichnis für extrahierte Dateien befindet sich im aktuellen IDA -Arbeitsverzeichnis und verfügt
Klicken Sie auf einen Root -Knoten (Formular) im Delphi Form -Viewer -Fenster verschieben Sie zur VMT -Struktur des Formulars im IDA -Demontagefenster.
Hotkey : <Alt-Shift-E>
Einstiegspunktfunktionsfinder versucht, mögliche Einstiegspunktfunktionen zu finden, indem nach Referenzen auf CreateFrom , InitExe und InitLib -Aufrufe gesucht werden. Die Ergebnisse werden im Ausgangsfenster der IDA dargestellt, z. B.:
Hotkeys : <Alt-Shift-S> und <Alt-Shift-A>
IDR Knowledge Base Loader lädt IDR -KB -Signaturen aus KB -Dateien. Das Plugin erwartet, dass die KB -Dateien am folgenden Ort gespeichert werden:
unter Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
auf macOS/linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> Ladet-Funktionssignaturen für nur SysInit und System .
<Alt-Shift-A> versucht, Funktionssignaturen für alle aus einer Liste der importierten Einheiten ausgewählten Einheiten zu laden.
Hinweis : Die KB -Dateien werden aus dem IDR -Projekt heruntergeladen:
https://github.com/crypto2011/idr
https://github.com/crypto2011/Idr64
Das IDR -Projekt ist unter der MIT -Lizenz lizenziert:
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Download und kopieren Sie die folgenden KB -Dateien in DelphiHelperIDR_KBIDR64 Verzeichnis:
https://github.com/crypto2011/Idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/Idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/Idr64/blob/master/syskb2014.bin
Download und extrahieren Sie die folgenden KB -Dateien in DelphiHelperIDR_KBIDR Verzeichnis:
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z