Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
tenet — Обозреватель трассировок для реверс-инженеров | Kitploit
Инструменты/GitHubGitHub/gaasedelen/tenet
Динамический анализ (песочница)Обратная инженерияОтладчикиАнализ Бинарных Файлов
GitHubgaasedelen/tenet

tenet

Обозреватель трассировок для реверс-инженеров

Репозиторий
1.5k1694 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Tenet - Исследователь трасс для реверс-инженеров

Tenet Исследователь трасс

Обзор

Tenet — это плагин для IDA Pro, предназначенный для исследования трасс выполнения. Цель этого плагина — предоставить более естественные, человеческие средства управления для навигации по трассам выполнения в рамках заданной бинарной программы. Основой этой работы послужило желание исследовать новые или инновационные методы анализа и выделения сложных паттернов выполнения в программном обеспечении.

Для дополнительного контекста об этом проекте, пожалуйста, прочитайте статью в блоге, посвящённую его первому выпуску.

Особая благодарность QIRA / geohot и другим за вдохновение.

Релизы

  • v0.2 — Определение базы образа, визуализация ячеек, рефакторинг точек останова, исправление ошибок.
  • v0.1 — Первоначальный выпуск

Установка

Tenet — это кроссплатформенный (Windows, macOS, Linux) плагин на Python 3. Он не имеет сторонних зависимостей, что делает код как переносимым, так и простым в установке.

  1. В консоли Python вашего дизассемблера выполните следующую команду, чтобы узнать путь к каталогу плагинов:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Скопируйте содержимое папки /plugins/ этого репозитория в указанный каталог.

  3. Перезапустите ваш дизассемблер.

Этот плагин поддерживается только для IDA 7.5 и новее.

Использование

После правильной установки в дизассемблере появится новый пункт меню. Он может быть использован для загрузки внешних трасс выполнения в Tenet.

Загрузить трассу Tenet

Поскольку это первый выпуск, Tenet принимает только простые текстовые трассы, читаемые человеком. Пожалуйста, обратитесь к readme по трассировке в этом репозитории для получения дополнительной информации о формате трасс, ограничениях и эталонных трассировщиках.

Двунаправленное исследование

При использовании Tenet плагин будет «окрашивать» следы, чтобы показать поток выполнения вперед (синим) и назад (красным) от вашей текущей позиции в активной трассе выполнения.

Следы Tenet

Чтобы шагать вперед или назад во времени, просто прокручивайте, наведя курсор на временную шкалу в правой части дизассемблера. Чтобы перешагнуть вызовы функций, удерживайте SHIFT во время прокрутки.

Временная шкала трассы

Временная шкала трассы будет пристыкована к правой стороне дизассемблера. Этот виджет используется для визуализации различных типов событий вдоль временной шкалы трассы и выполнения базовой навигации, как описано выше.

Увеличение временной шкалы трассы

Кликая и перетаскивая по временной шкале, можно увеличить конкретный участок трассы выполнения. Это действие можно повторять любое количество раз для достижения желаемой детализации.

Точки останова выполнения

Двойной клик по указателю инструкции в окне регистров выделит его красным, показывая все места, где эта инструкция была выполнена на временной шкале трассы.

Установка точки останова на текущую инструкцию

Чтобы переключаться между выполнениями, прокручивайте вверх или вниз, наведя курсор на выделенный указатель инструкции.

Кроме того, можно щелкнуть правой кнопкой мыши в листинге дизассемблера и выбрать один из пунктов меню, связанных с навигацией, чтобы быстро перейти к выполнению интересующей инструкции.

Переход к первому выполнению инструкции

Собственная горячая клавиша IDA F2 также может использоваться для установки точек останова на произвольные инструкции.

Точки останова памяти

Двойным щелчком по байту в представлении стека или памяти вы мгновенно увидите все чтения/записи по этому адресу, визуализированные на временной шкале трассы. Желтый цвет обозначает чтение памяти, синий — запись памяти.

Исследование обращений к памяти с помощью точек останова памяти

Точки останова памяти можно навигировать с помощью той же техники, что описана для точек останова выполнения. Щелкните дважды по байту и прокручивайте, наведя курсор на выбранный байт, чтобы переместить трассу к каждому из его обращений.

Щелчок правой кнопкой мыши по интересующему байту даст вам возможность переключения между чтением/записью/доступом к памяти, если у вас есть конкретное навигационное действие.

Поиск по памяти

Чтобы переместить представление памяти на произвольный адрес, щелкните на представлении памяти и нажмите G, чтобы ввести адрес или символ базы данных для поиска.

Региональные точки останова

Можно установить точку останова памяти на область памяти, выделив блок памяти и дважды щелкнув по нему, чтобы установить точку останова на доступ.

Точки останова доступа к области памяти

Как и с обычными точками останова памяти, наведение курсора на область и прокрутка могут использоваться для перемещения между обращениями к выбранной области памяти.

Поиск по регистрам

В реверс-инжиниринге довольно часто возникают ситуации, когда вы спрашиваете себя: "Какая инструкция установила этот регистр в его текущее значение?"

Используя Tenet, вы можете перейти назад к этой инструкции одним щелчком.

Переход к предыдущей записи в регистр

Поиск назад — безусловно, наиболее частое направление навигации по изменениям регистров... но для гибкости вы также можете перейти вперед к следующему присвоению регистра, используя синюю стрелку справа от регистра.

Оболочка временных меток

Предоставляется простая «оболочка» для перехода к конкретным временным меткам в трассе. Вставка (или ввод...) временной метки в оболочку с запятыми или без них будет достаточной.

Перемещение по трассе с помощью оболочки временных меток

Используя восклицательный знак, вы также можете перейти на указанный «процент» трассы. Ввод !100 перенесет вас к последней инструкции в трассе, а !50 — примерно на 50% пути по трассе. !last перенесет к последней доступной для навигации инструкции, которую можно просмотреть в дизассемблере.

Темы

Tenet поставляется с двумя стандартными темами — «светлой» и «темной». В зависимости от цветов, используемых в данный момент вашим дизассемблером, Tenet попытается выбрать наиболее подходящую тему.

Темы Tenet

Файлы тем хранятся на диске в виде простого JSON и являются высоконастраиваемыми. Если вас не устраивают стандартные темы или цвета, вы можете создать свои собственные темы и просто поместить их в каталог пользовательских тем.

Tenet запомнит ваши предпочтения темы для будущих загрузок и использования.

Часто задаваемые вопросы

В: Как записать трассу выполнения с помощью Tenet?

  • О: Tenet — это средство чтения трасс, а не средство записи трасс. Вам придется использовать фреймворки динамической бинарной инструментации (или другие связанные технологии) для генерации совместимой трассы выполнения. Пожалуйста, обратитесь к readme по трассировке для получения дополнительной информации о существующих трассировщиках или о том, как реализовать свой собственный.

В: Какие архитектуры трасс поддерживает Tenet для загрузки?

  • О: Только x86 и AMD64, но кодовая база почти полностью не зависит от архитектуры.

В: Насколько большой файл трассы может загрузить/навигировать Tenet?

  • О: Считыватель трасс Tenet написан на чистом Python и был создан как MVP. Нет гарантии, что трассы, превышающие 10 миллионов инструкций, будут удобны для навигации, пока их не заменит нативный бэкенд.

В: Я загрузил трассу выполнения, и теперь появился файл '.tt'. Что это?

  • О: Когда Tenet загружает указанную текстовую трассу, он парсит, индексирует и сжимает трассу в более производительный формат. При последующих загрузках Tenet попытается загрузить файл '.tt', что должно занять лишь долю времени, необходимого для загрузки исходной текстовой трассы.

В: Плагин вылетел / выдал ошибку / показывает неверную информацию о трассе, что мне делать?

  • О: Если вы столкнулись с проблемой или неточностью, которую можно воспроизвести, пожалуйста, создайте issue в этом репозитории и приложите пример трассы + исполняемый файл.

В: Память в моей трассе меняется, но нет записей в эту область. Это ошибка!?

  • О: Ваш файл журнала мог не захватить все записи в память. Например, пользовательские DBI обычно не получают обратного вызова памяти для внешних записей в память процесса. Это наиболее часто встречается при чтении из файла или из сокета — именно ядро записывает память в ваш назначенный пользовательский буфер, что делает событие невидимым для традиционной инструментации.
    • Microsoft TTD обычно демонстрирует такое же поведение, эту проблему сложно решить без моделирования системных вызовов.

В: Будет ли это портировано на Binary Ninja / Ghidra / ... ?

  • О: Возможно, но не в ближайшее время (если не будет значительного стимула). Как исследовательский проект, основная мотивация заключается в разработке новых стратегий организации и исследования выполнения программ, а не в их портировании.

В: Моя организация хотела бы поддержать этот проект, как мы можем помочь?

  • О: Без финансирования время, которое я могу уделить этому проекту, ограничено. Если ваша организация заинтересована в идеях, изложенных здесь, и способна предоставить капитал для спонсирования специализированных НИОКР, пожалуйста, свяжитесь с нами.

Будущие работы

При наличии времени и мотивации финансирования, будущие работы могут включать:

  • Фильтрация / коагуляция библиотечных вызовов из трасс
  • Анализ указателей (например, аннотации) для представлений регистров/стека
  • Нативные реализации TraceFile и TraceReader (например, более крупные и быстрые трассы)
  • История навигации + представление закладок (возможно, 2-в-1?)
  • Более богатая информатика трасс, более агрессивное индексирование релевантных событий (например, вызовов функций)
  • Картография трасс, улучшенное обобщение и представление географии трасс
  • Сделать выбор/обнаружение «архитектуры ЦП» чуть менее жестко закодированным
  • Больше готовых мостов для трассировки: DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Поддержка Hex-Rays / дизассемблированных представлений (кроме базовой синхронизации представлений)
  • Улучшенный рабочий процесс для автоматической загрузки или итерации по трассам
  • Дифференциальный анализ, «сравнение трасс» высокого уровня
  • Улучшенная навигация и разбивка потоков, квантов
  • Улучшенная поддержка навигации по «многомодульным» трассам (например, трассы всей системы)
  • Поддержка Binary Ninja
  • ... ?

Я приветствую внешние вклады, сообщения о проблемах и запросы функций. Пожалуйста, делайте любые pull request'ы в ветку develop этого репозитория, если хотите, чтобы они были рассмотрены для будущего релиза.

Авторы

  • Markus Gaasedelen (@gaasedelen)
Скачать инструмент