logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [OllyDBG] Afficher l'état actuel lorsqu'il break sans BP  (Lu 6550 fois)
Pech
Profil challenge

Classement : 34/54252

Membre Junior
**
Hors ligne Hors ligne
Messages: 83


Voir le profil
« le: 07 Août 2015 à 13:16:07 »

Salut,

J'admet que le titre est assez mystérieux mais je vois difficilement comment expliquer mon problème.
Je vais donc tenter de le faire avec un exemple.

Prenons un binaire qui affiche une "message box".
Quand on le charge, OllyDBG affiche le code à l'EP (ou autre suivant les options), etc.
On le démarre et donc il break du fait de l'affichage de la "message box" qui attend que l'utilisateur clique sur OK, Cancel ou autre.
Mais, à ce moment là, il affiche toujours l'"état d'origine" : il n'est pas à l'adresse où se trouve le call, il n'affiche pas ce que contiennent les registres, ...

Ma question est donc : comment faire pour accéder à cet "état actuel" ?

Merci d'avance à quiconque pourrait m'éclairer
Pech.
Journalisée
Ge0

Profil challenge

Classement : 16/54252

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #1 le: 07 Août 2015 à 13:32:39 »

Hello,

Lorsque l'affichage de la MessageBox est effectif, il n'existe pas d'état actuel puisque ton programme est toujours en exécution pour gérer l'affichage de la MessageBox (la redessiner, traiter les mouvements de ta souris, et j'en passe).
« Dernière édition: 07 Août 2015 à 13:35:30 par Ge0 » Journalisée
Pech
Profil challenge

Classement : 34/54252

Membre Junior
**
Hors ligne Hors ligne
Messages: 83


Voir le profil
« #2 le: 07 Août 2015 à 13:57:54 »

Lorsque l'affichage de la MessageBox est effectif, il n'existe pas d'état actuel puisque ton programme est toujours en exécution pour gérer l'affichage de la MessageBox (la redessiner, traiter les mouvements de ta souris, et j'en passe).

Effectivement, j'avais zappé ce point.
Par contre, pour continuer sur l'exemple d'une MessageBox, toutes ces actions se font dans le code de user32.dll.
En conséquence, est-il possible de savoir où se trouve l'instruction "call MessageBox*" (ie. savoir où on se trouve avant d'entrer dans les DLL du système) ?
C'est probablement gérable (mais j'ai pas de OllyDBG en face de moi pour le confirmer) en regardant la stack pour chercher le saved EIP, mais dans un cas où il y a beaucoup de call successifs ça devient compliqué.
Journalisée
Ge0

Profil challenge

Classement : 16/54252

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #3 le: 07 Août 2015 à 14:56:11 »

Lorsque tu listes le code désassemblé de ton binaire, avec OllyDbg, tu peux faire un clic droit -> "Search For" -> All intermodular Calls" de mémoire.

Sinon, lorsque la MessageBox a "poppé", tu mets le binaire sur pause et tu affiches la pile des appels. Toujours de mémoire.
Journalisée
Pech
Profil challenge

Classement : 34/54252

Membre Junior
**
Hors ligne Hors ligne
Messages: 83


Voir le profil
« #4 le: 08 Août 2015 à 13:42:33 »

Lorsque tu listes le code désassemblé de ton binaire, avec OllyDbg, tu peux faire un clic droit -> "Search For" -> All intermodular Calls" de mémoire.

Sinon, lorsque la MessageBox a "poppé", tu mets le binaire sur pause et tu affiches la pile des appels. Toujours de mémoire.

La liste des "intermodular calls" risque d'être très longue dès que le binaire est un peu "gros" donc c'est pas top.
Par contre, effectivement, mettre en pause et afficher la call stack c'est parfait.
Toutes mes félicitations à ta mémoire
Journalisée
Ge0

Profil challenge

Classement : 16/54252

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #5 le: 08 Août 2015 à 15:19:54 »

Dans la fenêtre des intermodular calls, il suffit de taper "MessageBox" pour filtrer sur l'API éponyme.
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: