Tigress ist ein diversifizierender Virtualizer/Obfuscator für die C-Sprache, die viele neuartige Abwehrkräfte sowohl gegen statische als auch dynamische Reverse-Engineering- und De-Virtualisierungsangriffe unterstützt. Insbesondere schützt Tigress vor statischer De-Virtualisierung, indem er virtuelle Anweisungssätze von willkürlicher Komplexität und Vielfalt erzeugt, Dolmetscher mit mehreren Arten von Unterrichtsmessungen erzeugt und Code für die Anti-Alias-Analyse einfügen. Tigress schützt vor der dynamischen De-Vireualisierung, indem er den realen Code mit Scheinfunktionen zusammenfasst, durch Einfügen implizite Fluss und durch langsame Anerkennung von reenetranten Dolmetschern. Tigress implementiert eine eigene Version des Codepakets durch die Verwendung der Runtime -Codegenerierung. Schließlich liefert die dynamische Transformation von Tigress eine verallgemeinerte Form der Änderung der kontinuierlichen Laufzeitcode.
Das TIGRESS -Team hat einige Herausforderungen gestellt, bei denen wir verschiedene Arten von Schutzungen finden können
Alle Herausforderungen nehmen eine Zahl ein und geben einen Hash zurück. Beispiel:
$ ./OBFUSCATED_BINARYS/Tigress-2-Chalenge-2 1234 202180712448 $ ./OBFUSCATED_BINARYS/Tigress-2-Chalenge-2 823748 50564355584 $ ./OBFUSCATED_BINARYS/Tigress-2-Chalenge-2 2834723 50714072576
Die Hash -Berechnungsfunktion wird verschleiert. Arten möglicher Angriffe:
Unsere Ziele waren:
Und all das mit nur einem generischen Skript :). Dazu machten wir in der folgenden Reihenfolge:
Wenn Sie weitere Informationen wünschen, können Sie unser Skript mit Lösung von Lösung finden.

Wir haben jedoch bereits alle unsere Ergebnisse in diesem Repository weitergegeben, aber wenn Sie diese Analyse selbst reproduzieren möchten, müssen Sie nur solche solve-vm.py ausführen:
$ ./Solve-vm.py ./obfuscated_binaries/_BINY_
Beispiel:
$ ./SOLVE-VM.PY ./TIGESS-CHALLEGES/TIGRESS-0-CALLENGE-0 [+] Laden 0x400040 - 0x400238 [+] Laden 0x400238 - 0x400254 [+] Laden 0x400000 - 0x400F14 [+] Laden 0x601e28 - 0x602550 [+] Laden 0x601e50 - 0x601fe0 [+] Laden 0x400254 - 0x400298 [+] Laden 0x400DC4 - 0x400E08 [+] Laden 0x000000 - 0x000000 [+] Laden 0x601e28 - 0x602000 [+] Hooking printf [+] Hooking __libc_start_main [+] Hooking Strtoul [+] Beginn der Emulation. [+] __libc_start_main hakted [+] argv [0] = ./tigress-chalenges/Tigress-0-challenge-0 [+] argv [1] = 1234 [+] Strtoul [+] Symbolisieren die Strtoul -Rückkehr [+] printf haktiert 3035321144166078008 [+] Schneiden des Endpunktnutzerausdrucks [-] nicht unterstützt: 0x400539: HLT [+] Ausführte Anweisung: 39816 [+] Eindeutige Anweisung ausgeführt: 458 [+] Pc len: 0 [+] Emulation durchgeführt. [+] Erzeugen von symbolen_expressions/Tigerress-0-Challenge-0.py [+] Symbolische Ausdrücke in ein LLVM -Modul konvertieren ... [+] LLVM-Modul geschrieben in llvm_expressions/Tigress-0-Challenge-0.ll [+] Neukompilieren von deobfusziertem Binär ... [+] Deobfuscated Binary Recompiled: deobfuscated_binaries/Tigress-0-Challenge-0.deobfuscated
Anschließend finden sich symbolische Ausdrücke hier, LLVM -Darstellungen finden Sie hier und hier können neu kompilierte Binärdateien gefunden werden.
Verwenden von Docker:
$ git clone [email protected]: jonathansalwan/tigress_protection.git $ cd/path/to/tigress_protection $ docker Build -t image_tigress_protection. $ docer run -v/path/to/tigress_protection:/root/tigress_protection -ti --Name = tigress_protection --ulimit = 'stack = -1: -1' image_tigress_protection
Test im Docker -Container
# CD ~/TIGRESS_PROTECTION # ./SOLVE-VM.PY TIGRESS-CHALLEGES/TIGRESS -0-CALLENGE-0
Während wir neue Binärdateien vereinfacht und neu kompiliert haben, müssen wir das gleiche Verhalten der ursprünglichen Binärdateien vorlegen. Um unsere binären Versionen zu testen, verwenden wir dieses Skript.
$ ./Scripts/testing_equality.py ./Tigress-challengels/tigress-0-chalenge-0 ./deobfuscated_binaries/tigress-0-challge-0.deobfuscated [...] [+] Erfolg mit 272966812638982633 [+] Erfolg mit 2304147855662358786 [+] Erfolg mit 15697842028176298504 [+] Erfolg mit 15273138908025273913 [+] Erfolg mit 17329851347176088980 [+] Erfolg mit 12160831137213706322 [+] Erfolg mit 3489058267725840982 [+] Erfolg mit 6474275930952607745 [+] Erfolg mit 7363567981237584398 [+] Erfolg mit 3685039181436704621 [+] Erfolg: 100.00
Grundsätzlich führt dieses Skript die verschleiertes und die deobfuszierten Binärdateien mit zufälligen Eingaben und Überprüfungen aus, wenn sie die gleichen Ausgabeergebnisse haben.

In Bezug auf die Tabelle der Verhältnisse baten wir nach der Lösung von Tigress -Herausforderungen, Christian Collberg die Quellen seiner Herausforderungen zu haben, um die Größe der ursprünglichen Quellen und unserer devirtualisierten Versionen zu vergleichen. Beachten Sie, dass wir auf Wunsch von Christian keine Quellen der Tigeress -Herausforderungen bereitstellen können, wenn Sie diese Quellen möchten, bitte direkt zu ihm fragen :).
Wir nehmen auch 20 Hash-Algorithmen (10 bekannt, 10 aus der Tigeress-Herausforderung) und wir haben jeden dieser Algorithmen mit 46 verschiedenen Tigerinschutzschutz geschützt (siehe nächster Abschnitt). Am Ende haben wir eine Testbank von 920 geschützten Binärdateien. Jedes dieser geschützten Binärdateien wurde mithilfe des Skripts solve-vm.py erfolgreich devirtualisiert. Diese Hash -Algorithmen finden Sie im Probenverzeichnis und in ihren devirtualisierten Versionen in das Verzeichnis deobfuscated_binaries. Die folgende Tabelle ist eine Zusammenfassung unserer Ergebnisse in Bezug auf unsere 920 Proben.

Weitere Informationen zu diesen Optionen finden Sie auf den Seiten 1 und 2.