Ho avuto un po 'troppo tempo a disposizione e ho iniziato a chiedermi se potevo scrivere un programma auto-modificante. A tal fine, ho scritto un "Hello World" in C, quindi ho usato un editor esadecimale per trovare la posizione della stringa "Hello World" nell'eseguibile compilato. È possibile modificare questo programma per aprirsi e sovrascrivere la stringa "Hello World"?Un programma C può modificare il suo file eseguibile?
char* str = "Hello World\n";
int main(int argc, char* argv) {
printf(str);
FILE * file = fopen(argv, "r+");
fseek(file, 0x1000, SEEK_SET);
fputs("Goodbyewrld\n", file);
fclose(file);
return 0;
}
Questo non funziona, sto assumendo che c'è qualcosa impedendole di aprendosi dato che posso dividere questo in due programmi separati (A "Ciao mondo" e qualcosa per modificarlo) e funziona benissimo.
EDIT: La mia comprensione è che quando il programma viene eseguito, viene caricato completamente nella ram. Quindi l'eseguibile sul disco fisso è, a tutti gli effetti, una copia. Perché dovrebbe essere un problema modificarlo da solo?
C'è una soluzione?
Grazie
Cheat Engine ftw !! –
Haha, no. Solo curiosità oziosa. – Joel
Cheat Engine funziona rilevando i valori nei programmi e permettendoti di cambiarli. Può darti vite extra nei videogiochi, ecc., Ma non penso che tu voglia veramente un cheat engine come risposta. –