Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
tenet — Um Explorador de Rastros para Engenheiros Reversos | Kitploit
Ferramentas/GitHubGitHub/gaasedelen/tenet
Análise Dinâmica (Sandboxing)Engenharia ReversaDepuradoresAnálise de Binários
GitHubgaasedelen/tenet

tenet

Um Explorador de Rastros para Engenheiros Reversos

Ver Repositório
1.5k169há 4 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Tenet - Um Explorador de Traços para Engenheiros Reversos

Explorador de Traços Tenet

Visão Geral

Tenet é um plugin do IDA Pro para explorar traços de execução. O objetivo deste plugin é fornecer controles mais naturais e humanos para navegar por traços de execução em um determinado binário. A base deste trabalho decorre do desejo de pesquisar métodos novos ou inovadores para examinar e destilar padrões complexos de execução em software.

Para mais contexto sobre este projeto, por favor leia o blogpost sobre seu lançamento inicial.

Agradecimentos especiais ao QIRA / geohot e outros pela inspiração.

Lançamentos

  • v0.2 -- Detecção de base de imagem, visualização de células, refatoração de breakpoints, correções de bugs.
  • v0.1 -- Lançamento inicial

Instalação

Tenet é um plugin Python 3 multiplataforma (Windows, macOS, Linux). Ele não possui dependências de terceiros, tornando o código portátil e fácil de instalar.

  1. No console Python do seu descompilador, execute o seguinte comando para encontrar o diretório de plugins:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Copie o conteúdo da pasta /plugins/ deste repositório para o diretório listado.

  3. Reinicie seu descompilador.

Este plugin é suportado apenas para IDA 7.5 e versões posteriores.

Uso

Uma vez instalado corretamente, uma nova entrada de menu estará disponível no descompilador. Ela pode ser usada para carregar traços de execução coletados externamente no Tenet.

Carregar traço Tenet

Como este é o lançamento inicial, o Tenet aceita apenas traços de texto simples legíveis por humanos. Consulte o tracing readme neste repositório para informações adicionais sobre o formato do traço, limitações e traçadores de referência.

Exploração Bidirecional

Ao usar o Tenet, o plugin 'pinta' trilhas para indicar o fluxo de execução para frente (azul) e para trás (vermelho) a partir da sua posição atual no traço de execução ativo.

Trilhas Tenet

Para avançar ou retroceder no tempo, basta rolar enquanto passa o mouse sobre a linha do tempo no lado direito do descompilador. Para passar por cima de chamadas de função, segure SHIFT enquanto rola.

Linha do Tempo do Traço

A linha do tempo do traço será ancorada no lado direito do descompilador. Este widget é usado para visualizar diferentes tipos de eventos ao longo da linha do tempo do traço e realizar navegação básica conforme descrito acima.

Ampliando a linha do tempo do traço

Ao clicar e arrastar pela linha do tempo, é possível ampliar uma seção específica do traço de execução. Esta ação pode ser repetida quantas vezes forem necessárias para alcançar a granularidade desejada.

Pontos de Interrupção de Execução

Clicar duas vezes no ponteiro de instrução na janela de registradores o destacará em vermelho, revelando todos os locais onde a instrução foi executada ao longo da linha do tempo do traço.

Colocando um ponto de interrupção na instrução atual

Para pular entre execuções, role para cima ou para baixo enquanto passa o mouse sobre o ponteiro de instrução destacado.

Além disso, você pode clicar com o botão direito na listagem de desmontagem e selecionar uma das entradas de menu baseadas em navegação para buscar rapidamente a execução de uma instrução de interesse.

Buscando a primeira execução de uma instrução

A tecla de atalho nativa do IDA F2 também pode ser usada para definir pontos de interrupção em instruções arbitrárias.

Pontos de Interrupção de Memória

Ao clicar duas vezes em um byte na visualização de pilha ou memória, você verá instantaneamente todas as leituras/escritas para aquele endereço visualizadas ao longo da linha do tempo do traço. Amarelo indica uma leitura de memória, azul indica uma escrita de memória.

Explorando acessos à memória usando pontos de interrupção de memória

Os pontos de interrupção de memória podem ser navegados usando a mesma técnica descrita para pontos de interrupção de execução. Clique duas vezes em um byte e role enquanto passa o mouse sobre o byte selecionado para posicionar o traço em cada um de seus acessos.

Clicar com o botão direito em um byte de interesse fornecerá opções para buscar entre leitura / escrita / acesso de memória, se houver uma ação de navegação específica em mente.

Busca na memória

Para navegar pela visualização de memória para um endereço arbitrário, clique na visualização de memória e pressione G para inserir um endereço ou símbolo do banco de dados para posicionar a visualização.

Pontos de Interrupção de Região

É possível definir um ponto de interrupção de memória em uma região de memória destacando um bloco de memória e clicando duas vezes nele para definir um ponto de interrupção de acesso.

Pontos de interrupção de acesso a região de memória

Assim como nos pontos de interrupção de memória normais, passar o mouse sobre a região e rolar pode ser usado para percorrer os acessos feitos à região de memória selecionada.

Busca de Registrador

Em engenharia reversa, é bastante comum encontrar situações em que você se pergunta "Qual instrução definiu este registrador com seu valor atual?"

Usando o Tenet, você pode buscar retroativamente essa instrução com um único clique.

Buscando a escrita anterior do registrador

Buscar retroativamente é de longe a direção mais comum para navegar pelas mudanças de registrador... mas para destreza, você também pode buscar adiante para a próxima atribuição de registrador usando a seta azul à direita do registrador.

Shell de Timestamp

Um 'shell' simples é fornecido para navegar para timestamps específicos no traço. Colar (ou digitar...) um timestamp no shell com ou sem vírgulas é suficiente.

Navegando pelo traço usando o shell de timestamp

Usando um ponto de exclamação, você também pode buscar uma 'porcentagem' especificada no traço. Inserir !100 buscará a instrução final no traço, enquanto !50 buscará aproximadamente 50% do traço. !last buscará a última instrução navegável que pode ser visualizada no descompilador.

Temas

O Tenet vem com dois temas padrão -- um tema 'claro' e um 'escuro'. Dependendo das cores atualmente usadas pelo seu descompilador, o Tenet tentará selecionar o tema que parece mais apropriado.

Temas Tenet

Os arquivos de tema são armazenados como JSON simples no disco e são altamente configuráveis. Se você não estiver satisfeito com os temas ou cores padrão, pode criar seus próprios temas e simplesmente colocá-los no diretório de temas do usuário.

O Tenet lembrará sua preferência de tema para carregamentos e usos futuros.

FAQ

P: Como faço para gravar um traço de execução usando o Tenet?

  • R: O Tenet é um leitor de traços, não um gravador de traços. Você terá que usar frameworks de instrumentação binária dinâmica (ou outras tecnologias relacionadas) para gerar um traço de execução compatível. Consulte o tracing readme para mais informações sobre traçadores existentes ou como implementar o seu próprio.

P: Quais arquiteturas de traço o Tenet suporta carregar?

  • R: Apenas x86 e AMD64, mas a base de código é quase inteiramente agnóstica em relação à arquitetura.

P: Qual é o tamanho máximo de arquivo de traço que o Tenet pode carregar/navegar?

  • R: O leitor de traços do Tenet é puro Python, foi escrito como um MVP. Não há garantia de que traços que excedam 10 milhões de instruções serão razoáveis para navegar até que um backend nativo o substitua.

P: Carreguei um traço de execução, agora há um arquivo '.tt'. O que é isso?

  • R: Quando o Tenet carrega um traço de texto, ele analisa, indexa e comprime o traço em um formato mais eficiente. Em carregamentos subsequentes, o Tenet tentará carregar o arquivo '.tt', que deve carregar em uma fração do tempo que levaria para carregar o traço de texto original.

P: O plugin travou / lançou um erro / está mostrando informações de traço incorretas, o que devo fazer?

  • R: Se você encontrar um problema ou imprecisão que possa ser reproduzido, por favor abra uma issue neste repositório e envie um traço de exemplo + executável.

P: A memória no meu traço está mudando, mas não há escritas na região. Isso é um bug!?

  • R: Seu arquivo de log pode não ter capturado todas as escritas de memória. Por exemplo, DBIs em modo de usuário geralmente não recebem um callback de memória para escritas externas na memória do processo. Isso é mais comum ao ler de um arquivo ou de um socket -- é o kernel que escreve a memória no buffer de modo de usuário designado, tornando o evento invisível para a instrumentação tradicional.
    • O Microsoft TTD geralmente exibe o mesmo comportamento, é complicado resolver sem modelar chamadas de sistema.

P: Isso será portado para Binary Ninja / Ghidra / ... ?

  • R: Possivelmente, mas não tão cedo (a menos que haja um incentivo significativo). Como um projeto orientado à pesquisa, a motivação principal é desenvolver novas estratégias para organizar e explorar a execução de programas -- não portá-las.

P: Minha organização gostaria de apoiar este projeto, como podemos ajudar?

  • R: Sem financiamento, o tempo que posso dedicar a este projeto é limitado. Se sua organização está empolgada com as ideias apresentadas aqui e capaz de fornecer capital para patrocinar P&D dedicada, por favor entre em contato.

Trabalho Futuro

Tempo e motivação financiamento permitindo, trabalhos futuros podem incluir:

  • Filtragem / coagulação de chamadas de biblioteca a partir de traços
  • Análise de ponteiros (ex: anotações) para as visualizações de registrador / pilha
  • Implementações nativas de TraceFile e TraceReader (ex: traços maiores e mais rápidos)
  • Histórico de navegação + visualização de marcadores (talvez 2-em-1?)
  • Informática de traço mais rica, indexação mais agressiva de eventos relevantes (ex: chamadas de função)
  • Cartografia de traço, sumarização e representação melhoradas da geografia do traço
  • Tornar a seleção/deteção de 'arquitetura de CPU' um pouco menos hardcoded
  • Mais pontes de traçamento prontas para uso: DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Suporte para visualizações Hex-Rays / descompiladas (além da sincronização básica de visualização)
  • Fluxo de trabalho melhorado para carregar ou iterar automaticamente em traços
  • Análise diferencial, 'diffing' de traço de alto nível
  • Melhor navegação e divisão de threads, quantums
  • Melhor suporte para navegação de traços 'multi-módulo' (ex: traços de sistema completo)
  • Suporte para Binary Ninja
  • ... ?

Aceito contribuições externas, issues e solicitações de funcionalidades. Por favor, faça pull requests para o branch develop deste repositório se desejar que sejam consideradas para um lançamento futuro.

Autores

Markus Gaasedelen (@gaasedelen)

Baixar ferramenta