
Um módulo IDAPython para aprimorar o suporte a C++ sobre o ida_kernelcache
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.

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:
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)
~/.idapro/plugins/ida_kcpp_plugin.py para ida_kcpp_plugin.pyida_kernelcache ainda não foi executado, execute-o em edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernelEdit >> 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...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())
clicando em Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin
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.
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 *.
::vmethods.ida_referee, podemos rastrear os usos de cada campo, e especialmente do membro ::vmethods (chamadas virtuais) no descompilador.
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.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.

Visualização Local Types (Shift+F1):
Cmd+Enter em um método virtual também navega para a implementação (alternativa mais limpa ao clique duplo):: não saltava.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