Delphihelper é um plug -in Python IDA Pro, com o objetivo de ajudar a análise de binários x86/x86_64 escritos na linguagem de programação Delphi.
Copie o diretório DelphiHelper e DelphiHelper.py dentro do diretório de plug -in da IDA:
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ Faça o download dos arquivos da base de conhecimento IDR manualmente seguindo as instruções abaixo ou execute o script setup_IDRKB.py .
Nota : a instalação
py7zré necessária para executar o script de configuração:pip install py7zr
O Delphihelper deve ser compatível com o IDA 8.4 e posteriormente no Windows, MacOS e GNU/Linux.
Para usar o plug -in Delphihelper, a seção de recursos deve ser carregada na IDA. Isso pode ser conseguido verificando os recursos de carga da caixa ou com a opção -R na chave de linha de comando.
NOTA : A Autoanálise da IDA deve ser concluída antes de usar o plug -in.
<Alt-Shift-H> : imprimir ajuda<Alt-Shift-R> : execute o analisador VMT<Alt-Shift-F> : Execute o DFM Finder (Show Delphi Form Viewer Window)<Alt-Shift-E> : Execute o localizador de funções de ponto de entrada<Alt-Shift-S> : Execute o carregador base de conhecimento do IDR para SysInit e unidade System<Alt-Shift-A> : execute o carregador base de conhecimento IDR para unidades selecionadas Tecla de atalho : <Alt-Shift-R>
O analisador da tabela de método virtual (VMT) deve ser executado com o cursor no endereço inicial de uma estrutura VMT. Essa estrutura pode ser localizada pesquisando as funções chamadas CreateForm , CreateObject , etc.; Depois que a função é encontrada, o último argumento deve ser a estrutura VMT.
Na maioria dos casos, há uma sequência de duas instruções:
mov <register>, <VMTStructureOffset>
call CreateForm
Por exemplo:
Uma vez na estrutura (vmtStructureOffset, por exemplo, off_664A8C ), pressione <Enter> :
Pressione a tecla de atalho <Alt-Shift-R> . O resultado parece abaixo:
A estrutura VMT contém muitas informações úteis armazenadas em várias tabelas RTTI. Os mais interessantes são:
O analisador VMT extrai automaticamente dados dessas tabelas e armazenam -os em enumes e estruturas da IDA.
A tabela de campo armazena um nome, um tipo e um deslocamento de cada campo publicado. O analisador VMT extrai e salva todas essas entradas para cada estrutura VMT em enums de IDA:
Os enumes criados pelo analisador VMT têm o seguinte formato: %ObjectName%_Fields . Os nomes das entradas de enum têm este formato: %ObjectName%_%FieldType%_%FieldName% :
As entradas de enumes criadas pelo analisador VMT podem ser nomeadas pressionando o atalho IDA embutido <M> , usado para nomear constantes simbólicas.
Antes
Depois
A tabela de métodos virtuais armazena indicadores de todos os métodos virtuais declarados para uma classe e suas classes base:
O analisador VMT extrai ponteiros do VMT e os salva em uma estrutura de IDA nomeada pela estrutura de VMT analisada. Os nomes das entradas da estrutura têm o seguinte formato: %MethodName%_%MethodOffset% :
As entradas das estruturas criadas pelo analisador VMT podem ser nomeadas pressionando o atalho IDA embutido <T> , usado para compensações de estrutura de nomeação.
Antes
Depois
A tabela de métodos armazena nomes e ponteiros de métodos publicados. A tabela de métodos também contém ponteiros de manipuladores de eventos Delphi que podem ser encontrados e acessados no visualizador de formulários Delphi (para mais informações, consulte o DFM Finder)
Tecla de atalho : <Alt-Shift-F
O DFM Finder tenta encontrar todos os DFMs armazenados em uma seção de recursos do Binário Delphi analisado e, depois, ele executa o analisador VMT em todas as estruturas VMT associadas ao DMFS encontrado. Depois que todas as estruturas VMT são processadas, uma nova subview interativa do IDA ( Delphi Form Viewer ) é exibida. A subview mostra uma visão de árvore das descrições de forma Delphi extraídas do DFM:
Os nós em negrito representam componentes que têm algum evento Delphi definido. Siga esses nós em negrito mais profundamente em uma subárvore até que você detecte o nó Properties negrito, onde você pode encontrar um evento Delphi de cor azul. Ao clicar no item do evento, você é movido para um manipulador de eventos correspondente na janela de desmontagem da IDA.
Os nós verdes representam componentes que possuem algum arquivo binário incorporado. Siga esses nós verdes mais profundos em uma subárvore até encontrar o nó Properties Verdes, onde você pode encontrar um item de cor verde. O item mostra um caminho de arquivo do arquivo binário incorporado retirado pelo DFM Finder . O subdiretório de destino para arquivos extraídos está localizado no diretório de trabalho da IDA atual e possui o seguinte formato: %IDAWorkingDirectory%_extracted_%BinaryFileName%
Clique em um nó raiz (formulário) na janela Delphi Form Viewer o move para a estrutura VMT do formulário na janela de desmontagem da IDA.
Tecla de atalho : <Alt-Shift-E>
O localizador de funções de ponto de entrada tenta encontrar possíveis funções de ponto de entrada, pesquisando referências para as chamadas CreateFrom , InitExe e InitLib . Os resultados são apresentados na janela de saída da Ida, por exemplo:
Tocadas gostosas : <Alt-Shift-S> e <Alt-Shift-A>
O carregador base do conhecimento do IDR carrega assinaturas de IDR KB de arquivos KB. O plug -in espera ter os arquivos KB armazenados no local seguinte:
No Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
no macOS/linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> carrega assinaturas de função apenas para SysInit e System .
<Alt-Shift-A> tenta carregar assinaturas de função para todas as unidades selecionadas em uma lista de unidades importadas.
Nota : Os arquivos KB são baixados do projeto IDR:
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
O projeto IDR está licenciado sob a licença do MIT:
MIT License
Copyright (c) 2006-2018 crypto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Faça o download e copie os arquivos KB em DelphiHelperIDR_KBIDR64 Diretório:
https://github.com/crypto2011/idr64/blob/master/syskb2012.bin
https://github.com/crypto2011/idr64/blob/master/syskb2013.bin
https://github.com/crypto2011/idr64/blob/master/syskb2014.bin
Download e extrair seguindo arquivos KB em DelphiHelperIDR_KBIDR Diretório:
https://github.com/crypto2011/idr/blob/master/kb2005.7z
https://github.com/crypto2011/idr/blob/master/kb2006.7z
https://github.com/crypto2011/idr/blob/master/kb2007.7z
https://github.com/crypto2011/idr/blob/master/kb2009.7z
https://github.com/crypto2011/idr/blob/master/kb2010.7z
https://github.com/crypto2011/idr/blob/master/kb2011.7z
https://github.com/crypto2011/idr/blob/master/kb2012.7z
https://github.com/crypto2011/idr/blob/master/kb2013.7z
https://github.com/crypto2011/idr/blob/master/kb2014.7z