Vediamo come si può “nascondere un file all’interno di un’immagine, la cosa potrebbe tornare utile ad esempio per inviare file non permessi dal server SMTP.
In questo tutorial viene spiegato come eseguire l’operazione con Winrar, che però non è un software gratuito quindi ho deciso di rifare la procedura usando 7-Zip:

Dal prompt dei comandi per comprimere il file con 7-zip digitare:
7z a -t7z file.7z file_da_comprimere.exe
(naturalmente bisogna assicurarsi di essere nella cartella in cui si trova il file 7z.exe o eventualmente settare il giusto PATH)
Per unire il file compresso all’immagine, dare il comando:
copy /b immagine.png + file.7z output.png
(è importante che l’immagine venga messa prima del file compresso)
Ora se aprite normalmente il file output.png esso verrà aperto con un visualizzatore di immagini, se invece decidete di aprirlo con 7-Zip (o altro software per la gestione degli archivi compressi) esso mostrerà il file che abbiamo aggiunto. Ad esempio:
7zFM output.png
Bene, per fare prima potete usare un piccolo file BAT che io ho chiamato mfii (merge file in image) e che va usato nel seguente modo:
mfii file_da unire immagine
tenendo ben presente le seguenti cose:
- se il percorso del file contiene spazi bisogna quotare con le virgolette;
- l’immagine va sempre inserita come secondo parametro del comando;
- se avete installato 7-zip in una cartella diversa da “C:\Programmi\7-zip” dovete modificare il file BAT inserendo il giusto percorso.
Il codice è il seguente:
@echo off :: Se si è installato 7-zip in una cartella diversa modificare il percorso con il giusto PATH PATH=%PATH%;C:\Programmi\7-zip;; :: Imposta i tipi di file permessi per il file immagine SET FILETYPE=.jpg .png .gif :: Se non sono stati inseriti i parametri necessari lo script restituisce un errore IF (%1)==() GOTO ERRORE3 IF (%2)==() GOTO ERRORE3 :: Verifica l'esistenza dei due file in input, se non esistono ritorna un ERRORE IF NOT EXIST %1 GOTO ERRORE1 IF NOT EXIST %2 GOTO ERRORE2 :: Estrae il nome del file di output che deriverà il suo nome dal file da aggiungere all'immagine for %%F in (%1) do SET IMGNAME=%%~nF :: deriva l'estensione del file di output che coincide con l'estensione dell'immagine utilizzata for %%F in (%2) do SET IMGEXT=%%~xF :: Verifica che il secondo file sia un'immagine altrimenti interrompe lo script SET ISIMAGE=0 for %%F in (%FILETYPE%) do IF (%%F)==(%IMGEXT%) SET ISIMAGE=1 IF (%ISIMAGE%)==(0) GOTO ERRORE4 :: Crea il file archivio da aggiungere poi all'immagine, se il percorso di 7z.exe non è corretto verrà restituito un errore 7z a -t7z temp.7z %1 :: unisce il file compresso all'immagine e dà il file di output copy /b %2 + temp.7z %IMGNAME%%IMGEXT% :: Cancello il file temporaneo temp.7z del temp.7z :: Termina lo script non avendo incontrato nessun errore echo Il file %IMGNAME%%IMGEXT% è stato creato con successo GOTO END :ERRORE1 :: Se il primo file non esiste viene restituito un errore echo il file %1 non esiste, accertarsi di aver digitato correttamente il nome del file GOTO END :ERRORE2 :: Se il secondo file non esiste viene restituito un errore echo il file %2 non esiste GOTO END :ERRORE3 echo devi inserire almeno due parametri GOTO END :ERRORE4 echo il secondo file in input deve essere un'immagine GOTO END :END
]]>
UPDATE: seguendo i suggerimenti di chi ha commentato ho creato uno script VBS che permette di “nascondere” un file in un’immagine dal menu contestuale di Explorer, questo è il link al nuovo post.






