Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/03/2012, 13h43   #1
Popof
Membre du Club
 
Étudiant
Inscription : juin 2004
Messages : 81
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2004
Messages : 81
Points : 62
Points : 62
Par défaut Access violation during writing

Bonjour,

J'essayes de coder un shellcode en assembleur lancant la calculatrice en utilisant l'appel winexec.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
section text
 
global _main
_main:
	xor 	ecx, ecx
	xor	ebx, ebx
	xor	eax, eax
jmp getcalc
	ret:
	pop	ebx	
	mov	[ebx + 0x1C], cl
 
 
	mov 	eax, 0x7C862AED		; WinExec address
	push	ebx			; file to open
	call	eax
	ret 
 
getcalc:
call ret
calc	db	'c:\windows\system32\calc.exeA'
En déboggant sous ollydbg je recois une erreur de type :

Citation:
Access violation when writing to [00402037]
lors du remplacement du caractère A (qui est bien situé à l'adresse 0x00402037) dans ma chaine (mov [ebx + 0x1C], cl).

Pour information je suis sous Windows XP SP3 et je compile mon programme de la facon suivante:

Citation:
nasm -f win32 -o prog.o prog.asm
gcc -o prog.exe prog.o
Est ce que quelqu'un peut m'expliquer pourquoi cette instruction provoque un access violation et comment éviter que cela se produise ?

En vous remerciant par avance.
Popof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2012, 18h23   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 095
Points : 11 095
Bonjour,
  • Ton texte est considéré ici comme faisant partie du code et appartient donc au même segment, qui est en lecture seule ;
  • Appeler « ret » une étiquette est une mauvaise idée. On la confond avec l'instruction homonyme ;
  • Ton « call ret » semble fonctionner et appelle bien la procédure fautive mais lorsque celle-ci va se finir, tu va atterrir dans le vide : ta chaîne de caractères suit immédiatement ton instruction CALL et va être considérée comme du code par le micro-processeur, qui ne manquera donc pas de planter.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h39.


 
 
 
 
Partenaires

Hébergement Web