begin process at 2012 02 08 09:50:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > INTERNET PASSWORD REMEMBER

INTERNET PASSWORD REMEMBER


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :19/08/2004 Date de mise à jour :24/03/2006 09:02:24 Vu / téléchargé :4 032 / 221

Auteur : psyphi

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Salut all, bon ca y est j'ai finis mon premier logiciel après un travail acharné, il s'agit d'un gestionnaire de compte de forum ou de site internet, les informations sont rentrées en mode texte et l'utilisateur les a ensuite en html. Le programme à été écrit en C et fonctionne pour des OS de type Unix ou Win32 (donc très portable  ). Les sources sont incluses ainsi qu'une aide, le prog est donc assez complet.

Source

  • #include <stdio.h>
  • #include <time.h> /*Pour la fonction time, nécessaire à l'initialisation de l'aléatoire*/
  • #include <stdlib.h> /*Pour les fonctions aléatoires comme srand*/
  • #include <string.h> /*Pour les fonctions sur les chaines de caractères comme strlen*/
  • #define MAX 61
  • /* Fonction contre le dépassement de mémoire (buffer overflow) */
  • short bo(int crt_max)
  • {
  • short erreur=0;
  • if(crt_max>=MAX)
  • {
  • erreur=1;
  • }
  • return erreur;
  • }
  • /* Fonction principale */
  • int main()
  • {
  • /* Initialisation des variables */
  • FILE *fp;
  • int i=0;
  • float hasard;
  • int tire=0;
  • int longueur;
  • int vchoix;
  • char ascii;
  • char mdp[MAX];
  • char nomfichier[18]="gestionnaire.html";
  • char adressesite[MAX];
  • char nomsite[MAX];
  • char pseudo[MAX];
  • int nbr_crt;
  • time_t nb_seconde, temps;
  • puts("--==[[Internet Password Remember]]==--");
  • /* Récupère l'adresse du site, moins de x caractère */
  • while(1){
  • printf("Entrer l'adresse du site (%d caracteres max):",MAX-1);
  • gets(adressesite);
  • if(bo(strlen(adressesite))!=0 ){
  • puts("OverFlowed !");
  • }
  • else{
  • break;
  • }
  • }
  • /* Récupère le nom du site, moins de x caractère */
  • while(1){
  • printf("Entrer le nom du site (%d caracteres max):",MAX-1);
  • gets(nomsite);
  • if(bo(strlen(nomsite))!=0 ){
  • puts("OverFlowed !");
  • }
  • else{
  • break;
  • }
  • }
  • /* Récupère nom d'utilisateur du site, moins de x caractère */
  • while(1){
  • printf("Entrer le pseudo pour le site (%d caracteres max):",MAX-1);
  • gets(pseudo);
  • if(bo(strlen(pseudo))!=0 ){
  • puts("overflowed");
  • }
  • else{
  • break;
  • }
  • }
  • /* Récupère une réponse 1=Oui, 0=Non pour générer un mdp */
  • puts("Voulez vous generer le password ?");
  • puts("Oui taper 1, Non taper 0.");
  • scanf("%d",&vchoix);
  • /* vchoix = 1 */
  • if(vchoix==1){
  • while(1){
  • printf("Longueur du mot de passe? (%d caracteres max):",MAX-1);
  • scanf("%d",&longueur);
  • if(bo(longueur)!=0){
  • puts("OverFlowed !");
  • }
  • else{
  • break;
  • }
  • }
  • /*Récupération du nombre de seconde écoulées depuis le 01/01/1970 à 00h00min00s*/
  • nb_seconde=time(&temps);
  • /*Initialisation de la fonction aléatoire*/
  • srand(nb_seconde);
  • for(i=0;i<longueur;i++){
  • hasard=rand();//On tire un réel au hasard entre 0 et 2 147 483 647
  • tire=((hasard/RAND_MAX)*100)+33;//On transforme ce réel en entier compris entre 33 et 133, Les caractères affichable de la table ascii allant de 33 à 126.
  • //Si tire supérieur ou égal à 127, on le rejete et on affiche des valeurs nulles en retour.
  • if (tire>=127){
  • /*puts("Sup à 126");*/
  • i--;
  • tire=0;
  • ascii='0';
  • }
  • else{
  • ascii=tire;
  • mdp[i]=ascii;
  • }
  • /*printf("Tirage %d: %d\nASCII: %c\n ----------\n",i,tire,ascii);*/
  • }
  • printf("Mot de passe genere: %s\n", mdp);
  • }
  • else{
  • /* Récupère le mot de passe du site, moins de x caractère */
  • while(1){
  • printf("Entrer un mot de passe pour le site (%d caracteres max):",MAX-1);
  • scanf("%s",&mdp);
  • if(bo(strlen(mdp))!=0 ){
  • puts("overflowed");
  • }
  • else{
  • break;
  • }
  • }
  • }
  • /* Inscription des données dans le fichier gestionnaire.html */
  • // On ouvre le fichier en ajout, on y écrit à la fin et on ferme le fichier.
  • fp=fopen(nomfichier,"a");
  • fprintf(fp,"<div id='pass'><a href='%s' target='blank'>%s</a> :",adressesite,nomsite);
  • fprintf(fp," %s :",pseudo);
  • fprintf(fp," %s</div>\n",mdp);
  • fclose(fp);
  • printf("Le fichier a ete correctement genere (fichier: %s)", nomfichier);
  • puts("Merci d'avoir utilise Internet Password Remember");
  • puts("--==[[Presser une touche pour quitter]]==--");
  • getchar();
  • getc(stdin);
  • return(0);
  • }
#include <stdio.h>
#include <time.h> /*Pour la fonction time, nécessaire à l'initialisation de l'aléatoire*/
#include <stdlib.h> /*Pour les fonctions aléatoires comme srand*/
#include <string.h> /*Pour les fonctions sur les chaines de caractères comme strlen*/

#define MAX 61


/* Fonction contre le dépassement de mémoire (buffer overflow) */
short bo(int crt_max)
{
    short erreur=0;
if(crt_max>=MAX)
{
    erreur=1;
}
return erreur;
}

/* Fonction principale */
int main()
{
/* Initialisation des variables */
FILE *fp;
int i=0;
float hasard;
int tire=0;
int longueur;
int vchoix;
char ascii;
char mdp[MAX];
char nomfichier[18]="gestionnaire.html";
char adressesite[MAX];
char nomsite[MAX];
char pseudo[MAX];
int nbr_crt;
time_t nb_seconde, temps;
puts("--==[[Internet Password Remember]]==--");


    /* Récupère l'adresse du site, moins de x caractère */
    while(1){
        printf("Entrer l'adresse du site (%d caracteres max):",MAX-1);
        gets(adressesite);
        if(bo(strlen(adressesite))!=0 ){
puts("OverFlowed !");
        }
        else{
            break;     
        }
    }
    /* Récupère le nom du site, moins de x caractère */
    while(1){
        printf("Entrer le nom du site (%d caracteres max):",MAX-1);
        gets(nomsite);
        if(bo(strlen(nomsite))!=0 ){
puts("OverFlowed !");
        }
        else{
            break;     
        }
    }

    /* Récupère nom d'utilisateur du site, moins de x caractère */
    while(1){
        printf("Entrer le pseudo pour le site (%d caracteres max):",MAX-1);
    gets(pseudo);
        if(bo(strlen(pseudo))!=0 ){
puts("overflowed");
        }
        else{
            break;     
        }
    }
    
    /* Récupère une réponse 1=Oui, 0=Non pour générer un mdp */
puts("Voulez vous generer le password ?");
    puts("Oui taper 1, Non taper 0.");
scanf("%d",&vchoix);

    /* vchoix = 1 */
    if(vchoix==1){
while(1){
     printf("Longueur du mot de passe? (%d caracteres max):",MAX-1);
     scanf("%d",&longueur);
     if(bo(longueur)!=0){
puts("OverFlowed !");
}
else{
break; 
}
}
     /*Récupération du nombre de seconde écoulées depuis le 01/01/1970 à 00h00min00s*/
     nb_seconde=time(&temps);
     /*Initialisation de la fonction aléatoire*/
     srand(nb_seconde);
    for(i=0;i<longueur;i++){
     hasard=rand();//On tire un réel au hasard entre 0 et 2 147 483 647
     tire=((hasard/RAND_MAX)*100)+33;//On transforme ce réel en entier compris entre 33 et 133, Les caractères affichable de la table ascii allant de 33 à 126.
//Si tire supérieur ou égal à 127, on le rejete et on affiche des valeurs nulles en retour.
     if (tire>=127){
     /*puts("Sup à 126");*/
     i--;
     tire=0;
     ascii='0';
     }
     else{
     ascii=tire;
     mdp[i]=ascii;
     }
     /*printf("Tirage %d: %d\nASCII: %c\n ----------\n",i,tire,ascii);*/
     }
     printf("Mot de passe genere: %s\n", mdp);
}
    else{
    /* Récupère le mot de passe du site, moins de x caractère */
    while(1){
        printf("Entrer un mot de passe pour le site (%d caracteres max):",MAX-1);
     scanf("%s",&mdp);
        if(bo(strlen(mdp))!=0 ){
puts("overflowed");
        }
        else{
            break;     
        }
    }
    }
/* Inscription des données dans le fichier gestionnaire.html */

// On ouvre le fichier en ajout, on y écrit à la fin et on ferme le fichier.
fp=fopen(nomfichier,"a");
fprintf(fp,"<div id='pass'><a href='%s' target='blank'>%s</a> :",adressesite,nomsite);
fprintf(fp," %s :",pseudo);
fprintf(fp," %s</div>\n",mdp);
fclose(fp);
printf("Le fichier a ete correctement genere (fichier: %s)", nomfichier);
puts("Merci d'avoir utilise Internet Password Remember");
puts("--==[[Presser une touche pour quitter]]==--");
getchar();
getc(stdin);
return(0);
} 

 Conclusion

La version complète et à jour disponible ici: http://membres.lycos.fr/psyphi1st/mes_progs/IPR.ta r.gz

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

24 mars 2006 09:02:26 :
Mise à jour du code suite au réflexion de phonixsprider

 Sources du même auteur

Source avec Zip Source avec une capture [C/WINPCAP]SNIFFER TCP(ANALYSEUR DE TRAMES) POUR WINDOWS
Source avec Zip Source avec une capture [C/WIN32] PROXY AVEC THREAD
Source avec Zip Source avec une capture [C++/QT3] GET IP
Source avec Zip Source avec une capture CHIFFREMENT (CRYPATGE/DÉCRYPTAGE/BRUTE FORCE) SELON LA MÉTHO...

 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

Commentaires et avis

Commentaire de Kirua le 20/08/2004 00:59:17

les mots de passe sont stockés en dur sur le disque dur sans cryptage?

Commentaire de psyphi le 21/08/2004 14:31:53

Oui et c'est effectivement un problème, en effet j'avais pensé à une protection javascript de la page html génêré mais pour moi du code Javasript c'est comme si y avait aucune protection et j'aurai sûrement réçu des commentaires moqueur. Je pourrais refaire un autre programme en C pour la protection, mais à chaque ouverture de la page web, l'utilisateur devra lancé ce programme ce qui peut être contraignant en soit.  Mais je réfléchis à un programme de cryptage (c dans mes projets) je l'incluerai sûrement ensuite dans ce programme pour crypter les mots de passes.
Merci de ta remarque. Si vous avez des idées n'hésiter pas je suis toutes ouïes(ca s'ecrit comme ça? lol).

Commentaire de Kirua le 21/08/2004 17:32:46

crypte le fichier de sortie en bête "xor" (tu connais? c'est un cryptage à clef très basique mais dur à casser si la clef est assez grande, sauf bien sûr si tu peux deviner que le fichier commence par "<HTML>", auquel cas ce sera vite cassé, :p)).

tu fais un simple programme en C/C++ qui prend en paramètre le nom du fichier et te ressors les informations en décrpyté, mais pour cela demande la clef de décryptage (ah oui... faut pas crypter la clef, puisque le principe, c'est que toutes les clefs de décryptage seront acceptées... mais si c'est pas la bonne ça donne un résultat incohérent!).

c'est pas clair ce que je dis, si tu veux une explication, je suis pas contre de te la donner, t'as qu'à faire un tour sur www.coder-studio.com, va sur le forum section C/C++ et là je te ferai un laius complet ;) en prime t'auras les avis de pas mal d'autres gens qui visitent régulièrement. dsl pr le petit coup de pub, mais on est juste entre nous ;)

Commentaire de psyphi le 21/08/2004 18:10:09

Oui le XOR je connais, par contre oui j'ai pas tout compris a ton message lol, enfin bon le prog sera amené à s'améliorer c mon premier en C. Pour le coup de pub pas de problème ;-).

Commentaire de jean84 le 26/08/2004 10:10:56

En fait tu pourrais demander a l'utilisateur d'entrer une clef et en ensuite tu le crypterai avec xor qui est un bon moyen de crypter si tu as une clef assez forte (comme l'a fait remarquer kirua). Je pense que ce qu'il a voulu dire c'est que l'avantage du xor c'est que n'importe qui peut lire le fichier mais si tu n'as pas la clef, le contenu sera incoherent. Pour l'exemple, y a le magazine LOGIN qui dans son  hors serie de juillet/aout  (apprentissage du c) propose un code mettant en scene le cryptage par xor. Si tu n'as pas le bouquin je peut t'envoyer le source ! @++

Commentaire de phonixsprider le 13/03/2006 19:53:39

Le programme en lui même est pas mal cependant le codage: aïe. Je ne veux en aucun cas être désagréable mais il est à noté que tu utilises des do, while qui pourraient simplement être remplacé par des "if" et "else". Exemple et explications:

lignes: 64 à 67
---------------------------
do{
  printf("Entrer l'adresse du site, %d caracteres max:",MAX-1);
  gets(adressesite);
}
while(bo(strlen(adressesite))!=0);
----------------------------

Ici, tu effectues une boucle infinie car while ne s'arrête jamais si plus de 60 caractères son entrée. Ce qui ne va même pas afficher ton message de dépassement de tampon sous windows (protection contre les boucles infinies dans SP2, je crois !). Or il suffirait d'implémenter un petit if:

-------------------------------
    if(bo(strlen(adressesite))!=0){
        puts("Programme OverFlowed !!! ");
        exit(0);
    }
-------------------------------

en gros si il y a un dépassement de tampon alors on affiche un message et on quitte le programme simplement. Il ne faut pas oublié de viré le message qui ne sert à rien:

ligne 39:
-------------------------------
puts("Erreur depassement du nombre de caracteres max. Recommencer.");
-------------------------------

Voilà, le programme utilisera moins de ressources et aussi plus clair. Cependant, il faudra l'exécuter en DOS sous windows et dans la ligne de commande pour les autres OS car la fonction exit(0); ferme la fenêtre sans afficher le message.

Phonix Sprider !

Commentaire de phonixsprider le 13/03/2006 20:14:14

Pour redemander à l'utilisateur d'introduire du texte le while doit être placé avant le gets:

------------------------
    while(1){
        printf("Entrer l'adresse du site, %d caracteres max:",MAX-1);
        gets(adressesite);  
        if(bo(strlen(adressesite))!=0 ){
            puts("overflowed");
        }
        else{
            break;    
        }
    }
------------------------
C'est une boucle infinie qui ne s'arrête que quand l'utilisateur à entré une adresse qui fait moins de 60 caractère ;)
Phonix Sprider

Commentaire de phonixsprider le 13/03/2006 20:54:54

Vlà ce que je propose:
---------------------------
/***************************************************************************
*      Internet Password Remember        Copyright (C) 2004 by Psyphi     *
*                                                                         *
*          psyphi1st@hotmail.com           psy.phi@laposte.net            *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU General Public License     *
*   along with this program; if not, write to the                         *
*   Free Software Foundation, Inc.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/
/* Examined and corrected by Morgan06        morgan06detoi06@hotmail.com  */
/*          Team Hacktinium: your expert in computer security             */
/*          http://www.hacktinium.com                                     */
/* Corrected by Phonix Sprider from hacktinium.com. eMail:    */
/* phonixsprider@hacktinium.com       */
#include <stdio.h>
#include <time.h> /*Pour la fonction time, nécessaire à l'initialisation de l'aléatoire*/
#include <stdlib.h> /*Pour les fonctions aléatoires comme srand*/
#include <string.h> /*Pour les fonctions sur les chaines de caractères comme strlen*/

#define MAX 61


/* Fonction contre le dépassement de mémoire (buffer overflow) */
short bo(int crt_max)
{
    short erreur=0;
if(crt_max>=MAX)
{
    erreur=1;
}
return erreur;
}

/* Fonction principale */
int main()
{
/* Initialisation des variables */
FILE *fp;
int i=0;
float hasard;
int tire=0;
int longueur;
int vchoix;
char ascii;
char mdp[MAX];
char nomfichier[18]="gestionnaire.html";
char adressesite[MAX];
char nomsite[MAX];
char pseudo[MAX];
int nbr_crt;
time_t nb_seconde, temps;
puts("--==[[Internet Password Remember]]==--");


    /* Récupère l'adresse du site, moins de x caractère */
    while(1){
        printf("Entrer l'adresse du site (%d caracteres max):",MAX-1);
        gets(adressesite);
        if(bo(strlen(adressesite))!=0 ){
puts("OverFlowed !");
        }
        else{
            break;    
        }
    }
    /* Récupère le nom du site, moins de x caractère */
    while(1){
        printf("Entrer le nom du site (%d caracteres max):",MAX-1);
        gets(nomsite);
        if(bo(strlen(nomsite))!=0 ){
puts("OverFlowed !");
        }
        else{
            break;    
        }
    }

    /* Récupère nom d'utilisateur du site, moins de x caractère */
    while(1){
        printf("Entrer le pseudo pour le site (%d caracteres max):",MAX-1);
    gets(pseudo);
        if(bo(strlen(pseudo))!=0 ){
puts("overflowed");
        }
        else{
            break;    
        }
    }
    
    /* Récupère une réponse 1=Oui, 0=Non pour générer un mdp */
puts("Voulez vous generer le password ?");
    puts("Oui taper 1, Non taper 0.");
scanf("%d",&vchoix);

    /* vchoix = 1 */
    if(vchoix==1){
while(1){
     printf("Longueur du mot de passe? (%d caracteres max):",MAX-1);
     scanf("%d",&longueur);
     if(bo(longueur)!=0){
puts("OverFlowed !");
}
else{
break;
}
}
     /*Récupération du nombre de seconde écoulées depuis le 01/01/1970 à 00h00min00s*/
     nb_seconde=time(&temps);
     /*Initialisation de la fonction aléatoire*/
     srand(nb_seconde);
    for(i=0;i<longueur;i++){
     hasard=rand();//On tire un réel au hasard entre 0 et 2 147 483 647
     tire=((hasard/RAND_MAX)*100)+33;//On transforme ce réel en entier compris entre 33 et 133, Les caractères affichable de la table ascii allant de 33 à 126.
//Si tire supérieur ou égal à 127, on le rejete et on affiche des valeurs nulles en retour.
     if (tire>=127){
     /*puts("Sup à 126");*/
     i--;
     tire=0;
     ascii='0';
     }
     else{
     ascii=tire;
     mdp[i]=ascii;
     }
     /*printf("Tirage %d: %d\nASCII: %c\n ----------\n",i,tire,ascii);*/
     }
     printf("Mot de passe genere: %s\n", mdp);
}
    else{
    /* Récupère le mot de passe du site, moins de x caractère */
    while(1){
        printf("Entrer un mot de passe pour le site (%d caracteres max):",MAX-1);
     scanf("%s",&mdp);
        if(bo(strlen(mdp))!=0 ){
puts("overflowed");
        }
        else{
            break;    
        }
    }
    }
/* Inscription des données dans le fichier gestionnaire.html */

// On ouvre le fichier en ajout, on y écrit à la fin et on ferme le fichier.
fp=fopen(nomfichier,"a");
fprintf(fp,"<div id='pass'><a href='%s' target='blank'>%s</a> :",adressesite,nomsite);
fprintf(fp," %s :",pseudo);
fprintf(fp," %s</div>\n",mdp);
fclose(fp);
printf("Le fichier a ete correctement genere (fichier: %s)", nomfichier);
puts("Merci d'avoir utilise Internet Password Remember");
puts("--==[[Presser une touche pour quitter]]==--");
getchar();
getc(stdin);
return(0);
}

Commentaire de psyphi le 24/03/2006 09:00:18

Lol phonix t'arrive deux ans après. Oui c'est sur que le code ce n'est pas ca c'etait mon premier vrai programme en C.
Mais j'ai jamais eu l'envie de le corriger et de le mettre à jour.
Mais puisque tu l'as fait pour moi je vais mettre ta source en remplacement de la précédente.
;-)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales