
Tenet es un complemento IDA Pro para explorar trazas de ejecución. El objetivo de este complemento es proporcionar controles humanos más naturales para navegar trazas de ejecución contra un binario dado. La base de este trabajo proviene del deseo de investigar métodos nuevos o innovadores para examinar y destilar patrones de ejecución complejos en el software.
Para obtener más contexto sobre este proyecto, lea el BlogPost sobre su lanzamiento inicial.
Un agradecimiento especial a Qira / Geohot et al. para la inspiración.
Tenet es un complemento multiplataforma (Windows, MacOS, Linux) Python 3. Se necesitan cero dependencias de terceros, lo que hace que el código sea portátil y fácil de instalar.
Desde la consola Python de su desmontaje, ejecute el siguiente comando para encontrar su directorio de complementos:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") Copie el contenido de la carpeta /plugins/ de este repositorio al directorio listado.
Reinicie su desmontador.
Este complemento solo es compatible con IDA 7.5 y más nuevo.
Una vez instalado correctamente, habrá una nueva entrada de menú disponible en el desascado. Esto se puede usar para cargar trazas de ejecución recolectadas externamente en Tenet.

Como esta es la versión inicial, Tenet solo acepta trazas de texto simples legibles por humanos. Consulte el ReadMe de rastreo en este repositorio para obtener información adicional sobre el formato de rastreo, las limitaciones y los trazadores de referencia.
Mientras usa Tenet, el complemento 'pintará los senderos para indicar el flujo de ejecución hacia adelante (azul) y hacia atrás (rojo) desde su posición actual en la traza de ejecución activa.

Para step adelante o hacia atrás a través del tiempo, simplemente se despliega mientras se desplaza sobre la línea de tiempo en el lado derecho del desapsilador. Para step over las llamadas de funciones, mantenga presionado SHIFT mientras se desplaza.
La línea de tiempo de rastreo se acoplará en el lado derecho del desapsilador. Este widget se utiliza para visualizar diferentes tipos de eventos a lo largo de la línea de tiempo de rastreo y realizar la navegación básica como se describió anteriormente.

Al hacer clic y arrastrar a través de la línea de tiempo , es posible acercarse a una sección específica de la traza de ejecución. Esta acción se puede repetir cualquier cantidad de veces para alcanzar la granularidad deseada.
Haga doble clic en el puntero de instrucciones en la ventana Registros lo resaltará en rojo, revelando todas las ubicaciones que la instrucción se ejecutó a través de la línea de tiempo de rastreo.

Para saltar entre las ejecuciones, desplácese hacia arriba o hacia abajo mientras flota el puntero de instrucciones resaltado .
Además, puede hacer clic derecho en el listado de desmontaje y seleccionar una de las entradas de menú basadas en la navegación para buscar rápidamente la ejecución de una instrucción de interés.

La llave de acceso F2 nativa de IDA también se puede usar para establecer puntos de interrupción en instrucciones arbitrarias.
Al hacer doble clic en un byte en las vistas de la pila o la memoria, verá instantáneamente todas las lecturas/escrituras en esa dirección visualizada en la línea de tiempo de traza. El amarillo indica una lectura de memoria, el azul indica una escritura de memoria.

Los puntos de interrupción de la memoria se pueden navegar utilizando la misma técnica descrita para los puntos de interrupción de la ejecución. Haga doble clic en un byte y desplácese mientras pasea el byte seleccionado para buscar el rastro en cada uno de sus accesos.
Haga clic derecho en un byte de interés le dará opciones para buscar entre la memoria de lectura / escritura / acceso si hay una acción de navegación específica que tiene en mente.

Para navegar la vista de memoria a una dirección arbitraria, haga clic en la vista de memoria y presione G para ingresar una dirección o un símbolo de base de datos para buscar la vista.
Es posible establecer un punto de interrupción de la memoria en una región de memoria resaltando un bloque de memoria y hacerle doble clic para establecer un punto de interrupción de acceso.

Al igual que con los puntos de interrupción de la memoria normales, el flujo de la región y el desplazamiento pueden usarse para atravesar los accesos realizados en la región de memoria seleccionada.
En la ingeniería inversa, es bastante común encontrar situaciones en las que se pregunte "¿Qué instrucciones establece este registro en su valor actual?"
Usando Tenet, puede buscar esa instrucción en un solo clic.

Buscar al revés es, con mucho, la dirección más común para navegar a través de los cambios de registro ... pero para la destreza también puede buscar la próxima asignación de registro utilizando la flecha azul a la derecha del registro.
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 caparazón con o sin comas será suficiente.

Usando un punto de exclamación, también puede buscar un 'porcentaje' especificado en el rastro. Entrando !100 buscará la instrucción final en el rastro, donde !50 buscará aproximadamente el 50% del camino a través de la traza. !last ¡¡¡¡¡¡¡¿¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡elios.
El principio se envía con dos temas predeterminados: un tema 'ligero' y uno 'oscuro'. Dependiendo de los colores utilizados actualmente por su desmontador, Tenet intentará seleccionar el tema que parece más apropiado.

Los archivos de tema se almacenan como JSON simple en el disco y son altamente configurables. Si no está satisfecho con los temas o colores predeterminados, puede crear sus propios temas y simplemente dejarlos en el directorio de temas del usuario.
Tenet recordará su preferencia de tema para futuras cargas y usos.
Tiempo y motivación Permiso de financiación, el trabajo futuro puede incluir:
Agradezco contribuciones externas, problemas y solicitudes de funciones. Haga cualquier solicitud de extracción a la rama develop de este repositorio si desea que se consideren para una versión futura.