Delphihelper est un plugin Python Ida Pro visant à aider l'analyse des binaires x86 / x86_64 écrits en langage de programmation Delphi.
Copier DelphiHelper Directory et DelphiHelper.py à l'intérieur du répertoire du plugin IDA:
%APPDATA%Hex-RaysIDA Proplugins$HOME/.idapro/plugins/ Téléchargez les fichiers de base de connaissances IDR manuellement en suivant les instructions ci-dessous ou exécutez le script setup_IDRKB.py .
Remarque : L'installation
py7zrest nécessaire pour exécuter le script de configuration:pip install py7zr
Delphihelper doit être compatible avec IDA 8.4 et plus tard sur Windows, MacOS et GNU / Linux.
Pour utiliser le plugin Delphihelper, la section des ressources doit être chargée en IDA. Cela peut être réalisé en cochant les ressources de chargement de la boîte ou avec l'option -R dans le commutateur de ligne de commande.
Remarque : l'autoanalyse d'IDA doit être terminée avant d'utiliser le plugin.
<Alt-Shift-H> : Aide d'impression<Alt-Shift-R> : Exécutez VMT Parser<Alt-Shift-F> : Exécutez DFM Finder (Afficher la fenêtre de la visionneuse de formulaire Delphi)<Alt-Shift-E> : Exécutez Fonction de la fonction de point d'entrée<Alt-Shift-S> : Exécutez le chargeur de base de connaissances IDR pour SysInit et unité System<Alt-Shift-A> : Exécutez le chargeur de base de connaissances IDR pour les unités sélectionnées Hot-clé : <Alt-Shift-R>
L' analyseur de la table de méthode virtuelle (VMT) doit être exécuté avec le curseur sur l'adresse de départ d'une structure VMT. Cette structure peut être localisée en recherchant les fonctions nommées CreateForm , CreateObject , etc.; Une fois la fonction trouvée, le dernier argument devrait être la structure VMT.
Dans la plupart des cas, il y a une séquence de deux instructions:
mov <register>, <VMTStructureOffset>
call CreateForm
Par exemple:
Une fois sur la structure (VMTSTructureOffset, par exemple off_664A8C ), appuyez sur <Enter> Entrée>:
Appuyez sur le hot-clé <Alt-Shift-R> . Le résultat ressemble ci-dessous:
La structure VMT contient de nombreuses informations utiles stockées dans diverses tables RTTI. Les plus intéressants sont:
L' analyseur VMT extrait automatiquement les données de ces tableaux et les stocke en énumérations et structures IDA.
La table de champ stocke un nom, un type et un décalage de chaque champ publié. L' analyseur VMT extrait et enregistre toutes ces entrées pour chaque structure VMT dans Ida Enum:
Les enums créés par le Parser VMT ont le format suivant: %ObjectName%_Fields . Les noms des entrées d'énumération ont ce format: %ObjectName%_%FieldType%_%FieldName% :
Les entrées des énumérations créées par l' analyseur VMT peuvent ensuite être nommées en appuyant sur le raccourci IDA intégré <M> , utilisé pour nommer des constantes symboliques.
Avant
Après
La table de méthode virtuelle stocke les pointeurs sur toutes les méthodes virtuelles déclarées pour une classe et ses classes de base:
L' analyseur VMT extrait les pointeurs du VMT et les sauve dans une structure IDA nommée par la structure VMT analysée. Les noms des entrées de structure ont le format suivant: %MethodName%_%MethodOffset% :
Les entrées des structures créées par l' analyseur VMT peuvent ensuite être nommées en appuyant sur le raccourci IDA intégré <T> , utilisé pour les décalages de structure de dénomination.
Avant
Après
Le tableau des méthodes stocke les noms et les pointeurs des méthodes publiées. Le tableau de méthode contient également des pointeurs de gestionnaires d'événements Delphi qui peuvent être trouvés et accessibles à partir de la visionneuse de formulaire Delphi (pour plus d'informations, voir DFM Finder)
Hot-clé : <Alt-Shift-F
Le Finder DFM essaie de trouver tous les DFM stockés dans une section de ressources du binaire Delphi analysé et, après cela, il exécute l' analyseur VMT sur toutes les structures VMT associées aux DMF trouvés. Une fois que toutes les structures VMT sont traitées, une nouvelle sous-vue IDA interactive ( Viewer Delphi Form ) s'affiche. La sous-vue montre une vue d'arbre des descriptions de formulaires Delphi extraites de DFM:
Les nœuds en gras représentent des composants qui ont un événement Delphi défini. Suivez ces nœuds audacieux plus profondément dans un sous-arbre jusqu'à ce que vous repérez le nœud Properties Bold, où vous pouvez trouver un événement Delphi de couleur bleue. En cliquant sur l'élément de l'événement, vous êtes déplacé vers un gestionnaire d'événements correspondant dans la fenêtre de démontage IDA.
Les nœuds verts représentent des composants qui ont un fichier binaire intégré. Suivez ces nœuds verts plus profondément dans un sous-arbre jusqu'à ce que vous repérez le nœud Properties vertes, où vous pouvez trouver un élément de couleur verte. L'élément affiche un chemin de fichier du fichier binaire embarqué abandonné par DFM Finder . Le sous-répertoire de destination pour les fichiers extraits est situé dans le répertoire de travail IDA actuel et a le format suivant: %IDAWorkingDirectory%_extracted_%BinaryFileName%
Cliquez sur un nœud racine (formulaire) dans la fenêtre de la visionneuse de formulaire Delphi vous déplace vers la structure VMT du formulaire dans la fenêtre de démontage IDA.
Hot-clé : <Alt-Shift-E>
Fonction Point de saisie Fonction Finder essaie de trouver des fonctions de points d'entrée possibles en recherchant des références aux appels CreateFrom , InitExe et InitLib . Les résultats sont présentés dans la fenêtre de sortie d'Ida, par exemple:
HOTKEYS : <Alt-Shift-S> et <Alt-Shift-A>
Le chargeur de base de connaissances IDR charge les signatures KB IDR à partir des fichiers KB. Le plugin prévoit que les fichiers KB sont stockés à l'emplacement suivant:
sur Windows: %APPDATA%Hex-RaysIDA PropluginsDelphiHelperIDR_KB
sur macOS / Linux: $HOME/.idapro/plugins/DelphiHelper/IDR_KB/
<Alt-Shift-S> Charge les signatures de fonction pour uniquement SysInit et System .
<Alt-Shift-A> essaie de charger des signatures de fonction pour toutes les unités sélectionnées à partir d'une liste d'unités importées.
Remarque : les fichiers KB sont téléchargés à partir du projet IDR:
https://github.com/crypto2011/idr
https://github.com/crypto2011/idr64
Le projet IDR est autorisé en vertu de la licence du 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.
Téléchargez et copiez les fichiers KB suivants dans DelphiHelperIDR_KBIDR64 répertoire:
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
Téléchargez et extraire les fichiers KB suivant dans 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