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

C Discussion :

Trouver un mot de passe


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut Trouver un mot de passe
    Bonjours, voilà je fais un programme qui trouve le mot de passe d'un autre programme en essayant toutes les possibilité.
    Le fichier "a cracker" est celui ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <string.h>
     
    int main(int argc, char *argv[]){
       char pass[10] = "abcd"; //Je prend abcd comme mot de passe
       if (strcmp(argv[1],pass)==0){
          return 0;
       }else{
          return -1;
       }
    }
    donc comment je pourrais récupéré a partir d'un programme tierce, le valeure de ce programme renvoyer pas main ??

    Autre question comment faire pour lancer le programme "a cracker" en ligne de commande ?

    ps : Je fais ça pour apprendre, sur un programme que je crée moi même. Donc rien d'illégal


    Merci de vos réponses

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Je ne suis pas sur mais dans ton programme qui va trouver la valeur de retour du programme présenté, tu pourrait le lancer en utilisant une fonction de la famille exec (execlp, execve ...) et vérifier la valeur de retour de ces dernières. Aussi pour utiliser ces fonctions tu aura besoin d'utiliser fork et quand on utilise fork on doit utiliser wait pour attendre la fin de l'execution du fils. Hors la fonction wait prend en paramètre un int dans lequel sera stocké un flag correspondant a la façon dont s'est terminé le fils.

    Bon c'est pas sur que tout cela soit très clair mais tu peux chercher du côté des mans de ces fonctions et voir si ça correspond à ce que tu veux.

  3. #3
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    Pour moi c'est un peut du chinois je suis débutant en c. J'avais déjà éssayer la technique de execl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (exel("Programme","abcd",NULL)==0){
       printf("ok");
       }else{
       printf("erreur");
       }
    Mais ça ne marchais pas.
    errno me renvoi Invalide directorie alors que j'ai vérifier le chemin, il est bon.
    et quand je met le chemin complet du type
    c:\\prog\\Programme.exe

    le programme n'affiche rien du tout

    J'ai regarder vite fais fork(). C'est marqué pour le système Unix. Ca marche aussi sous windows ?
    merci

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    J'ai regarder vite fais fork(). C'est marqué pour le système Unix. Ca marche aussi sous windows ?
    Pas que je sache. Cependant je suis pas expert en programmation windows donc je pourrais pas t'en dire plus.

  5. #5
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonsoir,

    Premièrement, dans ton programme de test, si tu n'entres aucun paramètre, tu auras un segment fault, car tu essayes de lire à un emplacement qui n'existe pas: argv[1].
    Protège ton code en vérifiant ton nombre de paramètres fourni par argc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int argc, char *argv[])
    {   
       char pass[10] = "abcd" ; // Je prend abcd comme mot de passe
       if(argc>1 && strcmp(argv[1],pass)==0)
          return 0 ;
       else
          return -1 ;
    }
    Deuxièmement, pour lire le code de retour d'un programme en ligne de commande, c'est %ERRORLEVEL% sous DOS (essaye echo %ERRORLEVEL%), et sous Linux, c'est $? (echo $?).
    C:\>prog\programme.exe dcba
    C:\>echo %ERRORLEVEL%
    >> Devrait afficher 255 (-1)

    C:\>prog\programme.exe abcd
    C:\>echo %ERRORLEVEL%
    >> Devrait afficher 0
    N'ayant pas Windows/DOS, je ne pourrai pas confirmer la chose.

  6. #6
    Membre éclairé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Par défaut
    Merci de vos réponses

    J'ai trouvé une commande qui semble faire le coup du fork() mais sous windows

    c'est spawnl
    Je l'utilise comme ça spawn(P_Wait, Programme.exe, "abcd", NULL);

    Mais le problème c'est que j'ai une erreur Not enought memory. Je pense qu'il faut que j'alloue plus de mémoire pour la pile, mais quelle est la directive de compilation ?

    Ps : J'utilise Turbo C++ 3.0

    J'ai aussi regarder les errorlevel. ça pourrait être la solution mais comment les inclures dans mon code c ?

  7. #7
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Je pense qu'il faut que j'alloue plus de mémoire pour la pile, mais quelle est la directive de compilation ?
    Attention ne pas confondre pile et tas. Tu n'a pas vraiment de controle des allocations sur la pile. Si ton programme t'indique qu'il n'y a pas assez de mémoire, c'est que tu as peut etre soit un limite de mémoire par programme trop faible soit que tu as crée trop de processus.

  8. #8
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par Elijha Voir le message
    car tu essayes de lire à un emplacement qui n'existe pas: argv[1].
    Bonjour,

    Petite rectification :

    Si argc est supérieur à 0, cela signifie que argv[0] contient le path du programme, et argv[1] jusqu'à argv[argc - 1] contiennent les paramètres, et argv[argc] existe et vaut NULL.

    Donc cela n'arriverait pas même si argc vaut 1, car argv[1] existera tant que argc n'est pas nul.

    Mais tu as eu raison de relever le bogue qui sera retourné non pas par l'accès à argv[1] mais par strcmp qui essaiera de déréférencer un pointeur NULL.

    Cf : draft C99
    argv[argc] shall be a null pointer.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par titeeee Voir le message
    Bonjours, voilà je fais un programme qui trouve le mot de passe d'un autre programme en essayant toutes les possibilité.
    Le fichier "a cracker" est celui ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <string.h>
     
    int main(int argc, char *argv[]){
       char pass[10] = "abcd"; //Je prend abcd comme mot de passe
       if (strcmp(argv[1],pass)==0){
          return 0;
       }else{
          return -1;
       }
    }
    Salut

    Déjà à la base le "mot de passe d'un programme" ça ne veut absolument rien dire. Dans ton exemple t'as juste écrit un programme dont une chaine vaut abcd. Il n'y a aucune notion de "mot de passe" là dedans.
    Un mot de passe c'est un mot permettant de passer une barrière, de débloquer une action. Je ne vois pas en quoi "abcd" débloque quoi que ce soit.

    Citation Envoyé par titeeee Voir le message
    donc comment je pourrais récupéré a partir d'un programme tierce, le valeure de ce programme renvoyer pas main ?
    Si t'es sous Unix, la valeur renvoyée par main (comprise entre 0 et 255) est stockée dans la variable $?. Suffit que ton programme tierce récupère cette valeur.

    Citation Envoyé par titeeee Voir le message
    Autre question comment faire pour lancer le programme "a cracker" en ligne de commande ?
    tu l'appelles !!!

    Citation Envoyé par titeeee Voir le message
    ps : Je fais ça pour apprendre, sur un programme que je crée moi même. Donc rien d'illégal
    On ne te demande rien. La connaissance est libre, c'est ce qu'on en fait qui peut être condamnable. Mais t'inquiète pas, vu la façon dont tu t'exprimes, je ne te vois pas dans l'équipe qui a hacké Bercy...

    Citation Envoyé par titeeee Voir le message
    Merci de vos réponses

    J'ai trouvé une commande qui semble faire le coup du fork() mais sous windows

    c'est spawnl
    Je l'utilise comme ça spawn(P_Wait, Programme.exe, "abcd", NULL);

    Mais le problème c'est que j'ai une erreur Not enought memory. Je pense qu'il faut que j'alloue plus de mémoire pour la pile, mais quelle est la directive de compilation ?
    Faut pas te faire d'illusion. La capacité de ton ordi n'est pas illimitée. Si tu n'as qu'un processus en cours qui utilise 100% de ce qui t'es alloué, ou deux processus qui utilisent chacun 50%, ca prendra le même temps en final.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Trouver le mot de passe (access 2010)
    Par fredfly dans le forum Sécurité
    Réponses: 1
    Dernier message: 28/06/2013, 21h00
  2. [AppleScript] Trouver mon mots de passe d'administrateur
    Par Invité dans le forum AppleScript
    Réponses: 7
    Dernier message: 20/05/2013, 14h00
  3. Réponses: 59
    Dernier message: 10/11/2007, 11h49
  4. trouver login et mot de passe avec root
    Par fantomas261 dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 13/08/2007, 14h57

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