lunedì 13 maggio 2013

Steganografia, nascondere un messaggio dentro un file


La steganografia è un sistema per nascondere un file di un certo tipo, in un altro file di tipo diverso. Ad esempio si potrebbe inserire la propria firma(file di testo) dentro un file immagine(file jpg), salvaguardando così il proprio diritto di autore sulla foto. Per spiegare nella pratica come procedere , nasconderemo un "messaggio segreto" all'interno di un file audio in formato wav.
Per procedere avete bisogno di:

1)un file wav
2)un editor esadecimale (in linux potete installare GHex)
3)un messaggio da scrivere

La struttura dei file wav è semplice, i primi 44 byte sono l'intestazione del file, e contengono alcune informazioni che non dovete modificare. I restanti byte rappresentano i dati, in pratica sono dei valori di tensione da applicare all' altoparlante dopo che sono stati convertiti da valori digitali a valori analogici. Questi dati possiamo modificarli, chiaramente il file audio perderà in qualità, ma in questo caso quello che interessa è il messaggio nascosto, e poco importa se ascoltando il file wav modificato si sentiranno dei disturbi. In questo esempio, per semplificare al massimo la procedura utilizzeremo la tabella ASCII a 8 bit per codificare le lettere del messaggio da steganografare, per cui al posto delle lettere accentate dovrete utilizzare l'apostrofo. Supponiamo che il messaggio segreto sia "questo e' un test" ecco come procedere:

a)aprire il file wav con l'editor esadecimale
b)posizionarsi sul byte 45
c)modificare 3 byte inserendo il valore 0F
d)inserire il codice ASCII della lettera "q"
e)spostarsi di un numero casuale di byte e ripetere la procedura inserendo le altre lettere del messaggio segreto.
f)salvare il file

In fase di decodifica la sequenza 0F 0F 0F è il "punto di inserimento", ogni volta che incontreremo nel file wav questa sequenza sapremo che il byte successivo rappresenta una lettera del "messaggio segreto". Naturalmente potete scrivere dei programmini che fanno tutto in modo automatico eccone un esempio in c++ per linux.


//Steganografa il messaggio del file mex.txt nel file test.wav

#include <wx/init.h>
#include <wx/string.h>

int main( )
{       int let;
FILE *fd; //file wav
FILE *fw; //file testo
fd=fopen("test.wav", "r+");
fw=fopen("mex.txt", "r");
        //calcolo step
        fseek( fd, 0 , SEEK_END);
        int dim=ftell(fd); 
        fseek( fw, 1 , SEEK_END);
        int dim1=ftell(fw); 
        int step=(dim-48)/dim1;

        fseek( fw, 0 , 0);
        fseek( fd, 44 , 0);
        //scrive nel file wav il file testo
        for(int x=0;x<dim1;x++){
let=fgetc(fw);
fputc(15,fd);
fputc(15,fd);
fputc(15,fd);
fputc(let,fd);
fseek( fd, 44+(step*(x+1)) , 0);
}
fclose(fd);
fclose(fw);
return 0;
}



//legge il messaggio steganografato nel file test.wav e lo scrive nel file risultato.txt


#include <wx/init.h>
#include <wx/string.h>

int main()
{
FILE *fd;
        FILE *fw;
        unsigned int x, x1,x2,x3;
        fw=fopen("risultato.txt", "w");
        fd=fopen("test.wav", "r");
        fseek( fd, 0 , SEEK_END);
        int dim=ftell(fd); 
        int ad;
        fseek(fd , 44,0);
 for(;;){
        x=fgetc(fd);
        x1=fgetc(fd);
        x2=fgetc(fd);
   
      if(x==15 and x1==15 and x2==15){
x3=fgetc(fd);
        fputc(x3,fw);
        ad=ftell(fd);
        fseek(fd,ad-1,0);}
ad=ftell(fd);
if((dim-ad-2)>0)
fseek(fd,ad-2,0);
else
break;
}
fclose(fw);
fclose(fd);

return 0;
}

2 commenti:

  1. oggi ho imparato una cosa nuova e assai interessante
    non so se questa operazione sia o meno alla mia altezza, ma di sicuro è il genere di informazione che apre gli orizzonti sul complesso mondo di internet

    eh, ho la sindrome della scrittrice di fantascienza, che posso farci....

    Omron BSA

    RispondiElimina
    Risposte
    1. se sei una scrittrice hai fantasia...se hai fantasia riesci a far sogni mai sognati da nessuno...se sai sognare puoi fare tutto ;-)

      Elimina