xAnalyzer é um plugin para o depurador x86/x64 x64dbg da @mrexodia. Este plugin é baseado no APIInfo Plugin de @mrfearless, embora algumas melhorias e adições tenham sido feitas. O xAnalyzer é capaz de fazer vários tipos de análise no código estático do aplicativo depurado para fornecer mais informações extras ao usuário. Este plugin fará uma extensa detecção de chamadas de funções da API para adicionar definições de funções, argumentos e tipos de dados, bem como qualquer outra informação complementar, algo próximo ao que você obtém com o mecanismo de análise OllyDbg, a fim de torná-lo ainda mais compreensível para o usuário antes de iniciar a tarefa de depuração.
Alguns dos principais recursos e melhorias incluem:
Análise estendida de chamadas de função (mais de 13.000 definições de API de quase 200 DLLs)
Funções definidas e genéricas, argumentos, tipos de dados e reconhecimento adicional de informações de depuração.
Detecção automática de loops.
Arquivos de definição mantidos pelo usuário
Antes do xAnalyzer
Depois do xAnalyzer
Baixe AQUI a última versão dos binários
Baixe a versão mais recente do x64dbg
Extraia apis_def.zip
Copie xAnalyzer.dp32/xAnalyzer.dp64 e a pasta apis_def para os respectivos diretórios de plugins em x64dbg
Procure no menu " Plugins " na janela principal do x64dbg ou no menu secundário na janela Disasm também por uma entrada " xAnalyzer "
O xAnalyzer possui algumas opções de escolha para personalizar ainda mais a experiência com ele, para utilizá-lo exatamente quando precisar e da maneira que desejar. As opções do plugin são as seguintes:
Análise Automática : Quando esta opção está ATIVADA, o plugin irá lançar uma análise totalmente automática do código executável toda vez que atingir o ponto de entrada ao carregar no depurador. Ao usar esta opção, você obtém um comportamento de análise inicial do OllyDbg mais próximo do x64dbg.
Análise Estendida : Esta opção forçará o xAnalyzer a fazer uma análise estendida em toda a seção de código do executável depurado. AVISO!!! Ao ativar esta opção, o processo de análise pode levar muito mais tempo e recursos para ser concluído, e também uma grande quantidade de memória RAM pode ser usada pelo x64dbg dependendo do tamanho da seção e da quantidade de dados extras adicionados à desmontagem estática do executável depurado
Analisar funções indefinidas : ao selecionar esta opção, o xAnalyzer usará análises genéricas e tipos de argumentos para todas as chamadas/funções de API que não estão definidas nos arquivos de definição de API e também chamadas como:
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
O xAnalyzer possui alguns comandos e opções de menu para escolher ao trabalhar com um executável:
Ao fazer uma seleção de diversas instruções nas janelas de desmontagem do x64dbg e selecionar este menu, será feita uma análise rápida das linhas selecionadas. Você também pode usar o comando seleção xanal para iniciar esta opção ou até mesmo definir suas próprias teclas de atalho para ela na interface gráfica do x64dbg.
Se você estiver no meio de alguma função, poderá usar esta entrada de menu para analisar toda a função e apenas essa função. Tomando sua única instrução selecionada como referência, o xAnalyzer processará a partir daí todas as linhas dentro de um bloco de código. Você também pode usar a função de comando xanal para iniciar esse tipo de análise ou até mesmo definir suas próprias teclas de atalho na interface gráfica do x64dbg.
Este comando irá lançar uma análise completa de todo o módulo. Este recurso leva em consideração a opção Análise Estendida para a profundidade da análise a ser utilizada. Você também pode usar o comando xanal module para executá-lo ou até mesmo definir suas próprias teclas de atalho na interface gráfica do x64dbg.
Nestes casos, todos esses menus farão o contrário do que fizeram os comandos anteriores. Caso queira se livrar da análise de informações extras em algumas partes do código ou em todo o executável se desejar. Você também pode usar os comandos: xanalremove seleção/função/módulo
O xAnalyzer possui um sistema expansível de arquivos de definição de API, esses arquivos estão presentes nas pastas "api_def" e "api_def/headers" que devem conter todos os arquivos com estrutura .ini e com a norma de:
" filename ": Este é o nome do módulo no qual a função API está localizada.
" filename.h ": Este é o cabeçalho que contém informações relacionadas aos dados do tipo (sinalizadores e enums)
Extensão " .api ": Especifica que é um arquivo de definição, nenhuma outra extensão será reconhecida (kernel32.api, shell32.api, etc)
Todos esses arquivos ini contêm informações importantes para o plugin, como protótipos de funções, tipos de argumentos, etc. Todas essas informações são utilizadas pelo xAnalyzer para definir as informações extras no código estático. Uma única entrada em qualquer um desses arquivos seria como:
Arquivo user32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
Arquivo shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
Qualquer argumento entre colchetes significa que este é um tipo de dados específico (enum ou sinalizadores binários) e que será definido no arquivo de cabeçalho .h adequado especificado na chave " Cabeçalho ".
Quanto ao arquivo de cabeçalho, o esquema é praticamente o mesmo, apenas algumas teclas, como " TypeDisplay ". Isso especifica o tipo de dados adequado para exibir no comentário do dbg, então vem " Base ", e apontará para o tipo de dados base usado pela entrada principal, caso haja um tipo de dados vinculado, este pode estar entre colchetes como bem. A chave " Type " é o tipo de estrutura de dados e pode ser "Flag" ou "Enum". Finalmente, todos os nomes e valores de variáveis aparecem.
Se você descobrir que uma determinada definição de chamada de API não está sendo detectada ou não foi detectada corretamente pelo xAnalyzer, isso pode significar que ela não está presente nos arquivos de definição ou que está definida incorretamente, portanto, neste caso, uma adição ou modificação pode ser feita para incluir qualquer função ou argumento ausente, desde que a mesma estrutura seja seguida, pode ser 100% personalizável.
A primeira chamada indefinida com argumentos genéricos em uma função não será processada, a menos que seja precedida por um salto, pois não há como saber quantos argumentos usar sem usar ilegalmente as instruções do prólogo da função. Somente chamadas documentadas serão processadas no início de uma função ou de uma função indefinida que tenha sido presidida por um salto.
Algumas funções "incomuns" possuem argumentos entre saltos, então de acordo com o design real do plugin (sem saltos entre argumentos de funções) essas chamadas não serão processadas, pois cada vez que um salto é encontrado as instruções na pilha são limpas.
As chamadas aninhadas funcionarão corretamente somente quando:
1-) A chamada interna está definida
2-) Se a chamada interna indefinida não receber mais argumentos da pilha do que os argumentos necessários para a chamada externa
Ele detecta apenas loops dentro de funções (limites de função Prólogos/RETs). Se uma função contiver um RET no meio de seu código, ela será detectada como um final de função e a pilha de loops será limpa.
A análise poderá falhar se o executável que está sendo depurado tiver vários pontos em seu nome
Detecção de loop incorreta para uma seção com um salto não condicional dentro dela (Ver #7)
Linhas de argumentos aninhados (xAnalyzer tem suporte para argumentos aninhados, mas x64dbg no momento não tem)
Adicionar análise de entropia
Varredura de análise de fluxo em vez de linear (emulação de rastreamento)
Detecção de mudança de caso
xAnalyzer 2.5.4
- Projeto atualizado para VS2017
- Corrigidos problemas ao processar instruções de argumentos envolvendo o stack pointer (versão x64).
- Corrigida ordem incorreta de argumentos envolvendo o stack pointer (versão x64).
- Corrigido bug no reconhecimento de argumentos de funções indefinidas que duplicavam registros como argumentos diferentes (versão x64)
- Alterado o reconhecimento de argumentos de chamada indefinidos, ele só irá prever até 4 argumentos indefinidos por padrão (versão x86)
- Alguma refatoração de código
xAnalyzer 2.5.3
-Detecção de nomes de funções em versões mais recentes do x64dbg corrigida
xAnalyzer 2.5.2
-Utilizou a linha de desasmo atual selecionada para análise do módulo em vez de cip
-Modificou algumas digitações nas entradas do plugin
-Alguma refatoração de código
-Comando modificado "xanal/xanalremove exe" para "módulo xanal/xanalremove"
xAnalyzer 2.5.1
-Falha corrigida nas variações das instruções mov
xAnalyzer 2.5.0
-Removidas instruções [EBP+/-] como possíveis argumentos do chamador de função
-Removido o prefixo "0x" de todos os valores dos argumentos da função, uma vez que hexadecimal é inferido
-Argumentos corrigidos onde variáveis de ponteiro não eram mostradas corretamente como ponteiros, mas como tipo de dados base
-Adicionado reconhecimento de uso de ponteiro de pilha (ESP) como possível argumento para chamadas de função (x86)
-Adicionado uso de nome de tipo de dados preciso em argumentos em vez de nome de tipo de dados genérico/base
-Adicionado recurso de rastreamento inteligente de função (previsão inteligente e reconhecimento de chamadas de função indiretas como: CALL {REGISTER}, CALL {POINTER})
-Adicionado nome de ponteiros de função como parâmetros (o nome completo da função, se detectado, será usado em vez de apenas o endereço)
xAnalyzer 2.4.3
- Adicionado reconhecimento de instruções MOV em x86
- Adicionado reconhecimento de funções com sufixo "Stub"
- Corrigido bug na "análise automática" (adicionadas mais condições de verificação de EP)
- Opções Limpar comentários automáticos/rótulos automáticos marcadas agora por padrão
xAnalyzer 2.4.2
- BoF corrigido quando o comentário dos sinalizadores de argumento ultrapassava MAX_COMMENT_SIZE
- Corrigido bug de pesquisa de nome de função quando a definição está em um segundo arquivo .api
xAnalyzer 2.4.1
- Adicionado um novo esquema de teclas de atalho
- Adicionadas novas opções para controlar quais dados de análises anteriores devem ser apagados. (Isso dá a possibilidade de trabalhar perfeitamente com plug-ins de carregamento de mapas como SwissArmyKnife, etc).
- Adicionados novos comandos (os antigos foram obsoletos)
seleção xanal: Executa uma análise de seleção
função xanal: Executa uma análise de função
xanal exe: Executa uma análise executável completa
seleção xanalremove: Remove uma análise de seleção anterior
Função xanalremove: Remove uma análise de função anterior
xanalremove exe: Remove uma análise executável inteira anterior
ajuda xanal: traz para a janela de log algum texto de ajuda
- Correção da análise automática que não iniciava na inicialização (fecha #18)
- Corrigidos vários arquivos de definição de API (fecha #17)
xAnalyzer 2.4
- Arquivos de definição de API novos e aprimorados com um esquema ligeiramente modificado (13.000 APIs de quase 200 DLLs)
- Sistema de reconhecimento de símbolos para cada argumento de definição de API usado (mais de 1000 tipos de dados enums e mais de 800 sinalizadores)
- Reconhecimento de tipos de dados params (BOOL, NUMERIC, NON-NUMERIC)
- Detecção de stubs VB "DllFunctionCall"
- Strings passadas como argumentos estão mais limpas agora (os comentários do depurador agora têm a parte do endereço removida)
- Resumo de execução adicionado à janela de log
- Recurso de teclas de atalho removido (será incorporado em revisões futuras) devido a alguns conflitos com x64dbg
- Vários bugs corrigidos
xAnalyzer 2.3.1
- Corrigido bug ao abrir o menu "Analisar Seleção" com uma única linha selecionada, o que causava uma exceção abrupta no dbg (graças a @blaquee)
- Verifique se a pasta de arquivos de definição "apis_def" e os arquivos de definição existem dentro dela antes de carregar o plugin
- Teclas de atalho alteradas para Ctrl+Shift+X para seleção e Ctrl+X para funções
xAnalyzer 2.3
- Adicionada opção "Analisar funções indefinidas". (DESATIVADO por padrão, tudo o que não estiver nos arquivos de definição não será analisado)
- Adicionada opção "Análise automática" (OFF por padrão, faz análise no lançamento no EP do executável depurado)
- Adicionado recurso "Analisar Seleção" (Faz uma análise de instruções selecionadas, suporta múltiplas chamadas selecionadas)
- Adicionado recurso "Analyze Function" (faz uma descoberta e análise automática da função atual a partir do endereço selecionado)
- Adicionado recurso "Remover Análise" de Seleção/Função/Executável
- Adicionados atalhos de comando
- Adicionados novos ícones
- Adicionada configuração de salvamento no arquivo .ini
- Adicionada capitalização de valores de argumentos hexadecimais
- Reestruturação do recurso "Analyze Executable" (Faz uma análise completa do executável atual)
- Menus reestruturados
- A nova caixa de diálogo sobre agora mostra o número da versão para acompanhar as atualizações
- Algumas pequenas correções de bugs
- Corrigido e mesclado alguns arquivos de definição de API
- Melhorias de velocidade e estabilidade
xAnalyzer 2.2
- Adicionado indicador de progresso da análise
- Adicionado novo modo de profundidade de análise
-Agora a análise automática só é executada se nenhum banco de dados de backup estiver presente
- Bugs corrigidos
xAnalyzer 2.1
- Argumentos genéricos para funções indefinidas e subs internos
- Comentários e argumentos de funções inteligentes (somente funções com argumentos na pilha estão sendo processadas). Isso permite que o xAnalyzer forneça uma visão mais clara do código apenas processando e comentando essas funções com argumentos reais
- Detecção de chamadas indiretas de função com esquema CALL -> DYNAMIC_MEMORY -> API
- Detecção de chamadas de função indiretas com esquema CALL -> REGISTER/REGISTER + DISPLACEMENT -> API
- Detecção de chamadas de função indiretas com esquema CALL -> JMP -> JMP -> API
- Detecção automática de loops
- Corrigidos pequenos bugs
- Reorganizações de código
xAnalyzer 2.0
- Suporte para x64 bits
- Suporta alterações de ordem de argumentos de chamada de API em x64 bits
- Suporte a informações extras de arquivos PDB em chamadas de API
- Suporte de chamadas de API diretas/indiretas
- Suporte de chamadas de funções de API estáticas para o código do módulo principal
- Correção de várias ordens erradas de argumentos de chamadas de API em arquivos de definição. Mais chamadas agora podem ser detectadas e comentadas corretamente
- Algumas melhorias e código melhor escrito
- Vários bugs resolvidos
xAnalyzer 1.2
- Atualizados os arquivos de definição da API
- Adicionado suporte para executáveis vc6+
xAnalyzer 1.1
- Corrigido problema que não mostrava informações da API em executáveis VC++ devido à não limpeza adequada das estruturas BASIC_INSTRUCTION_INFO antes/depois de usá-las em um loop
- Adicionados/atualizados os arquivos de definição da API
- Bugs corrigidos
xAnalyzer 1.0
- Lançamento inicial
Contribuições de todos os tipos são bem-vindas, não apenas como relações públicas, mas também como relatórios de bugs, documentação, etc.
Tenha em mente o seguinte:
Obrigado por usar o plugin xAnalyzer... e feliz reversão para todos!