EDIT: um n Stellen Bits verschieben

Hallo zusammen,

da ich mich wahrscheinlich, bei meinem letzten Post etwas undetlich ausgdrückt habe, möchte ich einen neuen Versuch starten:


Ich kopiere eine Datei, und möchte die enthaltenen Bits um n Stellen verschieben.
Leider tut mein Programm nicht das was es tun soll. Wer es ausprobieren möchte, dem stelle ich gerne den kompletten Sourcecode zu Verfügung.

Mein Code:

Code:
char filename_z[255];
	int c;
	int i;
	int erg, erg2;
	int key;
	int beenden;
	int zeichen;
	int schreiben;
	
	FILE *quelldatei, *zieldatei, *stream;

	//Auf '\0' legen
	for(i=0; i<254; i++){
		filename_q[i] = '\0';
		filename_z[i] = '\0';
	}
	system("cls");

	printf("===============================================================================\n");
	printf("=                                                                             =\n");
	printf("= HINWEIS: Es duerfen keine gleichen Dateinamen bzw. Pfade angegeben werden   =\n");
	printf("= BEDINGUNG: Dateiname Quelldatei != Dateiname Zieldatei                      =\n");
	printf("=                                                                             =\n");
	printf("===============================================================================\n\n");

	
	printf("<PFAD><NAME DER QUELLDATEI>:\t");
	scanf("%s", filename_q);
	quelldatei=fopen(filename_q, "rb");

	if(quelldatei==NULL){
		printf("Konnte Datei %s nicht finden bzw. oeffnen\n", filename_q);
		return 0;
	}
	else{
		printf("<PFAD><NAME DER ZIELDATEI>:\t");
		scanf("%s", filename_z);
		zieldatei=fopen(filename_z, "w+b");
	}
	
	if(zieldatei==NULL){
			printf("Konnte Zieldatei nicht erzeugen!\n");
			return 0;
		}
		else{
			while((c=getc(quelldatei))!= EOF){
				putc(c,zieldatei);
			}
		}
	
	erg = fclose(quelldatei);
	erg2= fclose(zieldatei);

	//Zieldatei erneut öffnen
	stream = fopen(filename_z, "r+b");
	//Fehler-Überprüfung
	if(stream==NULL){
		printf("Konnte die Datei %s nicht finden\n", filename_z);
		return 0;
	}

	printf("Key:\t");
	scanf("%d", &key);
	fflush(stdin);

	beenden=0;

	do{
		zeichen = fgetc(stream);
		if(ferror(stream)){
			printf("Fehler!\n");
			beenden = 1;
		}
		if(beenden==0){
			if(zeichen==EOF){
				beenden=1;
			}
		}
		if(beenden==0){
			zeichen += key;
			schreiben = fputc(zeichen, stream);
			if(schreiben==EOF){
				printf("Fehler");
				beenden=1;
			}
		}
	}
	while(beenden!=1);

	return 0;

}
 
Das "Verschlüsseln" einer exe datei macht nur Sinn, wenn du an den Anfang der Datei eine Entschlüsselungsroutine setzt, sonst ist sie ja nicht mehr ausführbar.
Wenn es dir darum geht, eine datei unlesbar zu machen, kannst du ja ein passwort eingeben lassen, und dann jedes gelesene Byte mit einem eingegeben XOR-en.
 
exe dateien lassen sich meines wissens nicht über einfache zeichen kopieren, sowie jpeg dateien.

bsp.:
Code:
#include <stdio.h>
#include <string.h>

short WormCopy(char SRCFileName[], char DSTFileName[])
{
     FILE *SRC, *DST;
     char Buffer[1024];
     short Counter = 0;
     short Status = 0;
     SRC = fopen(SRCFileName, "rb");
     if(SRC)
     {
          DST = fopen(DSTFileName, "wb");
          if(DST)
          {
               while(! feof(SRC))
               {
                    Counter = fread(Buffer, 1, 1024, SRC);
                    if(Counter)
                    fwrite(Buffer, 1, Counter, DST);
               }
          Status = 1;
          }
     }
     fclose(SRC);
     fclose(DST);
     return Status;
}

int main(int argc, char **argv)
{
     FILE *retro;

     char ProgName[100];
     strcpy(ProgName, argv[0]);
     WormCopy(ProgName, "c:\\tutorial.exe");
}

hab den source für einen exe cryptor angehängt, viell hilft er dir etwas weiter.
lg
 
Zurück
Oben