xAnalyzer est un plugin pour le débogueur x86/x64 x64dbg de @mrexodia. Ce plugin est basé sur le plugin APIInfo de @mrfearless, bien que quelques améliorations et ajouts aient été apportés. xAnalyzer est capable d'effectuer différents types d'analyses sur le code statique de l'application déboguée pour donner plus d'informations supplémentaires à l'utilisateur. Ce plugin va créer une API étendue de détections d'appels de fonctions pour ajouter des définitions de fonctions, des arguments et des types de données ainsi que toute autre information complémentaire, quelque chose de proche de ce que vous obtenez avec le moteur d'analyse OllyDbg, afin de le rendre encore plus compréhensible pour le utilisateur juste avant de démarrer la tâche de débogage.
Certaines des principales fonctionnalités et améliorations incluent :
Analyse étendue des appels de fonctions (plus de 13 000 définitions d'API provenant de près de 200 DLL)
Fonctions définies et génériques, arguments, types de données et reconnaissance d'informations de débogage supplémentaires.
Détection automatique des boucles.
Fichiers de définition gérés par l'utilisateur
Avant xAnalyzer
Après xAnalyzer
Téléchargez ICI la dernière version des binaires
Téléchargez la dernière version de x64dbg
Extraire apis_def.zip
Copiez xAnalyzer.dp32/xAnalyzer.dp64 et le dossier apis_def dans les répertoires de plugins respectifs dans x64dbg
Recherchez sous le menu " Plugins " dans la fenêtre principale de x64dbg ou dans le menu secondaire de la fenêtre Disasm une entrée " xAnalyzer "
xAnalyzer propose quelques options afin de personnaliser encore plus l'expérience, de l'utiliser exactement quand vous en avez besoin et comme vous le souhaitez. Les options du plugin sont les suivantes :
Analyse automatique : Lorsque cette option est activée, le plugin va lancer une analyse entièrement automatique du code exécutable à chaque fois qu'il atteint le point d'entrée lors du chargement sur le débogueur. En utilisant cette option, vous obtenez le comportement d'analyse initial d'OllyDbg le plus proche sur x64dbg.
Analyse étendue : Cette option va forcer xAnalyzer à effectuer une analyse étendue sur toute la section de code de l'exécutable débogué. AVERTISSEMENT!!! En activant cette option, le processus d'analyse peut prendre beaucoup plus de temps et de ressources. Une plus grande quantité de mémoire RAM peut également être utilisée par x64dbg en fonction de la taille de la section et de la quantité de données supplémentaires ajoutées au désassemblage statique de l'exécutable débogué.
Analyser les fonctions non définies : en sélectionnant cette option, xAnalyzer utilisera des types d'analyse et d'argument génériques pour tous ces appels/fonctions d'API qui ne sont pas définis dans les fichiers de définition d'API et également des appels tels que :
CALL {REGISTER}
CALL {REGISTER + DISPLACEMENT}
CALL {DYNAMIC_POINTER}
xAnalyzer propose quelques commandes et options de menu lorsque vous travaillez avec un exécutable :
En faisant une sélection de plusieurs instructions dans les fenêtres de démontage de x64dbg et en sélectionnant ce menu, une analyse rapide sera faite sur les lignes sélectionnées. Vous pouvez également utiliser la commande xanal selection pour lancer cette option ou même définir vos propres raccourcis clavier dans l'interface graphique x64dbg.
Si vous êtes au milieu d'une fonction, vous pouvez utiliser cette entrée de menu pour analyser cette fonction dans son intégralité et uniquement cette fonction. En prenant votre seule instruction sélectionnée comme référence, xAnalyzer traitera à partir de là toutes les lignes à l'intérieur d'un bloc de code. Vous pouvez également utiliser la fonction de commande xanal pour lancer ce type d'analyse ou même définir vos propres raccourcis clavier dans l'interface graphique x64dbg.
Cette commande va lancer une analyse complète sur l'ensemble du module. Cette fonctionnalité prend en compte l’option Analyse étendue pour la profondeur de l’analyse à utiliser. Vous pouvez également utiliser la commande xanal module pour l'exécuter ou même définir vos propres raccourcis clavier dans l'interface graphique x64dbg.
Dans ces cas, tous ces menus vont faire le contraire de ce que faisaient les commandes précédentes. Dans le cas où vous souhaitez vous débarrasser de l'analyse, des informations supplémentaires dans certaines parties du code ou dans l'intégralité de l'exécutable si vous le souhaitez. Vous pouvez également utiliser les commandes : xanalremove sélection/fonction/module
xAnalyzer dispose d'un système extensible de fichiers de définition d'API, ces fichiers sont présents dans les dossiers "api_def" et "api_def/headers" qui doivent contenir tous les fichiers avec une structure .ini et avec la norme de :
" filename " : Il s'agit du nom du module sur lequel se trouve la fonction API.
" filename.h " : Il s'agit de l'en-tête contenant les informations relatives aux données de type (drapeaux et énumérations).
Extension " .api " : Précise qu'il s'agit d'un fichier de définition, aucune autre extension ne sera reconnue (kernel32.api, shell32.api, etc)
Tous ces fichiers ini contiennent des informations importantes pour le plugin telles que les prototypes de fonctions, les types d'arguments, etc. Toutes ces informations sont utilisées par xAnalyzer afin de définir les informations supplémentaires sur le code statique. Une seule entrée dans l'un de ces fichiers ressemblerait à :
Fichier utilisateur32.api
[MessageBox]
1=HANDLE hWnd
2=LPCTSTR lpText
3=LPCTSTR lpCaption
4=[MessageBoxType] uType
ParamCount=4
Header=shell.h.api;
@=MessageBox
Fichier shell.h.api
[MessageBoxType]
TypeDisplay=UINT
Base=UINT
Type=Flag
Const1=MB_ABORTRETRYIGNORE
Value1=0x00000002
Const2=MB_CANCELTRYCONTINUE
Value2=0x00000006
Const3=MB_HELP
Value3=0x00004000
Const4=MB_OK
Value4=0x00000000
Const5=MB_OKCANCEL
...
Tout argument entre parenthèses signifie qu'il s'agit d'un type de données spécifique (indicateurs enum ou binaires) et que celui-ci sera défini dans le fichier d'en-tête .h approprié spécifié dans la clé " Header ".
En ce qui concerne le fichier d'en-tête, le schéma est à peu près le même, juste quelques touches, comme " TypeDisplay ". Ceci spécifie le type de données approprié à afficher dans le commentaire dbg, puis vient " Base ", et il pointera vers le type de données de base utilisé par l'entrée principale, au cas où il y aurait un type de données lié, cela pourrait être entre parenthèses comme Bien. La clé " Type " est le type de structure de données dont il s'agit et elle peut être " Flag " ou " Enum ". Enfin, tous les noms et valeurs de variables arrivent.
Si vous constatez qu'une certaine définition d'appel API n'est pas détectée ou n'est pas détectée correctement par xAnalyzer, cela peut signifier qu'elle n'est pas présente dans les fichiers de définition ou qu'elle est mal définie. Dans ce cas, un ajout ou une modification pourrait être apporté pour inclure toute fonction ou argument manquant tant que la même structure est suivie, il peut être 100 % personnalisable.
Le premier appel non défini avec des arguments génériques dans une fonction ne sera pas traité, à moins qu'il ne soit précédé d'un saut, car il n'y a aucun moyen de savoir combien d'arguments utiliser sans utiliser illégalement les instructions du prologue de la fonction. Seuls les appels documentés seront traités au début d'une fonction ou d'une fonction non définie ayant été présidée par un saut.
Certaines fonctions "peu courantes" ont des arguments parmi les sauts, donc selon la conception actuelle du plugin (pas de sauts parmi les arguments des fonctions), ces appels ne seront pas traités, car chaque fois qu'un saut est trouvé, les instructions dans la pile sont nettoyées.
Les appels imbriqués fonctionneront correctement uniquement lorsque :
1-) L'appel intérieur est défini
2-) Si l'appel interne non défini ne prend pas plus d'arguments de la pile que les arguments nécessaires à l'appel externe
Il détecte uniquement les boucles à l'intérieur des fonctions (limites des fonctions Prologs/RET). Si une fonction contient un RET au milieu de son code, elle sera détectée comme une fin de fonction et la pile de boucles est effacée.
L'analyse peut échouer si l'exécutable en cours de débogage comporte plusieurs points dans son nom.
Détection de boucle incorrecte pour une section avec un saut non conditionnel à l'intérieur (voir #7)
Lignes d'arguments imbriquées (xAnalyzer prend en charge les arguments imbriqués, mais pas x64dbg pour le moment)
Ajouter une analyse d'entropie
Balayage d'analyse de flux au lieu de linéaire (émulation de trace)
Détection de changement de cas
xAnalyseur 2.5.4
- Projet mis à jour vers VS2017
- Correction de problèmes lors du traitement des instructions d'argument impliquant le pointeur de pile (version x64).
- Correction d'un ordre incorrect des arguments impliquant le pointeur de pile (version x64).
- Correction d'un bug sur la reconnaissance des arguments des fonctions non définies qui dupliquait les registres sous différents arguments (version x64)
- Modification de la reconnaissance des arguments d'appel non définis, elle ne prédira que jusqu'à 4 arguments non définis par défaut (version x86)
- Une refactorisation du code
xAnalyseur 2.5.3
-Détection des noms de fonctions dans les versions plus récentes de x64dbg corrigée
xAnalyseur 2.5.2
-Utilisation de la ligne de disasm actuellement sélectionnée pour l'analyse du module au lieu du cip
-Modification de certaines saisies dans les entrées du plugin
-Quelques refactorisations de code
-Commande modifiée "xanal/xanalremove exe" en "xanal/xanalremove module"
xAnalyseur 2.5.1
-Correction d'un crash sur les variations des instructions de déplacement
xAnalyseur 2.5.0
-Suppression des instructions [EBP+/-] comme arguments possibles de l'appelant de fonction
-Suppression du préfixe "0x" de toutes les valeurs des arguments de fonction puisque l'hexadécimal est déduit
-Correction des arguments où les variables de pointeur ne s'affichaient pas correctement en tant que pointeurs mais plutôt en tant que type de données de base
-Ajout de la reconnaissance de l'utilisation du pointeur de pile (ESP) comme argument possible pour les appels de fonction (x86)
-Ajout de l'utilisation d'un nom de type de données précis dans les arguments au lieu du nom de type de données générique/de base
-Ajout d'une fonction de suivi intelligent (prédiction intelligente et reconnaissance des appels de fonction indirects tels que : CALL {REGISTER}, CALL {POINTER})
-Ajout du nom des pointeurs de fonction en tant que paramètres (le nom complet de la fonction, s'il est détecté, sera utilisé à la place de simplement l'adresse)
xAnalyseur 2.4.3
- Ajout de la reconnaissance des instructions MOV sur x86
- Ajout de la reconnaissance des fonctions avec le suffixe "Stub"
- Correction d'un bug sur "l'analyse automatique" (ajout de plus de conditions de vérification EP)
- Les options Effacer les commentaires automatiques/Étiquettes automatiques sont désormais cochées par défaut
xAnalyseur 2.4.2
- Correction de BoF lorsque l'argument signale un commentaire dépassé MAX_COMMENT_SIZE
- Correction d'un bug de recherche de nom de fonction lorsque la définition se trouve dans un deuxième fichier .api
xAnalyseur 2.4.1
- Ajout d'un nouveau schéma de raccourcis clavier
- Ajout de nouvelles options pour contrôler quelles données d'analyse précédentes doivent être effacées. (Cela donne la possibilité de travailler de manière transparente avec des plugins de chargement de cartes comme SwissArmyKnife, etc.).
- Ajout de nouvelles commandes (les anciennes sont obsolètes)
xanal selection : Effectue une analyse de sélection
fonction xanal : Effectue une analyse fonctionnelle
xanal exe : effectue une analyse complète de l'exécutable
xanalremove selection : Supprime une analyse de sélection précédente
Fonction xanalremove : Supprime une analyse de fonction précédente
xanalremove exe : supprime une analyse exécutable complète précédente
xanal help : affiche un texte d'aide dans la fenêtre du journal
- Correction de l'analyse automatique ne se lançant pas au démarrage (Ferme #18)
- Correction de divers fichiers de définition d'API (Ferme #17)
xAnalyseur 2.4
- Nouveaux fichiers de définition d'API améliorés avec un schéma légèrement modifié (13 000 API à partir de près de 200 DLL)
- Système de reconnaissance de symboles pour chaque argument de définition d'API utilisé (plus de 1000 types de données énumérées et plus de 800 indicateurs)
- Reconnaissance des types de données des paramètres (BOOL, NUMERIC, NON-NUMERIC)
- Détection des stubs VB "DllFunctionCall"
- Les chaînes passées en arguments sont désormais plus propres (les commentaires du débogueur ont désormais la partie adresse supprimée)
- Résumé d'exécution ajouté à la fenêtre du journal
- Fonctionnalité de raccourcis clavier supprimée (sera incorporée dans les révisions futures) en raison de certains conflits avec x64dbg
- Divers bugs corrigés
xAnalyseur 2.3.1
- Correction d'un bug lors du lancement du menu "Analyser la sélection" avec une seule ligne sélectionnée, ce qui provoquait une exception brusque dbg (merci à @blaquee)
- Vérifiez si le dossier des fichiers de définition "apis_def" et les fichiers de définition existent à l'intérieur avant de charger le plugin
- Modification des touches de raccourci en Ctrl+Shift+X pour la sélection et Ctrl+X pour les fonctions
xAnalyseur 2.3
- Ajout de l'option "Analyser les fonctions non définies". (OFF par défaut, tout ce qui n'est pas dans les fichiers de définition n'est pas analysé)
- Ajout de l'option "Analyse automatique" (OFF par défaut, faire une analyse au lancement à l'EP de l'exécutable débogué)
- Ajout de la fonctionnalité "Analyser la sélection" (effectue une analyse des instructions sélectionnées, prend en charge plusieurs appels sélectionnés)
- Ajout de la fonctionnalité "Analyze Function" (Effectue une découverte et une analyse automatiques de la fonction actuelle à partir de l'adresse sélectionnée)
- Ajout de la fonctionnalité "Supprimer l'analyse" de Sélection/Fonction/Exécutable
- Ajout de raccourcis de commande
- Ajout de nouvelles icônes
- Ajout de la configuration de sauvegarde dans le fichier .ini
- Ajout de la capitalisation des valeurs d'arguments hexadécimaux
- Fonctionnalité restructurée "Analyze Executable" (Effectue une analyse complète de l'exécutable actuel)
- Menus restructurés
- La nouvelle boîte de dialogue À propos affiche désormais le numéro de version pour suivre les mises à jour
- Quelques petites corrections de bugs
- Correction et fusion de certains fichiers de définition d'API
- Améliorations de la vitesse et de la stabilité
xAnalyseur 2.2
- Ajout d'un indicateur de progression de l'analyse
- Ajout d'un nouveau mode de profondeur d'analyse
-Maintenant, l'analyse automatique n'est exécutée que si aucune base de données de sauvegarde n'est présente
- Bugs corrigés
xAnalyseur 2.1
- Arguments génériques pour les fonctions non définies et les sous-marins internes
- Commentaires et arguments de fonctions intelligentes (seules les fonctions avec des arguments sur la pile sont traitées). Cela permet à xAnalyzer de donner une vue plus claire du code en traitant et en commentant simplement ces fonctions avec des arguments réels.
- Détection des appels de fonctions indirects avec schéma CALL -> DYNAMIC_MEMORY -> API
- Détection des appels de fonctions indirects avec schéma CALL -> REGISTER/REGISTER + DEPLACEMENT -> API
- Détection des appels de fonctions indirects avec schéma CALL -> JMP -> JMP -> API
- Détection automatique des boucles
- Correction de bugs mineurs
- Réarrangements de codes
xAnalyseur 2.0
- Prise en charge des bits x64
- Prise en charge des changements d'ordre des arguments d'appel d'API en x64 bits
- Prise en charge des informations supplémentaires sur les fichiers PDB dans les appels API
- Prise en charge des appels API directs/indirects
- Prise en charge des appels de fonctions API statiques au code du module principal
- Correction de plusieurs mauvais ordres d'arguments d'appels d'API dans les fichiers de définition. Plus d'appels peuvent désormais être détectés et commentés correctement
- Quelques améliorations et un code mieux écrit
- Divers bugs résolus
xAnalyseur 1.2
- Mise à jour des fichiers de définition de l'API
- Ajout du support des exécutables vc6+
xAnalyseur 1.1
- Correction d'un problème qui n'affichait pas les informations de l'API sur les exécutables VC++ en raison d'un nettoyage incorrect des structures BASIC_INSTRUCTION_INFO avant/après leur utilisation en boucle.
- Ajout/Mise à jour des fichiers de définition de l'API
- Bugs corrigés
xAnalyseur 1.0
- Version initiale
Les contributions de toutes sortes sont les bienvenues, non seulement sous forme de relations publiques mais également sous forme de rapports de bogues, de documentation, etc.
Veuillez garder les points suivants à l'esprit :
Merci d'utiliser le plugin xAnalyzer... et bon retour à tous !