• STATISTIQUES
  • Il y a eu un total de 0 membres et 2444 visiteurs sur le site dans les dernières 24h pour un total de 2 444 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges
    [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[ASM] Prologue Epilogue ou comment récupérer sa stack
26-08-2014, 17h59
Message : #1
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
[ASM] Prologue Epilogue ou comment récupérer sa stack
Bonjour,

Bon je me mets doucement à l'ASM afin de pouvoir joujouter avec les crackme.
Comme souvent la première chose que l'on apprend c'est le fameux 'Hello world' mais il ne s'agirat pas de lui dans ce petit thread.

J'ai dans l'idée de faire un prog ASM qui aura comme fonction de convertir des chaines de char en hexa.

Code :
The Game
#en
\x54\x68\x65\x20\x47\x61\x6d\x65


Le programme se lancera de la sorte:

Code :
./app The Game
Donc il devra récupérer les arguments et les transaltes correctement.

En parmant un peu sur IRC, aaSSffxxx m'a parlé de 'prologue'. Ne connaissant pas j'ai du RTFM un peu.

So en cherchant, il s'avère que ce Proloque n'est qu'en faite une 'nouvelle' stack qui n'effectura aucun chagement sur la stack actuelle. Le prologue est suivi d'un Epilgue qui remet la stack en état après un 'call'

Bref un exemple sera le mieux.

Code ASM :

;on déclare les chaines que nous désirons afficher
section .data
str1: db "Chaine 1", 0xa
str2: db "Chaine 2", 0xa

section .text
global _start

_start:
  ;déclaration d'un nouvelle stack.
  ;celui-ci n'est pas obligatoire, mais je pense (je me trompe peut-être)
  ;qu'il est mieux de commencer avec une stack propre neuve.
  push ebp
  mov ebp, esp
 
  ;alors ici on push sur la pile notre str1
  ;afin de voir si on peut la récupérer après
  ;notre fonction
  push str1

  ; on appel notre fonction pour afficher la str2
  call aff_str2

  ;normalement ici on retrouve notre stack d'avant le call
  ;donc comme nous avons push au préalable str1, elle doit
  ;se trouver au dessus de la stack donc on la pop dans ecx

  pop ecx
  mov eax, 4
  mov ebx, 1
  mov edx, 9
 
  int 80h
  call exit

aff_str2:
  ;le fameux prologue qui nous permet de travailler
  ;avec une nouvelle stack bien fraiche
  push ebp
  mov ebp, esp

  ;on push str2 sur la pile et on la pop dans ecx
  ; j'aurai très bin pu faire un
  ;mov ecx, str2
  ;mais on travaille avec notre stack neuve.
  push str2
  pop ecx
  mov eax, 4
  mov ebx, 1
  mov edx, 9
  int 80h

  ;alors ici si j'ai ben compris, c'est l'épilogue
  ;le leave permet de récupérer l'ancienne stack
  ;et le leave équivaut a
  ;mov esp, ebp
  ;pop ebp
  leave
  ret

exit:
  mov eax, 1
  xor ebx, ebx
  int 80h

 


Et pour montrer que tout ceci fonctionne voici l'output:
Code BASH :

0 ✓ silentd@G3nt00 ~/work/ASM $ nasm -f elf prolog.asm -o prolog.o
0 ✓ silentd@G3nt00 ~/work/ASM $ ld -I /lib/ld-linux.so.2 -m elf_i386 -s -o prolog prolog.o -lc
0 ✓ silentd@G3nt00 ~/work/ASM $ ./prolog
Chaine 2
Chaine 1
 


On s'appercoit donc bien qu'a la sortie de notre 'call aff_str2', nous récupérons notre 'ancienne' stack.

Voici une première expérience.

N'hésitez pas a faire des remarques. Débutant + ou - en ASM, j'ai surement dit/fait des choses pas bien... Smile

Junky,
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (4) -1 (0) Répondre


Messages dans ce sujet
[ASM] Prologue Epilogue ou comment récupérer sa stack - par Junky - 26-08-2014, 17h59

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Comment connaitre le language d'un logiciel ou... ThomasYato 1 159 03-08-2019, 08h08
Dernier message: supersnail
  [C] Comment protéger la mémoire ??? Sh4dows 10 727 01-05-2013, 11h13
Dernier message: Sh4dows
  [C / ASM inline] stack nostdlib ark 2 287 11-12-2012, 18h22
Dernier message: Ark

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut