
O Tenet é um plug -in do IDA Pro para explorar traços de execução. O objetivo deste plug -in é fornecer controles humanos mais naturais para a navegação em traços de execução contra 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 no software.
Para mais contexto sobre este projeto, leia o post do blog sobre seu lançamento inicial.
Agradecimentos especiais a Qira / Geohot et al. para a inspiração.
O Tenet é um plugin Python 3 de plataforma cruzada (Windows, MacOS, Linux). São necessárias zero dependências de terceiros, tornando o código portátil e fácil de instalar.
Do console python do seu desmontador, execute o seguinte comando para encontrar seu diretório de plug -in:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") Copie o conteúdo deste repositório /plugins/ pasta para o diretório listado.
Reinicie seu desmontador.
Este plugin é suportado apenas para IDA 7.5 e mais recente.
Depois de instalado corretamente, haverá uma nova entrada de menu disponível no desmontador. Isso pode ser usado para carregar traços de execução coletados externamente no princípio.

Como esta é a versão inicial, o Tenet aceita apenas traços de texto simples e legíveis por humanos. Consulte o readme de rastreamento neste repositório para obter informações adicionais sobre o formato de rastreamento, limitações e rastreadores de referência.
Ao usar o Tenet, o plug -in 'tinta' trilhas para indicar o fluxo de execução para a frente (azul) e para trás (vermelho) da sua posição atual no rastreamento de execução ativo.

Para step à frente ou para trás no tempo, você simplesmente rola enquanto pairava pela linha do tempo no lado direito do desmontador. Para step over as chamadas de função, segure SHIFT durante a rolagem.
A linha do tempo de rastreamento será atracada no lado direito do desmontador. Esse widget é usado para visualizar diferentes tipos de eventos ao longo da linha do tempo do rastreamento e executar a navegação básica, conforme descrito acima.

Ao clicar e arrastar a linha do tempo , é possível aumentar o zoom em uma seção específica do rastreamento de execução. Essa ação pode ser repetida várias vezes para atingir a granularidade desejada.
Clicar duas vezes no ponteiro de instrução na janela Registros o destacará em vermelho, revelando todos os locais que as instruções foram executadas na linha do tempo do rastreamento.

Para pular entre as execuções, role para cima ou para baixo enquanto pairava o ponteiro de instrução destacado .
Além disso, você pode clicar com o botão direito do mouse na listagem de desmontagem e selecionar uma das entradas de menu baseadas em navegação para procurar rapidamente a execução de uma instrução de interesse.

A tecla de atalho F2 nativa da IDA também pode ser usada para definir pontos de interrupção em instruções arbitrárias.
Ao clicar duas vezes em um byte nas visualizações de pilha ou memória, você verá instantaneamente todas as leituras/gravações nesse endereço visualizado na linha do tempo de rastreamento. Amarelo indica uma leitura de memória, o azul indica uma gravação de memória.

Os pontos de interrupção da 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 mouse o byte selecionado para procurar o rastreamento para cada um de seus acessos.
O clique com o botão direito do mouse de um byte de interesse oferecerá opções para procurar entre leitura / gravação / acesso da memória se houver uma ação de navegação específica que você tenha em mente.

Para navegar na visualização da memória para um endereço arbitrário, clique na visualização da memória e pressione G para inserir um endereço ou símbolo de banco de dados para procurar a visualizaçã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 para definir um ponto de interrupção de acesso.

Assim como nos pontos de interrupção da memória normais, pairando a região e a rolagem podem ser usados para atravessar os acessos feitos à região selecionada da memória.
Na engenharia reversa, é bastante comum encontrar situações em que você se pergunta "qual instrução definir esse registro no seu valor atual?"
Usando o Tenet, você pode procurar para trás nessa instrução em um único clique.

Buscar para trás é de longe a direção mais comum para navegar pelas mudanças de registro ... mas, para a destreza, você também pode procurar a próxima atribuição de registro usando a seta azul à direita do registro.
Um 'shell' simples é fornecido para navegar para registros de data e hora específicos no rastreamento. Colar (ou digitar ...) um registro de data e hora na concha com ou sem vírgulas será suficiente.

Usando um ponto de exclamação, você também pode buscar uma 'porcentagem' especificada no rastreamento. Entrando !100 procurará a instrução final no rastreamento, onde !50 procurarão aproximadamente 50% do caminho através do traço. !last , procurará a última instrução navegável que pode ser vista no desmontador.
A princípio é enviado com dois temas padrão - um tema 'claro' e um 'escuro'. Dependendo das cores atualmente usadas pelo seu desmontador, o Tenet tentará selecionar o tema que parece mais apropriado.

Os arquivos de temas 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, poderá criar seus próprios temas e simplesmente soltá -los no diretório de temas do usuário.
O Tenet se lembrará da sua preferência de tema por cargas e usos futuros.
Tempo e motivação Permitir financiamento, trabalho futuro pode incluir:
Congratulo -me com contribuições externas, questões e solicitações de recursos. Faça qualquer solicitação de tração para a filial develop deste repositório, se você quiser que eles sejam considerados para uma versão futura.