Delphihelper es un complemento Python Ida Pro con el objetivo de ayudar al análisis de binarios x86/x86_64 escritos en el lenguaje de programación de Delphi.
Copie el directorio DelphiHelper y DelphiHelper.py dentro del directorio de complementos de IDA:
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ Descargue archivos de base de conocimiento IDR manualmente siguiendo las instrucciones que se dan a continuación o ejecute el script setup_IDRKB.py .
Nota : Se requiere la instalación de
py7zrpara ejecutar el script de configuración:pip install py7zr
Delphihelper debe ser compatible con IDA 8.4 y más tarde en Windows, macOS y GNU/Linux.
Para usar el complemento Delphihelper, la sección de recursos debe cargarse en IDA. Esto se puede lograr verificando los recursos de carga del cuadro o con la opción -R en el interruptor de línea de comando.
Nota : El autoanálisis de IDA debe completarse antes de usar el complemento.
<Alt-Shift-H> : Ayuda de impresión<Alt-Shift-R> : Ejecutar VMT Parser<Alt-Shift-F> : Ejecutar DFM Finder (Show Delphi Form Viswer Window)<Alt-Shift-E> : Ejecutar el buscador de funciones de punto de entrada<Alt-Shift-S> : ejecutar cargador de base de conocimiento IDR para unidades SysInit y System<Alt-Shift-A> : ejecutar cargador de base de conocimiento IDR para unidades seleccionadas Hotkey : <Alt-Shift-R>
El analizador de la tabla de métodos virtuales (VMT) debe ejecutarse con el cursor en la dirección inicial de una estructura VMT. Esta estructura se puede ubicar buscando las funciones llamadas CreateForm , CreateObject , etc.; Una vez que se encuentra la función, el último argumento debe ser la estructura VMT.
En la mayoría de los casos hay una secuencia de dos instrucciones:
mov <register>, <VMTStructureOffset>
call CreateForm
Por ejemplo:
Una vez en la estructura (vmtStructureOffset, por ejemplo, off_664A8C ), presione <Enter> ::
Presione la tecla de acceso rápido <Alt-Shift-R> . El resultado se ve a continuación:
La estructura VMT contiene mucha información útil almacenada en varias tablas RTTI. Los más interesantes son:
El analizador VMT extrae automáticamente datos de esas tablas y los almacena en enumeraciones y estructuras de Ida.
La tabla de campo almacena un nombre, un tipo y un desplazamiento de cada campo publicado. El analizador VMT extrae y guarda todas estas entradas para cada estructura VMT en enumeraciones de Ida:
Los enums creados por el analizador VMT tienen el siguiente formato: %ObjectName%_Fields . Los nombres de las entradas de Enum tienen este formato: %ObjectName%_%FieldType%_%FieldName% :
Las entradas de Enums creadas por el analizador VMT se pueden nombrar luego presionando el atajo IDA incorporado <M> , utilizado para nombrar constantes simbólicas.
Antes
Después
La tabla de métodos virtuales almacena punteros a todos los métodos virtuales declarados para una clase y sus clases base:
El analizador VMT extrae punteros del VMT y los guarda en una estructura IDA nombrada por la estructura VMT analizada. Los nombres de las entradas de estructura tienen el siguiente formato: %MethodName%_%MethodOffset% :
Las entradas de las estructuras creadas por el analizador VMT se pueden nombrar luego presionando el atajo IDA incorporado <T> , utilizado para nombrar compensaciones de estructura.
Antes
Después
La tabla de métodos almacena nombres y punteros de métodos publicados. La tabla de métodos también contiene Pointers of Delphi Event Handlers que se pueden encontrar y acceder desde el Visor de formulario Delphi (para obtener más información, consulte DFM Finder)
Hotkey : <Alt-Shift-F
El buscador de DFM intenta encontrar todos los DFM almacenados en una sección de recursos del binario Delphi analizado y después de eso ejecuta el analizador VMT en todas las estructuras VMT asociadas con DMF encontrados. Después de procesar todas las estructuras VMT, se muestra una nueva subvisión interactiva de IDA ( Visor de formulario Delphi ). La subvisión muestra una vista de árbol de las descripciones de formulario Delphi extraídas de DFM:
Los nodos en negrita representan componentes que tienen algún evento de Delphi definido. Siga tales nodos audaces más profundos en un subárbol hasta que detecte el nodo Properties en negrita, donde puede encontrar un evento de Delphi de color azul. Al hacer clic en el elemento del evento, se mueve a un controlador de eventos correspondiente en la ventana de desmontaje de IDA.
Los nodos verdes representan componentes que tienen un archivo binario incrustado. Siga tales nodos verdes más profundos en un subárbol hasta que detecte el nodo Properties verdes, donde puede encontrar un elemento de color verde. El elemento muestra una ruta de archivo del archivo binario incrustado descartado por DFM Finder . El subdirectorio de destino para los archivos extraídos se encuentra en el directorio de trabajo actual de IDA y tiene el siguiente formato: %IDAWorkingDirectory%_extracted_%BinaryFileName%
Haga clic en un nodo raíz (formulario) en la ventana del visor de formulario Delphi lo mueve a la estructura VMT del formulario en la ventana de desmontaje de IDA.
Clave de acceso rápido : <Alt-Shift-E>
El buscador de funciones de punto de entrada intenta encontrar posibles funciones de punto de entrada buscando referencias a las llamadas CreateFrom , InitExe e InitLib . Los resultados se presentan en la ventana de salida de IDA, por ejemplo:
PLACAS HEALTAS : <Alt-Shift-S> y <Alt-Shift-A>
El cargador de la base de conocimiento IDR carga las firmas IDR KB de los archivos KB. El complemento espera tener los archivos KB almacenados en la siguiente ubicación:
En Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
en macOS/Linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> Carga firmas de la función para solo SysInit y System .
<Alt-Shift-A> intenta cargar firmas de función para todas las unidades seleccionadas de una lista de unidades importadas.
Nota : Los archivos KB se descargan del proyecto IDR:
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
El proyecto IDR tiene licencia bajo la licencia 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.
Descargue y copie siguiendo archivos KB en DelphiHelperIDR_KBIDR64 Directory:
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
Descargue y extraiga siguiendo archivos KB en DelphiHelperIDR_KBIDR Directory:
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