Ich programmiere ein Programm, um den CRC16 zu knacken. Ich hatte einige Probleme mit der Ausgabe der Datei und behalten Sie den berechneten CRC16 (habe keine Ahnung, warum es sich ändert, wenn ich es in eine Datei schreibe). Also, was ich hier mache, lese die Eingabedatei, schreibe sie mit etwas Kauderwelsch in eine Ausgabedatei, und dann lese ich die Ausgabedatei erneut und berechne ihre CRC16. Wenn es mit der gewünschten CRC16 übereinstimmt, ist es getan. Nach einigen Hinrichtungen stürzt die Methode fgets() jedoch mit einem Seg-Fehler ab.fgets() stürzt nach einer Anzahl von Ausführungen ab
Jeder könnte mir helfen? Bitte ignorieren Sie die Leistungsprobleme, das ist ein Test.
int main(int argc, char* argv[]){
char outfile[strlen(argv[1])];
strcpy(outfile,argv[1]);
strcat(outfile,".crack");
char crc16[5];
strcpy(crc16,argv[2]);
char newcrc16[5];
char gebrish[80];
char cat[2];
int full = 1;
int p = 0;
int i,j,k;
for(i=32; i< 128;i++)
for(j=32; j< 128; j++)
for(k=32; k < 128; k++){
gebrish[0] =i;
gebrish[1] =j;
gebrish[2] =k;
gebrish[3] = '\n';
gebrish[4] ='\0';
boost::crc_16_type result;
FILE* file;
FILE* out;
char line[100];
printf("read out\n");
out = fopen(outfile,"w");
printf("read file\n");
file = fopen(argv[1],"r");
printf("wrt\n");
while(fgets(line,80,file) != NULL){
fputs(line,out);
}
fputs(gebrish,out);
fclose(file);
fclose(out);
printf("read gain\n");
out = fopen(outfile,"r");
while(fgets(line,80,out) != NULL){
result.process_bytes(line,strlen(line));
printf("%s",line);
}
int crc = result.checksum();
sprintf(newcrc16,"%x",crc);
printf("%s",newcrc16);
if(strcmp(crc16,newcrc16) == 0){
printf("%s",gebrish);
return 0;
}
}
return 0;
}
Welches fgets stürzt ab? 1. Schleife, 2. Schleife oder beides? – stark