Der Ausführungsverfolgungsverfolgungs -Viewer ist eine Anwendung zum Anzeigen, Bearbeiten und Analysieren von Ausführungsspuren. Es wurde ursprünglich für den umgekehrten technischen verschleierten Code hergestellt, kann jedoch verwendet werden, um jede Art von Ausführungsspuren zu analysieren.

git clone https://github.com/teemu-l/execution-trace-viewer
pip install pyqt5 yapsy qdarkstyle capstone
python tv.pyDie folgenden Dateiformate werden unterstützt:
.tvt - Standarddateiformat. Entwickelt aus dem X64DBG -Trace -Format. 3 Unterschiede mit X64DBG -Format: Kommentare, Abnutzung und Lesezeichen hinzugefügt.
.Trace32 / .Trace64 - X64DBG -Dateiformat. Nur Lesen unterstützt. Das Laden von X64DBG -Spuren ist langsam, da der Code zerlegt werden muss.
JSON - Spuren können aus JSON -Textdateien gespeichert und geladen werden.
Der Spurenordner enthält eine Probenspur. Es sind ~ 11K -Zeilen des verschleierten Code (nach vmprotect3). Alle Handler werden zerlegt und zur Lesezeichen -Tabelle hinzugefügt.
Der Ausführungsverfolgungsverfolgungsbetrieb kann durch Python3 -Plugins erweitert werden. Plugins werden aus dem Plugins-Menü oder aus der rechten Maustaste auf Trace-Tabelle gestartet. Weitere Informationen finden Sie in den Beispiel -Plugins und Core/API.Py.
Weitere Plugins:
Beispielfilter:
| Filter | Beschreibung |
|---|---|
| disasasm = push | pop | Disasasmen enthält Wortschieben oder Pop (Push, Pushfd, Pop usw.) |
| reg_eax = 0x1337 | Zeigen Sie Zeilen, bei denen EAX 0x1337 ist |
| reg_any = 0x1337 | Jeder Reg -Wert ist 0x1337 |
| mem_value = 0x1337 | Lesen oder schreiben Sie den Wert 0x1337 in den Speicher |
| mem_read_value = 0x1337 | Lesen Sie den Wert 0x1337 aus dem Speicher |
| mem_addr = 0x4f20 | Lesen Sie aus oder schreiben Sie an Speicheradresse 0x4f20 |
| mem_read_addr = 0x40400 | Lesen Sie aus Speicheradresse 0x40400 |
| mem_write_addr = 0x40400 | Schreiben Sie an die Speicheradresse 0x40400 |
| Opcodes = C704 | Filter durch Opcodes |
| Zeilen = 20-50 | Zeigen Sie nur Zeilen 20-50 |
| regex = 0x40? 00 | Fallsensitive Regex-Suche nach einer ganzen Zeile (einschließlich Kommentar) |
| regex = read | Zeigen Sie InscTructions, die Speicher lesen |
| irigex = junk | entschlüsseln | Inverse Regex, Zeilen mit 'Junk' oder 'Entschlüsselung' werden herausgefiltert |
| Kommentar = entschlüsseln | Filter durch Kommentar |
Es ist möglich, mehrere Filter zusammenzuschließen:
disasm=xor/reg_any=0x1337 ; show all xor instructions where atleast one register value is 0x1337
Für eine komplexere Filterung können Sie ein Filter -Plugin erstellen und die Ergebnisliste mit api.set_filtered_trace () speichern. Zeigen Sie dann die Trace an, indem Sie api.show_filtered_trace () aufrufen.
Findet die nächste oder vorherige Zeile, die angegebenes Schlüsselwort/Wert in Trace enthält.
Vorherige Speicher finden. Schreiben Sie:
from core . filter_and_find import TraceField
current_row = 500
next_row = find (
trace = trace_data . trace ,
field = TraceField . MEM ,
keyword = 'WRITE' ,
start_row = current_row ,
direction = - 1
)Trace Fields: Disasma, Regs, mem, mem_addr, mem_value, kommentieren, jeder
Das Feld von DisasMas unterstützt mehrere Schlüsselwörter: "Xor/SHL/SHR". Das Mem -Feld prüft alle drei Felder im MEM -Zugriff (Zugriff, ADD und Wert). Ganzzahlen müssen in Hexadezimal angegeben werden.
Ein dunkles Thema kann deaktiviert werden, indem Prefs.Py bearbeitet wird:
USE_DARK_THEME = False MIT
Entwickelt von Teemu Laurila.
Kontakt:
print ( '' . join ( map ( chr ,[ k ^ 86 for k in [ 34 , 51 , 51 , 59 , 35 , 58 , 55 , 22 , 38 , 36 , 57 , 34 , 57 , 56 , 59 , 55 , 63 , 58 , 120 , 53 , 57 , 59 ]])))