Ci deve essere un po 'di sicurezza nell'applicazione.
Pensa come un file .txt molto semplice e comune: se lo apri con un visualizzatore esadecimale o con un editor di testo ben progettato, dovrebbe solo visualizzare il contenuto del file e ok.
Quindi pensa di elaborare il file, in qualche modo, invece di mostrare solo il contenuto. Ad esempio, leggendo il file e interpretando i suoi valori. Se non viene eseguito correttamente, ciò potrebbe comportare l'esecuzione dei byte che si trovano all'interno del file.
Ad esempio: se hai progettato la tua app per caricare l'intero file e mostrarlo, ma in qualche modo hai una variabile all'interno del tuo programma che contiene solo 256 byte. Questo potrebbe farti leggere (e scrivere in memoria) più byte di quanto la tua app si aspettasse. E, immagina, all'interno della tua app ci sarebbe un qualsiasi comando per passare alla posizione NNNN in memoria ed eseguire ciò che è , ma dal momento che quella posizione di memoria è stata scritta con dati che il tuo programma non si aspettava, allora tu eseguirò del codice che non dovrebbe essere lì, ed è stato caricato dal tuo file ...
Questo è stato un buffer overflow attacco.
Lo stesso potrebbe accadere con pdf, jpg, mp3, ecc., se l'app non ha caricato correttamente i dati.
Un'altra possibilità: per qualsiasi altra ragione, l'app (o qualche DLL che carica per leggere i tuoi dati) esegue parte dei dati, invece di leggerli. Se sai quale sarebbe il comando (oi dati) che scatenerebbe questo comportamento, metti questi comandi all'interno del file di dati (come il file pdf) in modo che l'app lo esegua.
virus PDF : leggi questo sito: link per sapere un po 'su un virus che si diffuse usando i file PDF.