Erweitertes IDA Pro Signaturener -Generator -Plugin.
Kopieren Sie IDA_SigMaker32.dLL und IDA_SigMaker64.dLL in Ihr IDA plugins -Verzeichnis.
Der Standard-IDA-Hot-Key ist "Strg-Alt-S", kann jedoch mit der Taste Ihre IDA-Plugins.cfg "auf eine andere Person eingestellt werden. Da "Strg-Alt-S" jetzt Kombination mit einem IDA-Standardkonflikt in Konflikten steht, um Warnmeldungen zu vermeiden, bearbeiten Sie Ihre "idagui.cfg" und erstellen Sie den "Stacktrace" -Ontrag wie: "StackTrace" = 0 // "Ctrl-Alt-S" // open stack trace window (das '0' deaktiviert den Schlüssel).
Benötigt IDA Pro Version 7.6'ish.
Rufen Sie das Plugin über den Hotkey oder das IDA -Bearbeitungs-/Plugin -Menü auf.

Es gibt drei Signaturenerzeugungsvorgänge:
Funktion : Wird verwendet, um einen eindeutigen Funktionseinstiegspunkt, eine minimale Funktionssignatur mit Offset oder eine Ganzkörpersignatur abhängig von der Optionskonfiguration (siehe unten).
Wählen Sie zuerst eine Adresse in der Zielfunktion aus. Wenn die ausgewählte Funktion nicht eindeutig ist (für den Einstiegspunkt oder die minimale Option), wird eine Signatur für eine eindeutige Funktionskundversicherungsscan versucht.
Typische Anwendungsfälle: Signaturen zum Auffinden von Funktionen zur Laufzeit im Zielspeicher, um Funktionen in IDA nach ausführbaren Aktualisierungen zu finden oder um bekannte Bibliotheken nach Signatur zu finden, usw.
Beispiel Signaturausgabe: 
Die Signaturergebnisse werden in die Windows -Zwischenablage gedrückt, um ein einfaches Strg+V -Einfügen in Quellcode usw.

Ausgabeformat: IDA : Das Standard -Binär -Suchformat von Hex -Sechsanlagen, das IDA und einige andere Tools unter Verwendung von Abstandshex -Bytes und "??" unterstützen, und "??" Wildcards. Beispiel: C1 6C E8 ?? ?? ?? ?? 8B 50 08 CODE STYLE : Escape Coded Hex String und eine separate Maskenzeichenfolge, in der 'x' Keeper -Bytes und '?' sind Platzhalterbytes. Beispiel: "xC1x6CxE8xCCxCCxCCxCCx8Bx50x08", "xxx????xxx" Inline -Byte : Ein minimalistisches C -Stil -Array von Bytes mit Wildcard -Bytes, einschließlich Format. Beispiel: {0xC1,0x6C,0xE8,0xAE,0xAE,0xAE,0xAE,0x8B,0x50,0x08}; Verwenden Sie das Bearbeitungsfeld "Mask Byte", um das Standard -Masken -Byte "Inline -Byte" zu ändern. Das Standard -Masken -Byte beträgt 0xAE , eines der am wenigsten verwendeten Code -Bytes (siehe "Ideal Mask Byte" unten).
Die Kriterien für die Signaturgenerierung "Funktion". Einstiegspunkt : Versucht, nach Möglichkeit eine minimale Funktionssignatur für die Byte -Größe zu generieren. Minimaler Bytegröße : Versucht, eine minimale Erzeugung mit den geringsten Wildcards zu erzeugen, Bytegröße (fünf sind größer), die Signatur innerhalb des ausgewählten Funktionskörpers ausgewählt. Vollfunktionskörper : Versucht, eine einzigartige Vollfunktionskörpersignatur zu erzeugen.
Wenn die Funktion für eine dieser drei Optionen nicht eindeutig ist, wird versucht, stattdessen die kleinste einzigartige Cross-Referenz-Signatur zu finden. Wenn Sie eine vollständige oder teilweise Funktionssignatur für eine nicht eindeutige Funktion vornehmen möchten, verwenden Sie stattdessen die Option "From Adressbereich".
Nachrichtenstufe : Setzen Sie auf "ausführlich" für die interne Signaturgenerierungsnachricht Ausgabe für das IDA -Protokollfenster.
MAX-Funktionscan-Refs : Begrenzen Sie, wie viele Funktionen Querversicherungen suchen, wenn eine direkte "Funktion" -Kaktionssignatur nicht gefunden werden kann. Normalerweise sollte dies für unbegrenzte Suche "0" sein, aber für Problemfälle, in denen es so viele Referenzen gibt, dass dies eine Verlangsamung verursacht, kann dies auf eine angemessene Grenze wie 16 oder 100 eingestellt werden, um die Scangeschwindigkeit zu erhöhen.
Für den relativ seltenen Fall von Funktionen, bei denen ihre Stücke über mehrere Adressbereiche verbreitet werden, versucht das Tool, nur den ersten Stück zu verwenden. Wenn Sie in einem der unzusammenhängenden Stücke eine Signatur vornehmen möchten, versuchen Sie, die Methode "At Adress" zu verwenden. Wenn alles andere fehlschlägt, probieren Sie eine "From Adress -Range" -Sig (die möglicherweise eine manuelle Suche nach Einzigartigkeit benötigt).
MAX -Funktion Einstiegspunkt -Signatur -Bytes : Wenn Sie die Option "Funktion" verwenden, und die Kriterien "Einstiegspunkt" werden konfiguriert. Begrenzen Sie optional die Größe der maximalen Einstiegspunkt -Signatur -Bytegröße. Die Standardeinstellung ist '0' für unbegrenzt (was der gesamten ausgewählten Funktionsbytegröße von Funktionsfunktionen entspricht). Wenn diese Grenze überschritten wird, wird stattdessen eine Signatur der Querversicherung gesucht.
Eingestellt auf eine praktische Grenze wie '16' oder '32', für bevorzugte typischerweise kleinere XREF -Signaturen im Vergleich zu potenziell sehr großen Einstiegspunktsignaturen.
Sigmakerex ("Ex") insgesamt erzeugt unter einer besseren Analyseanalyse kleinere und engere Funktionssignaturen. Beispiel: Sigmaker ("SM") Wildcards Die Operand -Bytes der Unterrichts sub esp, 90h 81 EC 90 00 00 00 als "81 EC ?? ?? ?? ??
Ex konzentriert sich besser auf normative Funktionsunterrichtsfälle. Für SM gibt es nur eine steuerbare Option. Es wird versucht, eine einzigartige Signatur bei der Adresse zu treffen, die Sie in der Funktion auswählen. Wenn es dort nicht einen finden kann, wird es stattdessen nur nach einer einzigartigen Cross-Reference-Sig suchen. Da es sich bei dem identifizierten typischen Anwendungsfall handelt, die Funktionseintrittspunkte zu finden, wird die kleinste Einstiegspunkt -Signatur generiert, wenn die Option "Einstiegspunkt" konfiguriert ist. Wenn die Option "minimaler Bytegröße" ausgewählt ist, sucht sie innerhalb des gesamten Funktionskörpers nach der kleinsten und am wenigsten Platzhalteranzahl (von mindestens fünf Bytes).
SM hat im Dialogfeld "Optionen" mehr Ausgabekriteriensteuer für Byte und Platzhalter usw. Ex geht davon aus, dass Sie das Beste von beiden wollen (am wenigsten Platzhalter und die kleinste Bytegröße).
Ex lässt die "Conversion" und die individuelle "Suche" -Funktionen aus, die SM eine einfachere und weniger überfüllte Benutzeroberfläche bevorzugt.
Zum Suchen verwenden Sie, da Ex zusätzlich zu den ausgewählten Ausgangsformatsignaturen IDA -Formatausgabe ausgibt, die Option IDA -Binärsuche "Hex" mit der IDA -SIG -Zeichenfolge.
EX ist im Allgemeinen schneller, wenn es sogar umfangreichere Suchanfragen durchführt, aufgrund einer Technik, die IDB in RAM zu klonen und einen AVX2 -optimierten Musterscanner zu verwenden, im Vergleich zu der langsamen IDA -Find -Funktion zum Scannen.
In meinen eigenen Projekten, um Muster dynamisch zu finden, bevorzuge ich das "Inline -Byte" (mangels eines besseren Namens). Es ist das einfachste, kompakteste und erfordert keine Laufzeit -Transformation von einer ASCII -Hex -Saite. Ich habe dieses Format für viele Projekte verwendet und habe noch keine Signature -Kollision oder redundante Übereinstimmungen gestoßen.
Um potenzielle Redundanzprobleme zu minimieren, ist es ratsam, einen der am wenigsten verwendeten Code -Byte -Werte für das Wildcard/Mask -Byte zu verwenden. Um die idealen Kandidaten zu finden, habe ich die Codebyte -Frequenz von drei großen 32 -Bit- und 64 -Bit -Code -Segmenten gesammelt, dann tabellarisch und sortiert die Ergebnisse. Das IDA -Skript "ida_get_byte_frequency.py" wird verwendet. Das Skript "byte_frequency_tabulate.py" tabelt und sortiert in aufsteigender Bestellung einen Satz dieser gespeicherten JSON -DBS. Es ist offensichtlich, dass die Byte -Frequenz für 32bit nicht die gleiche ist wie die 64 -Bit -Eins und unabhängig voneinander. Siehe "32bit.txt" und "64bit.txt". In einer visuellen Korrelation der beiden ist 0xa2 tatsächlich der am wenigsten häufige Nenner, gefolgt von 0xae. 0xae wurde über 0xa2 als Standard -Masken -Byte ausgewählt, da es subjektiv leichter ist, in Hex visuell auszuwählen.
Erstellt mit Visual Studio 2019 unter Windows 10, wobei die einzige Abhängigkeit die offizielle IDA Pro C/C ++ SDK ist. In der Projektdatei wird nach einer Umgebungsvariablen _IDADIR gesucht, aus der es erwartet, einen "idasdk/include" und einen "idasdk/lib" -Fordner zu finden, in dem sich der IDA SDK befindet. IDADIR nicht verwenden, da IDA selbst sucht und einen Konflikt verursachen kann, wenn Sie versuchen, mehr als eine installierte IDA -Version zu verwenden.
Python 3.7'ish oder besser das Skript "byte_frequency_tabulate.py" ausführen.
Vielen Dank an den Schöpfer des ursprünglichen Sigmaker -Tools von den Tagen von gameecception. Vielen Dank an Wojciech Mula für seine SIMD -Programmierressourcen.
Veröffentlicht unter MIT © 2022 von Kevin Weatherman