Problème_Compilation_Programme sC_cryptographie.
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Problème_Compilation_Programme sC_cryptographie.



  1. #1
    invitefbae583f

    Problème_Compilation_Programme sC_cryptographie.


    ------

    Bonjour a tous ici, voici mon problème, une petite description d'abords :

    en 2002, Serge Vaudenay, de l'école polytechnique fédérale de Lausanne ,a démontré comment un attaquant sur le Web ayant intercepté une suite de blocs chiffrés en mode CBC avec un système quelconque, peut ensuite trouver le message en clair.

    Le but : Simuler cette attaque avec des programmes écrits en C , téléchargeables depuis l'URL :

    http://www2.lifl.fr/~wegrzyno/portai...P2/tp2004.html


    Je souhaite faire l'implémentation des ces codes ( je vais les mettre ci-dessous si quelqu'un est intéressé à m'aider..) en Linux ubuntu 10.04 , compilateur GCC . J'ai fait des modifications pour les codes pour qu'ils marchent , j'ai réussi à compiler les "oracle.c"," oracle.h"," tools.c" et " tools.h" mais le problème est que le programme "attaque.c" ne se compile pas, il existe des erreurs dans le code relatifs aux pointeurs , si quelqu'un parvient à compiler le code "attaque.c" j'en serais très reconnaissant :

    Voici les codes :
    --------------------------------------------------------------------------------------------------------------
    Code:
    //tools.c
    #include<stdio.h>
    #include<stdlib.h>
    void affiche_bloc(unsigned char *bloc, int taille)
    {
    int i;
    for (i=0; i<taille; i++)
    printf("%02x",bloc[i]);
    /* printf("\n"); */
    } int main(void)
    {}
    -----------------------------------------------------------------------------------------------------------------
    //oracle.c
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #define PORT 2001
    #define TRUE 1
    #define FALSE 0
    #define SIZE_BLOCK 8
    unsigned char bonjour[1] = {0x01};
    unsigned char aurevoir[1] = {0x00};
    int addrlen;
    struct sockaddr_in service ; /* pour coder l'adresse du service */
    int sockd;
    int ouvre_oracle(char *hote){
    sockd = socket(PF_INET,SOCK_STREAM,0) ;
    if(sockd==-1){
    perror("Erreur lors de la cr\\'eation d'une socket\n") ;
    return -1 ;
    }
    service.sin_family = AF_INET ; /* c'est la seule famille qui existe
    pour l'instant */
    service.sin_port = htons(PORT) ; /* Apr\`es avoir v\'erifier dans le
    fichier /etc/services que ce num\'ero
    est libre */
    struct hostent *infohote = gethostbyname(hote) ;
    if(infohote==NULL){
    perror("Impossible de r\\'ecup\\'erer un num\\'ero IP");
    return -1 ;
    }
    memcpy(&service.sin_addr, infohote->h_addr_list[0],infohote->h_length) ;
    addrlen = sizeof(service) ;
    int res = connect(sockd, (struct sockaddr *) &service, sizeof(service)) ;
    if(res<0){
    perror("Erreur lors de l'adressage de la prise") ;
    close(sockd) ;
    return -1 ;
    }
    unsigned char tmp ;
    /* recevoir confirmation connexion */
    recvfrom(sockd,&tmp,1, 0, (struct sockaddr *) &service, &addrlen);
    if(tmp!=TRUE){
    return 2 ;
    }
    return 0;
    } int ferme_oracle(void)
    {
    sendto(sockd, aurevoir, sizeof(char), 0, (struct sockaddr *) &service, addrlen);
    return close(sockd) ;
    } int interroge_oracle(char *
    msg){
    unsigned char tmp;
    sendto(sockd, bonjour, sizeof(char), 0, (struct sockaddr *) &service, addrlen);
    sendto(sockd, msg, 2*SIZE_BLOCK, 0, (struct sockaddr *) &service, addrlen);
    recvfrom(sockd,&tmp, sizeof(char), 0, (struct sockaddr *) &service, &addrlen);
    /* la reponse du serveur
    #define TRUE 1
    #define FALSE 0
    dans tmp
    */
    return (int) tmp ;
    } int main()
    {}
    --------------------------------------------------------------------------------------------------------------------------
    
    //attaque.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "tools.h"
    #include "oracle.h"
    //#include "oracle.h.gch"
    //#include "tools.h.gch"
    #define SIZE_BLOCK 64
    unsigned char bloc_chiffre[SIZE_BLOCK] =
    {
    // completer ici avec un bloc de 64 bits d�crit en hexa
    // par exemple :
    // 0x24, 0x46, 0x18, 0x96, 0xFA, 0x2E, 0x40, 0xC1
    0x86, 0xFF, 0x28, 0x76, 0x1E, 0x87, 0x5E, 0x5E
    };
    int main(void)
    {
    int i,j,reponse_oracle = 0 ;
    printf("%s\n",ORACLE);
    if (ouvre_oracle(ORACLE)) { /* contact avec l'oracle */
    return EXIT_FAILURE;
    }
    unsigned char question[2*SIZE_BLOCK] =
    {
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
    };
    printf("Bloc alea : ");
    affiche_bloc(question,SIZE_BLOCK);
    printf("\n") ;
    printf("Bloc chiffre : ");
    affiche_bloc(bloc_chiffre,SIZE_BLOCK);
    printf("\n") ;
    memmove(question+SIZE_BLOCK*sizeof(char),bloc_chiffre,SIZE_BLOCK*sizeof(char));
    for(j=0 ; j<256 && reponse_oracle !=1 ;j++){
    question[SIZE_BLOCK-sizeof(char)] = j ;
    affiche_bloc(question,SIZE_BLOCK);
    reponse_oracle = interroge_oracle(question) ;
    printf("| %d |",reponse_oracle);
    printf("\n") ;
    }
    ferme_oracle(); /* cloture de la connexion */
    return EXIT_SUCCESS;}
    -----------------------------------------------------------------------------------------------------------------
    
    //tools.h
    void affiche_bloc(unsigned char *, int) ;
    ----------------------------------------------------------------------------------------------------------------
    //oracle.h
    #define ORACLE "localhost"
    int ouvre_oracle(char *hote);
    int ferme_oracle(void);
    int interroge_oracle(char *msg);
    ---------------------------------------------------------------------------------------------------------------


    MERCI D'AVANCE.

    -----
    Dernière modification par yoda1234 ; 06/01/2012 à 03h58.

  2. #2
    invite4492c379

    Re : Problème_Compilation_Programme sC_cryptographie.

    Hello,

    en récupérant les fichiers sur le site : tout est ok, compilation sans problèmes.

    Tu as un main supplémentaire à la fin de ta version de oracle.c ??? pourquoi ?
    Tu as un main supplémentaire à la fin de ta version de tools.c ??? pourquoi ?
    Tu as également changé SIZE_BLOCK de 8 à 64 dans attaque.c, pourquoi ?

    Quel est ton environnement de programmation ? Peux-tu être plus précis quant aux erreurs que le compilateur te donne (un copier/coller fait l'affaire) ?

  3. #3
    invitefbae583f

    Re : Problème_Compilation_Programme sC_cryptographie.

    Bonjour photon57 , et merci pour donner le temps à tester les codes ,

    Explication :
    j'ai travaillé sur LINUX ubuntu 10.04, le compilateur est gcc 4 :
    lors du premier essais, le compilateur reponda :

    "undefined reference to main function" pour oracle.c et tools.c
    c'est pourquoi j'ai ajouté les deux functions vides , après j'ai compilé :

    $gcc oracle.c -o oracle
    $gcc tools.h -o tools

    c'etait bien passé aussi pour

    $gcc tools.h
    $gcc oracle.h

    mais pour attaque.c
    il donne plus de 100 lignes d'erreur, si j'ajoute :
    #include "tools.h.gch"
    #include "oracle.h.gch"

    et il donne "undefined function ouvre-oracle" undifined..... si j'enlève les deux directives .
    Tous les fichiers sont dans le même répertoire,
    Concernant la taille de SIZE_BLOCK ,c'etait un test c'est tout .

    Après j'ai essayé DevC++ 4.9.9.2 sous Windows, celui la donne des erreus du type "Undefined" , l'explication est que ce compilateur n'est pas mis à jour ..


    Alors je vais essayer un certain "WATCOM" .

    sinon puis je savoir quel compilateur avez vous utilisé, microsoft VISUAL non?

    merci encore photon57


  4. #4
    invite4492c379

    Re : Problème_Compilation_Programme sC_cryptographie.

    OK ... la résolution de ton problème est simple. Juste un mot sur ce que ça veut dire compiler, un petit dessin rapide :

    Code:
    fichier source 1 ==compilation==> fichier objet 1 ==|
    fichier source 2 ==compilation==> fichier objet 2 ==|=assemblage==> fichier exécutable
    fichier source 3 ==compilation==> fichier objet 3 ==|
    Tu as plusieurs fichiers sources et tu veux créer un exécutable avec. Il faut passer par la création de fichiers objets qui une fois assemblés créeront l'exécutable. Pour créer un fichier objet la commande est :
    Code:
    gcc -c fichier_source.c
    pour assembler plusieurs fichiers objets la commande est :
    Code:
    gcc -o executable fichier_objet1 fichier_objet2 fichier_objet3
    Dans ton cas :
    Code:
    gcc -c attaque.c
    gcc -c tools.c
    gcc -c oracle.c
    gcc -o truc attaque.o tools.o oracle.o
    Il y a plus rapide :
    Code:
    gcc -o truc attaque.c tools.c oracle.c
    Je ne peux que te conseiller de te familiariser avec C avant de commencer à bidouiller.
    Lis de la doc sur gcc, makefile ... et évidemment la programmation en C.

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : Problème_Compilation_Programme sC_cryptographie.

    Citation Envoyé par Lumiere11 Voir le message
    (...)
    sinon puis je savoir quel compilateur avez vous utilisé, microsoft VISUAL non?
    (...)
    gcc 4.6 sous linux

  7. #6
    invitefbae583f

    Re : Problème_Compilation_Programme sC_cryptographie.

    d'accords .