Petit Bug

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 12 mars 2004 à 22:51
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 14 mars 2004 à 20:48
Bonjour a tous,
voici deux fonctions:
#include <stdio.h>
#include <stdlib.h>

// Variables
char SourceFile[1024];
char DestinationFile[1024];
int choice;

// fonction extraction de fichier
int extract(char Source[1024], char Destination[1024]) 
{
// variable
    int c, c_source, flag=1, count=0, count_end=0;
    FILE *fp_destination;
    FILE *fp_source;
    char *begin = "-----FU-FILE-----";   // 15
    char *end = "-----FU-FILE-END-----"; // 19
    char *tmp;
    
    tmp = malloc(20);
    
// ouverture des fichier    if((fp_destination fopen(Destination, "wb")) NULL) 
{
        return 0;
    }
        if((fp_source fopen(Source, "rb")) NULL) 
{
        return 0;
    }

// ici on va extraire le fichier caché
    while((c = fgetc(fp_source)) != EOF) 
{        if(count 15 || count 16) 
{
if (count != 15) 
{ 
fputc(c, fp_destination);                      
            } 
else 
{ 
count++; 
}            
        } 
else 
{
            if(count <= 15) 
{
                if(c == begin[count]) 
{
                     flag = 0;
                     count++;
                } 
else 
{
                     flag = 0;
                     count = 1;
                }
            }
        }
    }    
    
// on ferme les fichiers
    fclose(fp_destination);
    fclose(fp_source);
    
// et libere la memoire
    free(tmp);

    return 1;
}

// fonction de l'integration du fichier
int integration(char Source[1024], char Destination[1024]) 
{
// variables
    int c, c_source;
    FILE *fp_destination;
    FILE *fp_source;
       
// ouverture des fichiers    if((fp_destination fopen(Destination, "a+b")) NULL) 
{
        return 0;
    }
        if((fp_source fopen(Source, "rb")) NULL) 
{
        return 0;
    }
    
// on atteint la fin du fichier
    while((c = fgetc(fp_destination)) != EOF)
{
}
    	   
// une fois la fin atteint on copie le fichier dans l'autrz
    if(feof(fp_destination)) 
{
        fputs("----FU-FILE----", fp_destination);
        while((c_source = fgetc(fp_source)) != EOF) 
{
                fputc(c_source, fp_destination);
        }
        if(!(feof(fp_source))) 
{
                return 0;        
        } 
        //fputs("----FU-FILE-END----", fp_destination);
    } 
else 
{
        return 0;
    }
    
// on ferme les fichiers
    fclose(fp_destination);
    fclose(fp_source);

    return 1;
}

// fonction principale du programme
int main(int argc, char *argv[])
{
    int result;

// menu
printf("-------------------\n");
printf("Cyber Stegano v1.0 \n");
printf("-------------------\n");
  
printf("\n\n1 : Integrer un fichier dans un autre.\n");
printf("2 : Extraire un fichier dans un nouveau.\n");
printf("Votre choix : ");
scanf("%i", &choice);
  
// ici on va integrer un fichier dans un autre
if(choice == 1) 
{
printf("\n\nFichier a integrer : ");
scanf("%s", &SourceFile);
  
printf("\nFichier "recevant" : ");
scanf("%s", &DestinationFile);
  
    printf("\n\nEn cours...");
  
result = integration(SourceFile, DestinationFile);

if(result == 0) 
{
printf("Error !\n\n");
system("PAUSE");
exit(0);
} 

printf("\n\nOperation is finish !\n\n"); 
} 
// ici on va extraire un fichier
else if (choice == 2) 
{
printf("\n\nFichier contenant le fichier a extraire : ");
scanf("%s", &SourceFile);
    
printf("\nNom du fichier a extraire : ");
scanf("%s", &DestinationFile);
    
printf("\n\nEn cours...");
    
result = extract(SourceFile, DestinationFile);
    
if(result == 0) 
{
printf("Error !\n\n");
exit(0);
}
    
printf("\n\nOperation is finish !\n\n");    
} 
else // si aucun choix valide
{
printf("Error !\n\n");
system("PAUSE");
}

system("PAUSE");

return 0;
}


la fonction 'intergration', copie un fichier dans un autre (genre de steganographie)... jusque la tout va bien... la fonction 'extract', quand a elle, enleve le fichier contenue dans l'autre fichier (je c, c pas tres clair !!!), mais seulement, le fichier n'est pas identique...il y a des 'trucs' en plus... je n'arrive pas a trouver l'erreur dans le code, quelqu'un peut m'aider ?
Bob...

"La chance accorde ses faveur aux esprits avertis..."

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 mars 2004 à 23:47
Salut LordBob,
le prends pas mal mais ce code ressemble a du VB retranscrit, sera aussi lent. On ne lit ni n'ecrit dans un fichier octet par octet, imagine sur un gros fichier c'est impensable. On ne cherche pas la fin (eof) mais on s'y positionne direct.
Si tu vises win32, va voir dans mes sources comment on procede.

Autre truc, ne fais pas tourner le memory manager pour 20 octets (malloc), prends les sur la pile directement (char buf[20]), tu economiseras des centaines de cycles processeurs.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
13 mars 2004 à 08:24
je ne le prend pas mal, c'est juste le moyen le plus simple que j'ai trouver !!! mais je vais regarder ce que tu me dit.
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
14 mars 2004 à 20:33
bon je cherche toujours sur mon code, ce qui ne vat pas, bien que j'ai pas petite idée... mais je n'arrive pas à corriger mon erreur... tu pourrais pas m'aider, car ca doit etre simple pour toi !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mars 2004 à 20:38
Je ne fais que du win32:
CreateFile
ReadFile
WriteFile
SetFilePointer
SetEndOfFile
CloseHandle
Voila ce dont je me sers, rien que du direct au systeme.

ciao...
BruNews, Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
14 mars 2004 à 20:48
ok, c'est pas grave, vais me debrouiller...
merci kan meme !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
0
Rejoignez-nous