Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

C leggere programma

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] C leggere programma

Messaggioda Foto Utentelucarelly » 22 lug 2012, 12:00

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?
Avatar utente
Foto Utentelucarelly
0 2
 
Messaggi: 12
Iscritto il: 6 giu 2012, 16:43

2
voti

[2] Re: C leggere programma

Messaggioda Foto UtenteTardoFreak » 22 lug 2012, 12:07

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>.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: C leggere programma

Messaggioda Foto Utentelucarelly » 23 lug 2012, 12:36

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?
Avatar utente
Foto Utentelucarelly
0 2
 
Messaggi: 12
Iscritto il: 6 giu 2012, 16:43

2
voti

[4] Re: C leggere programma

Messaggioda Foto Utentexyz » 23 lug 2012, 13:09

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.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

2
voti

[5] Re: C leggere programma

Messaggioda Foto Utenteangus » 23 lug 2012, 17:41

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.
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25

0
voti

[6] Re: C leggere programma

Messaggioda Foto Utentelucarelly » 24 lug 2012, 12:11

Stampando in esadecimali non vedresti nessun MZ, o almeno non dovresti :shock:
Avatar utente
Foto Utentelucarelly
0 2
 
Messaggi: 12
Iscritto il: 6 giu 2012, 16:43

1
voti

[7] Re: C leggere programma

Messaggioda Foto Utenteangus » 24 lug 2012, 12:14

No, infatti.
Però sei sicuro che vedi tutto il resto.
Io invece non sono sicuro che tu abbia capito il senso del mio consiglio.
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25

0
voti

[8] Re: C leggere programma

Messaggioda Foto Utentelucarelly » 24 lug 2012, 12:16

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.
Avatar utente
Foto Utentelucarelly
0 2
 
Messaggi: 12
Iscritto il: 6 giu 2012, 16:43

1
voti

[9] Re: C leggere programma

Messaggioda Foto Utenteangus » 24 lug 2012, 12:18

se cerchi "MZ" ti basta sapere come è scritto in hex.. 4D 5A
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti