habe ich ein Programm, das kopiert alle Inhalte eines anderen c prog (Binärdatei), sie auf eine andere Datei schreibt und führt sie dann aus (execve()
) nach der Ausführung Erlaubnis ihm hinzufügen (chmod()
).Shop ein Programm in einem anderen Programm
Jetzt möchte ich den gesamten Inhalt der Datei in einem Array innerhalb des Prog speichern (ich verwende hex Darstellung) und dann ausführen. Zu diesem Zweck habe ich ein anderes Programm in C, die eine Datei in Hex-Darstellung konvertiert hier ist der Quellcode dieser beiden Programme:
#include <stdio.h> //program used for execution
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
unsigned char prog []= {}// thats the string i am planning to use so i can store the program
void FileCreate(const char *in) {
FILE *fp2 = fopen(in,"wb"); // create afile in binary form with write permission
if (fp2==NULL) { //error checking
fclose(in);
printf("file '%s' isn't here...\n", in);
exit(1);
}
int ch;
int i = 0;
for (i=0; i<sizeof(prog);++i) {
ch = prog[i];
fputc(ch, fp2);
}
fclose(fp2);
}
int main (int argc,char *argv[]){
if (argc != 2) {
fprintf(stderr, "Usage: %s [file_name]\n", argv[0]);
exit(1);
}
FileCreate(argv[1]);
char *cmd[] = {argv[1], NULL};
int err = chmod (argv[1], S_IXUSR);
if (err==-1){
perror ("Change mode");
exit(1);
}
err = execve (cmd[0], cmd,NULL);
if (err==-1){
perror ("Execute file");
exit(1);
}
return 0;
}
converter.c: Programm, das Datei zu hex reprentation konvertiert
#include <stdio.h>
int main (void) {
unsigned char data[1024];
size_t numread, i;
while ((numread = read(0, data, 1024)) > 0) {
for (i = 0; i < numread; i++) {
if(data[i] != 0){ //remove null bytes
printf("0x%02x,", data[i]);
}
}
}
return 0;
}
Wie Sie in meinem Konverter-Programm sehen können, entferne ich die Null-Bytes aus der ausführbaren Datei. Ist das korrekt oder wird das Programm nicht ausgeführt? Mein Hauptproblem ist, dass ich nicht den gesamten Programminhalt in ein Array passen kann. Wie kann ich also ein Programm implementieren, das den Inhalt eines anderen speichert und dann ausführt?
- Ich verwende Linux-Umgebung und
gcc
Compiler. - Diese Programme werden für Bildungszwecke durchgeführt und sind nicht Teil einer Aufgabe oder Übung.
- Wenn Sie weitere Informationen benötigen lassen Sie mich jetzt
Haben Sie einen Virus erstellen? – Alexi
Wird dieses Programm als Virus oder Schadprogramm betrachtet? Wenn ja, sag es mir und ich lösche es sofort. danke –
Nein, natürlich nicht. Auch wenn Sie einen Virus erstellen möchten, können Sie nur für Bildungszwecke verwendet werden. Nur neugierig. Dies ist eine übliche Art, sich selbst zu replizieren. – Alexi