Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    juin 2004
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 81
    Points : 65
    Points
    65

    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 :

    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:

    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.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : septembre 2007
    Messages : 5 480
    Points : 14 012
    Points
    14 012

    Par défaut

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •