Question:
x64dbg comment déboguer une DLL appelée depuis une application
Raz Razman
2017-06-17 12:26:47 UTC
view on stackexchange narkive permalink

J'ai une application 64 bits qui, lorsqu'elle s'exécute, chargera une dll (plugin) Je veux déboguer uniquement ce plugin, j'ai essayé de configurer x64dbg pour qu'il s'arrête lors du chargement de dll, mais deux problèmes, cette application charge des centaines d'autres dll, et quand j'arrive à ma dll et que j'essaye de passer à travers, je semble rester bloqué dans ntdll.dll plutôt que dans celui qui m'intéresse.

Y a-t-il une meilleure façon de faire cela? ou tout autre débogueur mieux adapté à ce travail? J'ai également IDA pro mais je suis plus familier avec le programme olly / x64.

Trois réponses:
Raz Razman
2017-07-10 07:28:38 UTC
view on stackexchange narkive permalink

Je vais ajouter mes résultats comme réponse car il s'avère que c'est en fait très simple dans les nouveaux débogueurs (je ne crois pas que ollyDBG a cette fonction).

X32DBG et X64DBG peuvent être utilisé avec le même processus

1) Ouvrez le fichier exécutable (exe) dans le débogueur (selon que l'exe est 32 bits ou 64 bits choisissez le bon débogueur)

2) sélectionnez le Onglet "breakpoints"

3) trouver la section intitulée "dll breakpoints"

4) Faites un clic droit dans cette section et choisissez "ajouter" tapez le nom du fichier dll. Par exemple "module.dll"

5) Maintenant, lancez votre processus, le débogueur s'arrêtera lorsque cette dll sera chargée

c'est un ajout intéressant à x64dbg exodia et l'équipe continue d'améliorer x64dbg
PhoeniX
2017-06-18 10:03:18 UTC
view on stackexchange narkive permalink

Il y a plusieurs étapes simples pour le faire:

  • Si vous avez un code source, vous pouvez créer une boucle sans fin très basique au début de votre code et une fois que cette dll se chargera, frapper une pause vous amènera finalement à cette boucle. À ce stade, vous pouvez simplement en sortir manuellement et continuer votre débogage.
  • Si vous n'avez pas de source, vous pouvez patcher la dll au point d'entrée avec 0xcc pour le point de rupture ou 0xEB 0xFE ( jmp 0x0 ) pour une boucle sans fin. Dans le cas de l'opcode de point d'arrêt, vous déclencherez le débogueur lors de l'exécution. Dans le second cas, vous pouvez faire ce que j'ai décrit précédemment.
    • pour le patch, vous pouvez utiliser n'importe quel éditeur hexadécimal. CFF Explorer pourrait être très pratique pour cela où il peut vous diriger vers le point d'entrée et avec l'éditeur hexadécimal interne, vous pouvez ajouter le patch. N'oubliez pas d'écrire de côté les octets d'origine à restaurer après l'interruption du débogueur.
Merci pour votre réponse, est-ce que je comprends bien que je devrais ajouter "0xcc" à la ligne du point d'entrée (remplacer le PE par cette commande?) Qui déclenchera un point d'arrêt? J'aurais également dû souligner que ce fichier est emballé avec upx, et je n'ai aucune fin de problème à essayer de le décompresser, (il n'y a pas de PUSHAD et beaucoup de commandes PUSH différentes)
oui, si vous remplacez l'octet d'origine par 0xcc. Chargez votre application avec le débogueur et une fois la dll chargée, le bp se déclenchera. Si c'est effectivement UPX, essayez de rechercher un transfert de contrôle indirect comme "jmp reg" et définissez le BP dessus (après avoir commencé le débogage de la DLL cible).
blabb
2017-06-18 13:32:34 UTC
view on stackexchange narkive permalink

le débogage d'une DLL est un peu plus difficile que le débogage d'un exécutable autonome. car aucune des fonctions exportées ne sera appelée, alors trouver l'argument puis le type du type d'argument de la convention d'appel de retour devient plus difficile qu'une fonction référencée.

quelques façons de les déboguer de manière autonome: écrire un fichier exe wrapper avec un appel de bibliothèque de chargement et prendre en charge à partir de là, combiné avec une analyse statique.

vous pouvez également charger une dll de manière autonome si vous avez windbg. avec. windbg -z foo.dll. cela chargera la dll comme un fichier de vidage et s'arrêtera dans AddressOfEntryPoint.

si c'était 32, j'aurais pu dire utiliser ollydbg avec loaddll et appeler la fonction d'exportation, mais puisque vous dites 64 bits, je ne sais pas si x64dbg a une fonctionnalité similaire



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...