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
Virtuailor — Ferramenta IDAPython para criação automática de tabelas virtuais C++ no IDA Pro | Kitploit
Ferramentas/GitHubGitHub/0xgalz/virtuailor
Análise EstáticaAnálise Dinâmica (Sandboxing)Engenharia ReversaDepuradoresAnálise de Binários
GitHub0xgalz/virtuailor

Virtuailor

Ferramenta IDAPython para criação automática de tabelas virtuais C++ no IDA Pro

Ver Repositório
1.4k139há 6 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

Virtuailor - Ferramenta IDAPython para reconstrução de vtables em C++

Virtuailor é uma ferramenta IDAPython que reconstrói vtables para código C++ escrito para arquitetura Intel, tanto código de 32 bits quanto 64 bits e AArch64 (Novo!). A ferramenta é composta por 2 partes, estática e dinâmica.

A primeira é a parte estática, contendo as seguintes capacidades:

  • Detecta chamadas indiretas.
  • Intercepta a atribuição de valor das chamadas indiretas usando breakpoints condicionais (o código de hook).

A segunda é a parte dinâmica, contendo as seguintes capacidades:

  • Cria estruturas de vtable.
  • Renomeia funções e endereços de vtables.
  • Adiciona offset de estrutura às chamadas indiretas no assembly.
  • Adiciona xref de chamadas indiretas para suas funções virtuais (múltiplos xrefs).
  • Para AArch64 - tenta corrigir vtables indefinidas e funções virtuais relacionadas (suporte para firmware).

Como Usar?

O Virtuailor agora suporta versões do IDA de 7.0 até a versão mais recente (7.5). Se você estiver usando versões do IDA anteriores à 7.4, precisará mudar para o branch beforeIDA-7.4; o branch master suporta a versão mais recente disponível (7.5).

  1. Por padrão, o Virtuailor procurará por chamadas virtuais em TODOS os endereços do código. Se você quiser limitar o código apenas a uma faixa de endereços específica, sem problemas, basta editar o arquivo Main para adicionar a faixa desejada nas variáveis start_addr_range e end_addr_range:
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # Você pode alterar a faixa de endereços das chamadas virtuais
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Opcional, mas extremamente recomendado, crie um snapshot do seu idb. Basta pressionar ctrl+shift+t e criar um snapshot.

  2. Pressione File->Run script... então vá para a pasta do Virtuailor e escolha executar Main.py. Você pode ver o gif a seguir para uma explicação visual mais clara. Como usar

Agora a GUI fornecerá uma opção para escolher uma faixa a ser alvo; caso queira segmentar todo o binário, basta pressionar OK com os valores padrão nos endereços inicial e final.

Depois disso, os breakpoints serão colocados no seu código e tudo o que você precisa fazer é executar seu código com o depurador do IDA, realizar as ações desejadas e observar como as vtables estão sendo construídas! Para AArch64, você pode configurar um servidor gdb remoto e depurar usando o depurador do IDA.

Caso não queira mais/precise dos breakpoints, basta ir até a aba de lista de breakpoints no IDA e excluí-los como desejar.

Também é realmente importante para mim notar que esta é a segunda versão da ferramenta com suporte a 32 e 64 bits e aarch64; provavelmente em alguns casos uma pequena quantidade de breakpoints será perdida. Nesses casos, por favor, abra uma issue e entre em contato comigo para que eu possa melhorar o código e ajudar a corrigi-lo. Desde já, obrigado por isso :)

Saída e Funções Gerais

Estruturas de vtables

As estruturas que o Virtuailor cria a partir da vtable usada em chamadas virtuais que foram atingidas. As funções da vtable são extraídas da memória com base no registrador relevante usado no opcode do BP.

exemplo de vtable Como eu queria criar uma correlação entre a estrutura no IDA e as vtables na seção de dados, o BP altera o nome do endereço da vtable na seção de dados para o nome da estrutura. Como pode ser visto na imagem a seguir: exemplo de vtable

Os nomes das funções virtuais também são alterados, exceto em situações onde os nomes não são os nomes padrão do IDA (funções com símbolos ou funções que o usuário alterou); nesses casos, os nomes das funções permanecerão os mesmos e também serão adicionados à estrutura da vtable com seu nome atual.

Os nomes escolhidos são construídos usando o seguinte padrão:

  • vtable_
  • vfunc_ O restante do nome é o offset desde o início do Segmento, principalmente porque a maioria dos binários atualmente são PIE e PIC, e portanto ASLR é aplicada (em vez de usar o nome completo do endereço, que também é bastante longo em ambientes de 64 bits). A estrutura da vtable também possui um comentário: "Foi chamado a partir do offset: XXXX", este offset é o offset desde o início do Segmento.

Adicionando Estruturas ao Assembly

Após criar a vtable, o Virtuailor também adiciona uma conexão entre a estrutura criada e o assembly, como pode ser visto nas imagens a seguir: BP após uma execução, Exemplo 2

P.S.: O offset de estrutura usado no BP é relevante apenas para a última chamada feita; para obter uma melhor compreensão de todas as chamadas virtuais feitas, o recurso de xref foi adicionado, conforme explicado na próxima seção

Xref para funções virtuais

Ao fazer engenharia reversa de C++ estaticamente, não é trivial ver quem chamou quem, pois a maioria das chamadas são indiretas; no entanto, após executar o Virtuailor, toda função que foi chamada indiretamente agora possui um xref para esses locais.

O gif a seguir mostra os xrefs adicionados com sua chamada de função indireta:

xref

Palestras e apresentações anteriores

A ferramenta foi apresentada na RECon Brussels, Troopers e Warcon. A apresentação pode ser encontrada no seguinte link: https://www.youtube.com/watch?v=Xk75TM7NmtA

Agradecimentos

Equipes da REcon Brussels, Troopers, Warcon, Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

Licença

O plugin é licenciado sob a licença GNU GPL v3.

Baixar ferramenta