Просмотр просмотра выполнения - это приложение для просмотра, редактирования и анализа трассов выполнения. Первоначально он был сделан для обратного инженерного кода, но его можно использовать для анализа любого вида следов выполнения.

git clone https://github.com/teemu-l/execution-trace-viewer
pip install pyqt5 yapsy qdarkstyle capstone
python tv.pyПоддерживаются следующие форматы файлов:
.tvt - формат файла по умолчанию. Разработан из формата трассировки x64DBG. 3 Различия с форматом x64DBG: комментарии, дисемоя и закладки добавлены.
.trace32 / .trace64 - Формат файла x64dbg. Только чтение поддерживается. Загрузка трассов x64DBG является медленной, потому что код должен быть разобрался.
JSON - Следы могут быть сохранены и загружены из текстовых файлов JSON.
Папка Traces содержит один образец. Это ~ 11K строки запутанного кода (по VMProtect3). Все обработчики разобрались и добавляются в таблицу закладок.
Просмотр просмотра выполнения может быть расширен с помощью плагинов Python3. Плагины запускаются в меню плагинов или из меню правой кнопкой мыши в Trace Table. Проверьте пример плагинов и Core/Api.py для получения дополнительной информации.
Больше плагинов:
Пример фильтров:
| Фильтр | Описание |
|---|---|
| DISASTS = PUSH | POP | Диспрос содержит слово «push» или «push» (push, pushfd, pop и т. Д.) |
| reg_eax = 0x1337 | Показать ряды, где EAX 0x1337 |
| reg_any = 0x1337 | Любое значение reg равно 0x1337 |
| mem_value = 0x1337 | Читать или записать значение 0x1337 в память |
| mem_read_value = 0x1337 | Значение чтения 0x1337 из памяти |
| mem_addr = 0x4f20 | Читать или записать в адрес памяти 0x4f20 |
| mem_read_addr = 0x40400 | Читать из адреса памяти 0x40400 |
| mem_write_addr = 0x40400 | Записать в адрес памяти 0x40400 |
| Opcodes = C704 | Фильтр с помощью опкодов |
| ряды = 20-50 | Показать только ряды 20-50 |
| regex = 0x40? 00 | чувствительный к случаям поиск в целом строке (включая комментарий) |
| regex = Read | Показать Insctructions, которые читают память |
| IREGEX = мусор | Дешиф | Обратная регуляция, отфильтрованные ряды с «мусором» или «дешифрованием» |
| Комментарий = расшифровка | Фильтр по комментариям |
Можно объединить несколько фильтров вместе:
disasm=xor/reg_any=0x1337 ; show all xor instructions where atleast one register value is 0x1337
Для более сложной фильтрации вы можете создать плагин фильтра и сохранить список результатов, используя API.SET_FILTERED_TRACE (). Затем покажите трассировку, позвонив в API.show_filtered_trace ().
Находит следующую или предыдущую строку, которая содержит указанное ключевое слово/значение в трассировке.
Найти предыдущую память написать:
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
)Поля следа: Диспродаж, Регс, MEM, MEM_ADDR, MEM_VALUE, Comment, любой
Поле Disasm поддерживает несколько ключевых слов: «xor/shl/shr». Полевое поле MEM проверяет все три поля в MEM Access (Access, Addr и значение). Целые числа должны быть даны в шестнадцатеричной.
Темная тема может быть отключена, редактируя prefs.py:
USE_DARK_THEME = False Грань
Разработан Teemu Laurila.
Контакт:
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 ]])))