Annonce

Réduire
Aucune annonce.

Assembleur - besoin d'explication

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Assembleur - besoin d'explication

    Voila lors des exams machines a mon ecole, il nous donne des exercices de securité (principalement cracking vu qu'en exam on a pas internet)
    j'ai reussi a le faire en le désassemblant et en modifiant le registre lors de la comparaison, mais il est possible aussi de modifier le code hexa
    donc j'ai ouvert le fichier sous gdb pour reperer l'adresse et la ligne ou il y a la comparaison puis l'instruction JG, pour essayer de modifier cette instruction qui est normalement egale a 0F 8F sur internet... sauf que je ne la trouve pas,
    apparement 0F 8F "cw/cd" c'est justement ce "cw/cd" apparement qui changerai le code et ca se ne serait plus exactement 0F 8F.

    s'auriez vous m'expliquer s'il vous plait ?
    Dernière modification par Tommy-42, 18 janvier 2014, 21h40.

  • #2
    Bonsoir.

    Petite question, es-tu certains que le code comparaison est bien "0F 8F"? Il existe énormément de comparaison en fonction des registres et les combinant. Au passage le "cw/cd" de mémoire n'est pas spécifique à une instruction mais à plusieurs, elles permettent de déterminer une taille mémoire sur laquelle on travaille (cw : 2 octets et cd : 4 octects).

    Voici un lien qui pourra t'en dire plus (http://www.c-jump.com/CIS77/CPU/x86/lecture.html), mais je te conseille de repérer les comparaisons avec des instructions comme "CMP" ou encore les sauts conditionnels ("JE", "JNE", etc...).
    “ Deux choses sont infinies. L'univers et la stupidité humaine ... et je ne suis pas sûr pour l'univers.”
    -Albert Einstein

    Commentaire


    • #3
      Oula je me suis embrouillé dans ma tete ! j'edit, tu peux relire
      Dernière modification par Tommy-42, 18 janvier 2014, 21h40.

      Commentaire


      • #4
        Effectivement, je comprends un peu mieux. Mais pour être sur, tu as désassemblé avec gdb, repérer l'instruction que tu voulais changer, puis via un editeur hexa changer le binaire. Exact?

        Dans ce cas, c'est bizarre que tu ne retrouves pas la séquence. D'ailleurs, je me suis trompé dans le lien, c'est celui-ci que je voulais te donner. Et comme tu peux le voir, l'instruction ne varie pas selon si c'est "cw" ou "cd".

        Je suis un peu exigeant, mais peux-tu faire parvenir le dump de ton binaire, ou la partie qui t'intéresse pour que je vois un peu la situation?
        “ Deux choses sont infinies. L'univers et la stupidité humaine ... et je ne suis pas sûr pour l'univers.”
        -Albert Einstein

        Commentaire


        • #5
          *
          0000d50 6a 00 48 89 e5 48 83 e4 f0 48 8b 7d 08 48 8d 75
          0000d60 10 89 fa 83 c2 01 c1 e2 03 48 01 f2 48 89 d1 eb
          0000d70 04 48 83 c1 08 48 83 39 00 75 f6 48 83 c1 08 e8
          0000d80 7c 00 00 00 89 c7 e8 f9 00 00 00 f4 90 90 90 90
          0000d90 55 48 89 e5 48 89 7d f8 c7 45 f4 00 00 00 00 c7
          0000da0 45 f0 28 00 00 00 eb 47 48 8b 45 f8 8a 00 8b 4d
          0000db0 f4 8b 55 f0 88 45 ef 89 c8 89 55 e8 99 8b 4d e8
          0000dc0 f7 f9 48 63 c2 48 8d 0d 0c 01 00 00 8a 04 08 8a
          0000dd0 4d ef 30 c1 48 8b 45 f8 88 08 8b 45 f4 8d 40 01
          0000de0 89 45 f4 48 8b 45 f8 48 8d 40 01 48 89 45 f8 48
          0000df0 8b 45 f8 8a 00 3c 00 75 af 5d c3 0f 1f 44 00 00
          0000e00 55 48 89 e5 48 83 ec 20 48 c7 45 f0 00 00 00 00
          0000e10 48 c7 45 e8 52 e8 04 54 48 8d 45 f0 48 89 c7 e8
          0000e20 72 00 00 00 48 8b 45 f0 48 8b 4d e8 48 39 c1 7f
          0000e30 1e 48 8d 05 28 02 00 00 48 89 c7 48 89 45 e0 e8
          0000e40 4c ff ff ff 48 8b 7d e0 e8 43 00 00 00 eb 1f 48
          0000e50 8b 45 e8 48 8b 4d f0 29 c8 30 c9 48 8d 15 a6 00
          0000e60 00 00 48 89 d7 89 c6 88 c8 e8 1c 00 00 00 c7 45
          0000e70 f8 00 00 00 00 8b 45 f8 89 45 fc 8b 45 fc 48 83
          0000e80 c4 20 5d c3 ff 25 ae 01 00 00 ff 25 b0 01 00 00
          0000e90 ff 25 b2 01 00 00 ff 25 b4 01 00 00 4c 8d 1d 8d

          0000ea0 01 00 00 41 53 ff 25 7d 01 00 00 90 68 00 00 00
          0000eb0 00 e9 e6 ff ff ff 68 0c 00 00 00 e9 dc ff ff ff
          0000ec0 68 1a 00 00 00 e9 d2 ff ff ff 68 26 00 00 00 e9
          0000ed0 c8 ff ff ff 00 00 00 00 61 73 64 66 67 66 64 64
          0000ee0 73 66 6a 6b 64 73 66 67 73 64 66 67 74 72 79 6c
          0000ef0 6b 73 64 66 6a 68 72 62 72 77 65 3b 6b 72 77 65
          0000f00 00 00 00 00 00 00 00 00 4c 65 20 73 65 63 72 65
          0000f10 74 20 73 27 61 66 66 69 63 68 65 72 61 20 64 61
          0000f20 6e 73 20 25 64 20 73 65 63 6f 6e 64 65 73 2e 0a
          0000f30 00 01 00 00 00 1c 00 00 00 00 00 00 00 1c 00 00
          0000f40 00 00 00 00 00 1c 00 00 00 02 00 00 00 50 0d 00
          0000f50 00 34 00 00 00 34 00 00 00 85 0e 00 00 00 00 00
          0000f60 00 34 00 00 00 03 00 00 00 0c 00 02 00 14 00 02
          0000f70 00 00 00 00 01 40 00 00 00 00 00 00 01 00 00 00
          0000f80 00 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00
          0000f90 01 7a 52 00 01 78 10 01 10 0c 07 08 90 01 00 00
          0000fa0 2c 00 00 00 1c 00 00 00 e8 fd ff ff ff ff ff ff
          0000fb0 6b 00 00 00 00 00 00 00 00 04 01 00 00 00 0e 10
          0000fc0 86 02 04 03 00 00 00 0d 06 00 00 00 00 00 00 00
          0000fd0 2c 00 00 00 4c 00 00 00 28 fe ff ff ff ff ff ff
          0000fe0 84 00 00 00 00 00 00 00 00 04 01 00 00 00 0e 10
          0000ff0 86 02 04 03 00 00 00 0d 06 00 00 00 00 00 00 00
          0001000 00 00 00 00 01 00 00 00 78 10 00 00 01 00 00 00
          0001010 80 10 00 00 01 00 00 00 88 10 00 00 01 00 00 00
          0001020 90 10 00 00 01 00 00 00 00 00 00 00 00 00 00 00
          0001030 00 00 00 00 00 00 00 00 ac 0e 00 00 01 00 00 00
          0001040 b6 0e 00 00 01 00 00 00 c0 0e 00 00 01 00 00 00
          0001050 ca 0e 00 00 01 00 00 00 00 00 00 00 00 00 00 00
          0001060 22 16 10 46 02 1e 05 09 16 08 4a 0e 10 12 0f 13
          0001070 53 02 07 04 1d 1e 1c 00 00 00 00 00 00 00 00 00
          0001080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
          *
          la partie qui nous interesse en gras

          Edit $> 0F 8F = JG en 32bits sauf qu'apparement cest 7F cd en 8 bits
          Dernière modification par Tommy-42, 18 janvier 2014, 23h43.

          Commentaire


          • #6
            Je me rappelle un petit peu des cours de Kromcrack à l'époque.
            Peut-être que ton code est évalué d'une autre manière par gdb, le 7F à la fin de la ligne semble convenir :
            0000e20 72 00 00 00 48 8b 45 f0 48 8b 4d e8 48 39 c1 7f

            7F cb JG rel8 Jump short if greater (ZF=0 and SF=OF)
            EDIT : Oups, j'avais pas vu ton édition. Autant pour moi.
            Dernière modification par Yarflam, 19 janvier 2014, 00h25.
            ~ Yarflam ~

            ❉ L'Univers se dirige vers son ultime perfection ❉

            Commentaire


            • #7
              Yep mais du coup j'aimerai rendre cette ligne inutile pour eviter le jump, comment faire, je dois surement moifier l'opcode 7f mais celle ci demande une adresse en paramettre comment la trouver dans le reste du code ?

              Commentaire


              • #8
                Merci pour le dump, mais je pensais plus au dump assembleur Il est difficile de voir comme ça quels sont les octets d'instruction, de valeur ou d'adressage mémoire. Et vu que je suis exigeant, si possible au format intel (je te mets la commande pour pas abuser ^^'')

                Code:
                objdump -M intel -d <ton_binaire>
                edit : Oups, j'avais pas vu vos réponses ^^''

                mais celle ci demande une adresse en paramètre comment la trouver dans le reste du code
                C'est assez simple, l'instruction "7f" est un saut "court", il ne prend pas en paramètre un adresse mémoire, mais un nombre indiquant où sauté à partir de la prochaine adresse d'instruction.

                Voici un petit exemple :
                804837a: 75 54 jne 80483d0
                Ici le "75" correspond à "jne" et le "54" correspond où sauté après l'instruction : "0x80483d0 - 0x804837a = 0x56" et on enlève les octets d'instruction, ce qui donne "54".
                Dernière modification par xertux, 19 janvier 2014, 13h03.
                “ Deux choses sont infinies. L'univers et la stupidité humaine ... et je ne suis pas sûr pour l'univers.”
                -Albert Einstein

                Commentaire

                Chargement...
                X