IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

instruction db, que fait-elle exactement ?


Sujet :

x86 32-bits / 64-bits Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut instruction db, que fait-elle exactement ?
    Bonjour à tous,

    je viens de lire le précédent sujet qui était très intéressant sur l'apprentissage de l'assembleur. Comme je débute moi aussi, parce que cela est indispensable dans l'écriture de shellcode, je voudrais vous poser une question. Je lis en ce moment l'excellent site de hacking http://www.bases-hacking.org. Je m'entraîne sur des wargame, pour l'instant assez simples. A cet endroit http://www.bases-hacking.org/shellcode.html, après relecture et application, je me suis posé une question, parce que cela n'est pas expliqué et que je ne m'étais pas aperçu de l'aspect tendancieux des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine:  ;label chaine où on arrive après le jump
       call retour  ;On retourne au label retour en mettant l'adresse de la prochaine instruction (cheminshell) dans la pile
       cheminshell db "/bin/sh0aaaabbbb"
    Ainsi, dans eip, on place l'adresse de ce que sera celle de la chaîne "/bin/sh0aaaabbbb". Sauf que, et c'est là que ça me turlupine, le processeur va d'abord exécuter le call, sans jamais exécuter le db, juste en plaçant l'adresse de l'instruction en haut de la pile. Du coup, si dans retour on veut utiliser la chaîne, elle n'est pas encore en mémoire, si ?
    A moins que db "/bin/sh0aaaabbbb" ne soit pas réellement une instruction, enfin c'est très flou pour moi !

    Pouvez-vous m'éclairer ?
    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Tout simplement que db n'est pas une instruction, cela signifie seulement que ça écrit en octet.

    Du coup, si dans retour on veut utiliser la chaîne, elle n'est pas encore en mémoire, si
    On écrivant db tu ne met rien en mémoire tu écrit juste dans la ROM (enfin ici dans ton exécutable), c'est mov qui permet d'écrire en mémoire.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Bonjour,

    « db » signifie « Data Byte », et sert à insérer un ou plusieurs octets de données à l'endroit où on les rencontre, au sein du flot d'instructions compilées. On trouve cette même instruction déclinée en différents formats comme « dw », « dd » et « dq » pour respectivement « Data Word » (16 bits), « Data Double Word » (32 bits) et « Data Quad Word » (64 bits). C'est flagrant quand on examine le produit d'une compilation :

    Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    00000000 66 B8 78 56 34 12                    mov     eax,12345678h
    00000006 CD 80                                int     80h
     
    00000008 45                                   db      45h
     
    00000009 66 BB 08 00 00 80                    mov     ebx,80000008h
    0000000F 66 89 D8                             mov     eax,ebx

    On voit bien qu'à la ligne 4, l'assembleur a directement inséré la valeur indiquée par db plutôt qu'essayer de l'interpréter. Comme il s'agit d'une pseudo-instruction servant à insérer des données, il existe plusieurs manières de les exprimer, notamment sous forme de chaîne de caractères quand c'est à cela qu'elles correspondent.

    Il est relativement fréquent de voir ces données déposées immédiatement avant ou après le code, sans séparation plus nette, quand code et données partagent le même segment mais dans l'exemple concerné (à la limite de la légalité), l'auteur effectue un call sans avoir l'intention de revenir (heureusement parce que cela planterait). En réalité, le sous-programme appelé va dépiler l'adresse de retour et donc obtenir automatiquement l'adresse de la chaîne en question, ce qui lui permet d'éviter avoir à la déterminer à l'avance.

    (Edit: crosspost)

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut
    Merci beaucoup !
    Donc si je comprends bien, si on écrit db (des instructions classiques en hexa), le programme exécutera les instructions en question (ce qui explique comme tu dis que dans l'exemple présenté ça planterait si on exécutait le code après le retour vu qu'on met une chaîne de caractères quelconque).
    Par contre je ne comprends pas le sens que tu donnes de
    (à la limite de la légalité)
    Pourrais-tu préciser ?

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 300
    Par défaut
    (à la limite de la légalité)
    Pourrais-tu préciser ?
    ben tout simplement faire du hacking c'est illégal.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 274
    Par défaut
    Je suis d'accord lorsqu'on fait cela sur un matériel extérieur, mais lorsqu'on est explicitement autorisé à le faire sur un site comme sur newbiecontest avec ses wargame, je ne vois pas ce qu'il y a de malhonnête. Même concernant la démarche, si personne ne s'était penché là dessus on n'aurait pas tant progressé sur la sécurité informatique. Après c'est l'éternel débat, tout interdire pour éviter les dérives, ou permettre une riposte permanente contre des failles utilisées malhonnêtement ou non. Personnellement, ce domaine m'intéresse beaucoup, et je suis dans une école qui me permettra d'approfondir cela.
    En tout cas, tu as sans doute raison concernant la légalité, je ne connais absolument pas les lois qui régissent le hacking, mais je me doute que dès qu'on utilise un matériel extérieur sans autorisation, on est dans l'illégalité. Maintenant l'auteur du site exécutait son shellcode en local, même si je ne suis pas candide au point de penser qu'il n'a jamais utilisé que des ressources locales.

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    C'est-à-dire qu'un certain nombre de lois ont été votées en France depuis les années 2000 jusqu'à aujourd'hui, et même si certaines l'ont été un peu trop rapidement à mon goût, on reste tenu de les respecter. Les éditeurs de sites web, à commencer par le nôtre, ont également l'obligation de veiller au grain.

    Parmi les mesures qui ont été très controversées, il y a notamment l'interdiction de contourner un « moyen technique de protection », ou de mettre directement ou indirectement à disposition du public un dispositif permettant de le faire. Ce texte devait en fait poser les fondements de l'usage à grande échelle des DRM. Seulement, écrit de cette façon, il établit que ce n'est pas l'accès frauduleux à un contenu protégé qu'il sanctionne, mais le fait en soi de neutraliser le dispositif même s'il n'y a rien derrière.

    C'est ce qui c'est passé entre autres avec DeCSS, pour lequel son auteur avait été inculpé puis blanchi, et qui permettait de décoder n'importe quel DVD vidéo puisque la clé avait été récemment cassée. Un utilisateur qui se servait de ce logiciel pour lire un DVD qu'il avait acheté légalement, dans le commerce, et jouir de son bien en utilisant un lecteur PC tout-à-fait conventionnel depuis un système d'exploitation sur lequel aucun logiciel « titulaire » d'une licence n'était disponible était quand même dans l'illégalité. Le plus absurde, c'est qu'il l'était devant la loi française et donc pénalement responsable, mais pas spécialement envers l'éditeur du DVD ni le consortium.

    Tout ceci pour dire, donc, que même en toute bonne foi, il est possible de tomber sous le coup de tels textes et que le cas échéant, les messages devront au minimum être modérés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/08/2007, 17h30
  2. Réponses: 1
    Dernier message: 19/03/2007, 22h15
  3. [Tableaux] Mais que fait cette condition exactement?
    Par pierrot10 dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2006, 12h36
  4. STL: les map et la methode find. que fait-elle?
    Par cokmes dans le forum SL & STL
    Réponses: 6
    Dernier message: 07/11/2005, 08h31
  5. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo