Par exemple, nous sommes dans la plate-forme Windows XP, nous avons le programme A sur ollydbg et nous regardons l'instruction x. il a l'adresse 0x11111111 (par exemple). Si je prends le programme A et exécute dans ollydbg sur un autre ordinateur avec la même plate-forme l'instruction x aura la même adresse 0x11111111? Donc ma question est: Est-ce que les adresses mémoire changent chaque fois que le programme A s'exécute? ou sont-ils modifiés dans un autre ordinateur ou une autre plate-forme?adressage de la mémoire
Répondre
Dépend de l'architecture mais vous ne devriez jamais compter sur ces adresses étant les mêmes. Pour des raisons pratiques, la réponse est non.
Pour répondre à votre commentaire, les exploits doivent savoir où ils se trouvent. Une façon simple pour cela est de faire un appel et pop l'adresse de retour, comme ceci:
call test_eip
test_eip:
pop eax
Dans ce cas, vous aurez le pointeur d'instruction en eax
. C'est utile pour déterminer où le code injecté est.
Bien sûr, vous devrez vous rendre au point où cela est exécuté, principalement en utilisant un exploit de débordement de tampon.
Wikipédia - comme toujours - fournit une grande explication et beaucoup de liens à regarder après: http://en.wikipedia.org/wiki/Stack_buffer_overflow
Sur la même version du système d'exploitation avec le même exécutable, vous aurez probablement, mais certainement pas, voir les mêmes adresses de code . Différentes versions d'OS, moins probables.
Ce que vous voyez est une adresse virtuelle. La CPU contient des registres spéciaux qui ne peuvent être vus que par le système d'exploitation; ces registres contrôlent la mise en correspondance de la mémoire virtuelle avec la mémoire physique. Chaque fois que l'OS passe à un processus différent, il reprogramme ces registres de sorte que le programme pense que sa mémoire est toujours au même endroit.
donc un exploit dépend de ces adresses virtuelles.voir mon commentaire ci-dessous. ty pour répondre. – nore
Les binaires Windows PE ne sont pas indépendants de la position, ce qui signifie qu'ils doivent supposer une adresse fixe à partir de laquelle exécuter. Microsoft le fait pour améliorer les performances d'exécution (au prix de pénalités de temps de chargement).
Votre binaire s'exécutera toujours d'où il veut, les DLL peuvent cependant être déplacées si leur adresse preferrered est déjà utilisée par un autre code.
La relocalisation est transparente pour vous, ce qui se passe est que le chargeur binaire Windows modifie votre code et corrige toutes les adresses pour qu'elles fonctionnent dans le nouvel emplacement.
merci beaucoup pour répondre. Alors comment un exploit (basé sur le buffer overflow) peut exécuter un shellcode (n'assumez aucune protection) sur la pile où l'adresse de départ du shellcode doit écraser l'adresse de retour et alors que nous ne pouvons pas compter dessus. comment c'est possible? C'est la chose que je ne peux pas obtenir. – nore
oui mais le problème est: comment test_esp peut être exécuté si je ne redirige pas l'adresse de retour vers quelque chose pour l'exécuter. Je dois d'abord connaître une adresse. et par exemple je ne peux pas "gdb-it" sur le programme vulnérable dans un ordinateur distant. une question générale: comment fonctionnent ces outils d'exploitation bien connus? les avoir une variable constante avec un addres de retour? Je demande trop je sais, mais je pense que c'est l'écart est en baisse ,. J'ai besoin d'un guide pour cela, mais si vous pouvez me répondre, je vais l'apprécier. ty encore – nore