2017-04-30 3 views
0

J'ai un fichier exécutable qui semble déclencher un débordement de la pile. Je suis presque sûr de comprendre la plupart de ce qui se passe, mais tout ce que je dois savoir, c'est où le tampon est stocké dans la mémoire. Si je connaissais son adresse absolue, ou relative à EBP ou à tout autre registre, je serais en or.Ida: Comment localiser une variable tampon dans la mémoire

Je sais que Ida garde une trace des chaînes et des fonctions, mais est-il possible de trouver un tampon ou des variables similaires? Y a-t-il au moins une façon d'obtenir une idée?

J'ai été en mesure de fournir des arguments au programme, mais je n'ai aucune idée de la façon dont ces arguments se rapportent à la mémoire tampon, voire pas du tout. Encore une fois, il ne serait pas difficile de savoir où vont ces variables. Je suis assez nouveau à Ida, donc je sens que cela ne devrait pas être si difficile à accomplir, je manque juste un élément d'information clé.

Merci, Nathan

+0

Pourquoi cela a-t-il été réduit? – NirIzr

+0

Je ne sais vraiment pas, et franchement je voudrais vraiment une réponse – Nathan

Répondre

0

Eh bien, comme personne ne répond à ma question, je pourrais aussi bien donner ce que j'ai découvert comme le meilleur possible répondre moi-même.

1) Comprendre comment écrit l'assemblage à la mémoire

Dans les processeurs x86, une instruction d'assemblage pour écrire un octet à la mémoire ressemble à quelque chose comme ceci:

MOV Ptr Byte [ECX], EAX 

Dans cet exemple, le contenu du registre EAX est écrit dans l'emplacement de mémoire spécifié par le contenu de ECX. En utilisant Immunity, définissez un point d'arrêt à ce type d'instruction. Dès que le programme atteint cette ligne, par exemple, vérifiez le contenu d'ECX et recherchez le vidage de la mémoire à cet emplacement. Cela devrait être l'endroit où le tampon est écrit.

2) Comprendre comment la mémoire est stockée

Dans la fenêtre de la mémoire de l'immunité, chaque vidage de la mémoire correspond à l'espace alloué créé pendant l'exécution. Si ASLR est désactivé (vous pouvez le désactiver avec force en utilisant EMET), vous pouvez simplement exécuter le programme, puis rechercher la mémoire après le fait. Si ASLR est activé, essayez de trouver le type de mémoire dans lequel il est écrit à chaque réexécution, puis essayez de déduire l'image mémoire dans laquelle il est écrit. Après avoir effectué votre déduction, définissez un point d'arrêt dans le vidage de la mémoire, configuré pour être déclenché dès que quelque chose est écrit ou lu.

Il vous aurait tué pour dire autant de mots que cela? hm?