Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
ida_kcpp — Um módulo IDAPython para aprimorar o suporte a C++ sobre o ida_kernelcache | Kitploit
Ferramentas/GitHubGitHub/cellebrite-labs/ida_kcpp
Análise EstáticaSegurança iOSEngenharia ReversaSegurança MóvelAnálise de Binários
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

Um módulo IDAPython para aprimorar o suporte a C++ sobre o ida_kernelcache

Ver Repositório
1421535há 2 mesesRevisado 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

ida_kcpp

Um módulo IDAPython para uma forma muito mais conveniente de fazer Engenharia Reversa de kernelcaches do iOS.

Grande parte do kernelcache do iOS é escrita em C++, que compilado em código binário complicado usa muitas desreferências de tabela virtual em vez de chamadas diretas explícitas. O ida_kcpp aproveita a reconstrução da hierarquia de classes do ida_kernelcache. Ele mapeia o IDB e sincroniza as funções binárias e os métodos virtuais originais. Ele permite a navegação pelo kernelcache do iOS com um duplo clique na chamada de um método virtual de C++, encontrando seus xrefs e mantendo tudo sincronizado durante a pesquisa ao vivo.

O ida_kcpp é inspirado no ida_medigate, mas se beneficia da estrutura única do kernelcache do iOS e proporciona um ambiente de pesquisa mais poderoso e conveniente.

general_view

Instalação

  • Instale o ida_kernelcache (fork da Cellebrite)
  • Opcional, mas altamente recomendado: instale o ida-referee (fork da Cellebrite) para rastreamento de xrefs de campos de structs a partir do acesso no decompilador

Nenhum dos dois está no PyPI, então siga as instruções de instalação nos respectivos repositórios.

Com o ida-setup:

ida-setup plugin install -e /path/to/ida-kcpp

Ou manualmente:

  1. Instale ida-netnode
  2. Certifique-se de que ida_kernelcache e ida_kcpp estejam no caminho do IDA python.

Também pode ser adicionado inserindo em ~/.idapro/idapythonrc.py:

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. crie um symlink de ~/.idapro/plugins/ida_kcpp_plugin.py para ida_kcpp_plugin.py

Uso

Análise Preliminar

  1. Abra o kernelcache analisado. Se o ida_kernelcache ainda não foi executado, execute-o em edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. Execute Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync... (Algumas caixas de mensagem de aviso podem aparecer; você pode ignorá-las por enquanto). Esta etapa renomeia os nomes das funções virtuais definindo seu prefixo para a classe à qual pertencem. Esta etapa também descompila todas as funções virtuais, define seu argumento this e altera o membro ::vmethods relevante para ser um ponteiro de função para o tipo descompilado. Esta etapa pode demorar um pouco...
  3. Agora existe um "Synced IDB", mas preste atenção - o plugin ainda não está ativado.

Ativação do plugin para um IDB sincronizado

O ida_kcpp propaga automaticamente nomes e protótipos, e também altera alguns aspectos da navegação no IDA, portanto não é ativado automaticamente, mas pode ser ativado ou desativado a qualquer momento.

Ative o ida_kcpp clicando em edit >> Plugins >> Kernel Cache CPP >> Activate Plugin (Isso instalará os hooks do Hexrays e também executará ida_kernelcache.collect_class_info())

Desativar o plugin

clicando em Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

Visão geral dos recursos

Sincronizador de funções virtuais

Renomeação de funções virtuais

Ao renomear uma função virtual, pode-se editar o nome mangled (por exemplo, __ZNK10AppleA7IOP9method_86Ev_99), ou alterá-lo para nomes legíveis por humanos (AppleA7IOP::method_86), que serão mangled automaticamente. O membro ANCESTOR::vmethods relevante também será renomeado, e todas as funções virtuais que implementam o mesmo método virtual também serão renomeadas.

Atualização do protótipo de funções virtuais

O mesmo vale para alteração do protótipo de funções virtuais. Neste caso, o protótipo do membro ANCESTOR::vmethods relevante será alterado para um ponteiro de função para o tipo que acabou de ser definido, com a definição de this como ANCESTOR *. Além disso, os protótipos de todas as implementações relevantes do método virtual dos DESCENDANTES do ANCESTOR serão alterados, com a definição de seu this como DESCENTANT *.

XREFS aprimorados

  • Adicionamos uma xref de cada função virtual para seu membro abstrato ::vmethods.
  • Usando o ida_referee, podemos rastrear os usos de cada campo, e especialmente do membro ::vmethods (chamadas virtuais) no descompilador.
    • Também adicionamos o atalho CTRL+SHIFT+Y a partir da função virtual, para abrir diretamente a janela de xrefs para seu membro ::vmethod relevante. O IDA tem um bug e isso só funciona a partir da janela de desassembly e não do descompilador.

Navegação aprimorada

  • Descompilador: clique duplo em uma chamada de função virtual abre uma janela que permite ao usuário escolher a implementação do método virtual.

    image-20220707161129479

  • Visualização Local Types (Shift+F1):

    • Clique duplo em um método virtual navega para a implementação (observação: o IDA 9 também mostra um diálogo de renomeação que pode ser dispensado)
    • Cmd+Enter em um método virtual também navega para a implementação (alternativa mais limpa ao clique duplo)
    • Corrigido um bug do IDA em que o clique duplo no nome de uma struct que contém :: não saltava.

Melhorias futuras

  1. Adicionar suporte à compatibilidade com classes C++ do IDA7.2. Requer alterar o layout das structs do ida_kernelcache, o que ainda não fizemos por motivos de legado
  2. Adicionar uma interface de resolução de nomes/protótipos para conflitos.

Meta

Autorado por Uriel Malin, Ievgen Solodovnykov e Omer Porzecanski do Cellebrite Labs. Desenvolvido e testado para IDA 9.2 no macOS com Python 3.13

Baixar ferramenta