Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
tenet — Un Explorador de Trazas para Ingenieros Inversos | Kitploit
Herramientas/GitHubGitHub/gaasedelen/tenet
Análisis Dinámico (Sandboxing)Ingeniería InversaDepuradoresAnálisis de Binarios
GitHubgaasedelen/tenet

tenet

Un Explorador de Trazas para Ingenieros Inversos

Ver Repositorio
1.5k16916hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Tenet - Un Explorador de Trazas para Ingenieros Inversos

Explorador de Trazas Tenet

Descripción general

Tenet es un plugin para IDA Pro que permite explorar trazas de ejecución. El objetivo de este plugin es proporcionar controles más naturales y humanos para navegar por trazas de ejecución contra un binario dado. La base de este trabajo surge del deseo de investigar métodos nuevos o innovadores para examinar y destilar patrones de ejecución complejos en software.

Para más contexto sobre este proyecto, por favor lee el blogpost acerca de su lanzamiento inicial.

Agradecimientos especiales a QIRA / geohot y otros por la inspiración.

Lanzamientos

  • v0.2 -- Detección de imagen base, visualización de celdas, refactorización de puntos de interrupción, corrección de errores.
  • v0.1 -- Lanzamiento inicial

Instalación

Tenet es un plugin de Python 3 multiplataforma (Windows, macOS, Linux). No tiene dependencias de terceros, lo que hace que el código sea portátil y fácil de instalar.

  1. Desde la consola de Python de tu desensamblador, ejecuta el siguiente comando para encontrar su directorio de plugins:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
Descargar herramienta
  • Copia el contenido de la carpeta /plugins/ de este repositorio en el directorio indicado.

  • Reinicia tu desensamblador.

  • Este plugin solo es compatible con IDA 7.5 y versiones posteriores.

    Uso

    Una vez instalado correctamente, aparecerá una nueva entrada de menú en el desensamblador. Se puede usar para cargar trazas de ejecución recolectadas externamente en Tenet.

    Cargar traza Tenet

    Como este es el lanzamiento inicial, Tenet solo acepta trazas de texto simples legibles por humanos. Consulta el readme de trazas en este repositorio para obtener información adicional sobre el formato de traza, limitaciones y trazas de referencia.

    Exploración Bidireccional

    Mientras usas Tenet, el plugin 'pintará' senderos para indicar el flujo de ejecución hacia adelante (azul) y hacia atrás (rojo) desde tu posición actual en la traza de ejecución activa.

    Senderos de Tenet

    Para avanzar o retroceder en el tiempo, simplemente desplázate mientras pasas el cursor sobre la línea de tiempo en el lado derecho del desensamblador. Para saltar llamadas a funciones, mantén presionado SHIFT mientras te desplazas.

    Línea de Tiempo de la Traza

    La línea de tiempo de la traza estará acoplada en el lado derecho del desensamblador. Este widget se utiliza para visualizar diferentes tipos de eventos a lo largo de la línea de tiempo de la traza y realizar navegación básica como se describió anteriormente.

    Acercamiento en la línea de tiempo de la traza

    Al hacer clic y arrastrar a través de la línea de tiempo, es posible acercar una sección específica de la traza de ejecución. Esta acción se puede repetir cualquier número de veces para alcanzar la granularidad deseada.

    Puntos de Interrupción de Ejecución

    Haciendo doble clic en el puntero de instrucción en la ventana de registros se resaltará en rojo, revelando todas las ubicaciones donde se ejecutó la instrucción a lo largo de la línea de tiempo de la traza.

    Colocando un punto de interrupción en la instrucción actual

    Para saltar entre ejecuciones, desplázate hacia arriba o hacia abajo mientras pasas el cursor sobre el puntero de instrucción resaltado.

    Además, puedes hacer clic derecho en la lista de desensamblado y seleccionar una de las entradas de menú basadas en navegación para buscar rápidamente la ejecución de una instrucción de interés.

    Buscando la primera ejecución de una instrucción

    La tecla de acceso rápido F2 nativa de IDA también se puede usar para establecer puntos de interrupción en instrucciones arbitrarias.

    Puntos de Interrupción de Memoria

    Al hacer doble clic en un byte en las vistas de pila o memoria, verás instantáneamente todas las lecturas/escrituras en esa dirección visualizadas a lo largo de la línea de tiempo de la traza. El amarillo indica una lectura de memoria, el azul indica una escritura de memoria.

    Explorando accesos a memoria usando puntos de interrupción de memoria

    Los puntos de interrupción de memoria se pueden navegar utilizando la misma técnica descrita para los puntos de interrupción de ejecución. Haz doble clic en un byte y desplázate mientras pasas el cursor sobre el byte seleccionado para llevar la traza a cada uno de sus accesos.

    Hacer clic derecho en un byte de interés te dará opciones para buscar entre lectura/escritura/acceso de memoria si tienes en mente una acción de navegación específica.

    Búsqueda en memoria

    Para navegar la vista de memoria a una dirección arbitraria, haz clic en la vista de memoria y presiona G para ingresar una dirección o un símbolo de la base de datos al cual dirigir la vista.

    Puntos de Interrupción de Región

    Es posible establecer un punto de interrupción de memoria en una región de memoria resaltando un bloque de memoria y haciendo doble clic en él para establecer un punto de interrupción de acceso.

    Puntos de interrupción de acceso a región de memoria

    Al igual que con los puntos de interrupción de memoria normales, pasar el cursor sobre la región y desplazarse se puede usar para recorrer los accesos realizados a la región de memoria seleccionada.

    Búsqueda de Registros

    En la ingeniería inversa, es bastante común encontrarse con situaciones en las que te preguntas "¿Qué instrucción estableció este registro a su valor actual?"

    Usando Tenet, puedes buscar hacia atrás hasta esa instrucción con un solo clic.

    Buscando la escritura anterior del registro

    Buscar hacia atrás es, por mucho, la dirección más común para navegar a través de cambios en los registros... pero para mayor destreza también puedes buscar hacia adelante hasta la siguiente asignación de registro usando la flecha azul a la derecha del registro.

    Shell de Marca de Tiempo

    Se proporciona un simple 'shell' para navegar a marcas de tiempo específicas en la traza. Pegar (o escribir...) una marca de tiempo en el shell, con o sin comas, será suficiente.

    Navegando por la traza usando el shell de marca de tiempo

    Usando un signo de exclamación, también puedes buscar un 'porcentaje' especificado dentro de la traza. Ingresar !100 llevará a la instrucción final en la traza, mientras que !50 llevará aproximadamente al 50% de la traza. !last llevará a la última instrucción navegable que se puede ver en el desensamblador.

    Temas

    Tenet incluye dos temas predeterminados: un tema 'claro' y uno 'oscuro'. Dependiendo de los colores que esté utilizando actualmente tu desensamblador, Tenet intentará seleccionar el tema que parezca más apropiado.

    Temas de Tenet

    Los archivos de tema se almacenan como JSON simple en el disco y son altamente configurables. Si no estás satisfecho con los temas o colores predeterminados, puedes crear tus propios temas y simplemente colocarlos en el directorio de temas del usuario.

    Tenet recordará tu preferencia de tema para futuras cargas y usos.

    Preguntas Frecuentes

    P: ¿Cómo grabo una traza de ejecución usando Tenet?

    • R: Tenet es un lector de trazas, no un grabador de trazas. Tendrás que usar marcos de instrumentación binaria dinámica (u otras tecnologías relacionadas) para generar una traza de ejecución compatible. Consulta el readme de trazas para obtener más información sobre las trazas existentes o cómo implementar la tuya propia.

    P: ¿Qué arquitecturas de traza soporta Tenet para cargar?

    • R: Solo x86 y AMD64, pero la base de código es casi completamente independiente de la arquitectura.

    P: ¿Qué tamaño de archivo de traza puede cargar/navegar Tenet?

    • R: El lector de trazas de Tenet es Python puro, fue escrito como un MVP. No hay garantía de que las trazas que superen los 10 millones de instrucciones sean razonables de navegar hasta que un backend nativo lo reemplace.

    P: Cargué una traza de ejecución, ahora hay un archivo '.tt'. ¿Qué es?

    • R: Cuando Tenet carga una traza de texto, la analizará, indexará y comprimirá en un formato más eficiente. En cargas posteriores, Tenet intentará cargar el archivo '.tt', lo que debería cargar en una fracción del tiempo que tomaría cargar la traza de texto original.

    P: El plugin se bloqueó / arrojó un error / muestra información incorrecta de la traza, ¿qué debo hacer?

    • R: Si encuentras un problema o inexactitud que se pueda reproducir, por favor reporta un problema en este repositorio y sube una traza de muestra + ejecutable.

    P: La memoria en mi traza está cambiando, pero no hay escrituras en la región. ¿¡Es esto un error!?

    • R: Tu archivo de registro puede no haber capturado todas las escrituras de memoria. Por ejemplo, los DBI en modo usuario generalmente no reciben una devolución de llamada de memoria para escrituras externas en la memoria del proceso. Esto es más común al leer de un archivo o de un socket: es el kernel el que escribe la memoria en tu búfer de modo usuario designado, haciendo que el evento sea invisible para la instrumentación tradicional.
      • Microsoft TTD generalmente exhibe el mismo comportamiento; es complicado de resolver sin modelar las llamadas al sistema.

    P: ¿Se portará esto a Binary Ninja / Ghidra / ...?

    • R: Posiblemente, pero no en el corto plazo (a menos que haya un incentivo significativo). Como un proyecto orientado a la investigación, la motivación principal es desarrollar nuevas estrategias para organizar y explorar la ejecución de programas, no portarlas.

    P: Mi organización quiere apoyar este proyecto, ¿cómo podemos ayudar?

    • R: Sin financiamiento, el tiempo que puedo dedicar a este proyecto es limitado. Si tu organización está entusiasmada con las ideas presentadas aquí y es capaz de proporcionar capital para patrocinar I+D dedicada, por favor contáctanos.

    Trabajo Futuro

    Tiempo y motivación financiamiento mediante, el trabajo futuro puede incluir:

    • Filtrado / coagulación de llamadas a bibliotecas a partir de trazas
    • Análisis de punteros (p. ej., anotaciones) para las vistas de registro/pila
    • Implementaciones nativas de TraceFile y TraceReader (p. ej., trazas más grandes y rápidas)
    • Historial de navegación + vista de marcadores (¿quizás 2 en 1?)
    • Informática de trazas más rica, indexación más agresiva de eventos relevantes (p. ej., llamadas a funciones)
    • Cartografía de trazas, mejora de la síntesis y representación de la geografía de la traza
    • Hacer que la selección/detección de 'arquitectura de CPU' sea un poco menos codificada
    • Más puentes de trazas listos para usar, DynamoRIO, TTD, RR, QEMU, Bochs, ...
    • Soporte para vistas Hex-Rays / descompiladas (además de la sincronización básica de vistas)
    • Flujo de trabajo mejorado para cargar o iterar automáticamente sobre trazas
    • Análisis diferencial, 'diferenciación de trazas' de alto nivel
    • Mejor navegación y desglose de hilos, cuantos
    • Mejor soporte para navegar trazas de 'múltiples módulos' (p. ej., trazas de sistema completo)
    • Soporte para Binary Ninja
    • ... ?

    Acepto contribuciones externas, informes de problemas y solicitudes de funciones. Por favor, realiza cualquier solicitud de extracción a la rama develop de este repositorio si deseas que se consideren para un futuro lanzamiento.

    Autores

    Markus Gaasedelen (@gaasedelen)