Pagina 1 di 1

C leggere programma

MessaggioInviato: 22 lug 2012, 12:00
da lucarelly
Ciao a tutti,
ho letto su un libro in biblioteca che i programmi in windows (file .exe) hanno come codice iniziale MZ, e che i file .exe che contengono una doppia dicitura MZ potrebbero essere infettati da codice dannoso.
Volevo fare un programma in C che leggesse i caratteri di un file.exe.
Ho scritto un codice banalissimo come questo:
Codice: Seleziona tutto
#include <stdio.h>
int main(){
    char string[400];
    FILE *programma;
programma = fopen ("programma.exe", "r");
fgets(string,400,programma);
//fputs(string,programma);
printf("%s",string);
fclose(programma);
system("pause");
    return 0;
    }

ciò che ottengo, con tutti i programmi che apro è questo:
Codice: Seleziona tutto
MZÉ

come mai non visualizza mai più di tre caratteri?

Re: C leggere programma

MessaggioInviato: 22 lug 2012, 12:07
da TardoFreak
Probabilmente perché incontra un carattere di terminazione della stringa.
Utilizzando la gets gli stai dicendo di leggere una stringa e la stringa termina con uno 0, un <CR> o un <EOF>.

Re: C leggere programma

MessaggioInviato: 23 lug 2012, 12:36
da lucarelly
si, errore stupido!
ho fatto un ciclo che controlla la fine del file e continua a leggere tutti i caratteri.
Qualcuno può confermare il fatto che una doppia presenza dei caratteri MZ significa che il file è infetto?

Re: C leggere programma

MessaggioInviato: 23 lug 2012, 13:09
da xyz
lucarelly ha scritto:Qualcuno può confermare il fatto che una doppia presenza dei caratteri MZ significa che il file è infetto?

No, prova a scrivere un programma con:

Codice: Seleziona tutto
char *bar = "MZ";

sarebbe infetto secondo te ? E' un falso positivo.

La presenza del mark "MZ" è solo un indizio della presenza di un altro eventuale programma binario non amichevole.

Una curiosità MZ sono le iniziali di Mark Zbikowski un programmatore della Microsoft ai tempi del MS-DOS.

Re: C leggere programma

MessaggioInviato: 23 lug 2012, 17:41
da angus
lucarelly ha scritto:ho fatto un ciclo che controlla la fine del file e continua a leggere tutti i caratteri.

Io il ciclo non lo vedo, in ogni caso ricordati che stai lavorando con dei file BINARI, non file di testo...
Se usi fread ti conviene leggere un certo quantitativo di dati e metterlo in un buffer...
Ricorda che alcuni caratteri non sono stampabili, ti conviene forse stamparli in esadecimale (%x)...
lucarelly ha scritto:Qualcuno può confermare il fatto che una doppia presenza dei caratteri MZ significa che il file è infetto?

Non direi proprio.

Re: C leggere programma

MessaggioInviato: 24 lug 2012, 12:11
da lucarelly
Stampando in esadecimali non vedresti nessun MZ, o almeno non dovresti :shock:

Re: C leggere programma

MessaggioInviato: 24 lug 2012, 12:14
da angus
No, infatti.
Però sei sicuro che vedi tutto il resto.
Io invece non sono sicuro che tu abbia capito il senso del mio consiglio.

Re: C leggere programma

MessaggioInviato: 24 lug 2012, 12:16
da lucarelly
angus ha scritto:Io invece non sono sicuro che tu abbia capito il senso del mio consiglio.

No infatti.
Convertendo in esadecimali vedo tutto, ma non saprei cosa guardare.

Re: C leggere programma

MessaggioInviato: 24 lug 2012, 12:18
da angus
se cerchi "MZ" ti basta sapere come è scritto in hex.. 4D 5A