El problema
Fa un parell de dies, vaig trobar un bloc on s’explicava com amagar arxius comprimits dins de fitxers d’imatge; hi havia una explicació per a GNU/Linux i una altra per a Windows. Ahir vaig voler provar-ho, però ja no vaig ser capaç de localitzar el bloc en qüestió. En vaig trobar un altre que ho explicava, però només per a Windows; a partir d’ací, i recordant que, en GNU/Linux, es feia servir l’ordre cat, vaig poder reconstruir el procés.
La idea és senzilla: partim d’una imatge (tux.png) i d’una sèrie de fitxers (en aquest exemple, només un: missatgesecret.txt) que volem “camuflar” dins d’aquella imatge. Com a pas previ, comprimirem tots els fitxers que volem camuflar a l’arxiu comprimit.zip. Després, crearem un fitxer que aparentment serà d’imatge, però que contindrà, també, l’arxiu comprimit.
Un pingüinet innocent
Crear el fitxer camuflat
En primer lloc, crearem l’arxiu comprimit amb els fitxers a camuflar:
zip comprimit.zip missatgesecret.txt [altres_fitxers_a_comprimir]
Després, unirem l’arxiu d’imatge amb l’arxiu comprimit, creant l’arxiu camuflat:
cat tux.png comprimit.zip > tux007.png
En l’ordre anterior, és imprescindible que el nom de l’arxiu d’imatge siga el primer argument. L’arxiu resultant, tux007.png, es comportarà a tots els efectes com un “autèntic” fitxer d’imatge: si l’obrim des del navegador d’arxius, s’obrirà amb el visualitzador per omissió; el podrem obrir normalment amb qualsevol programa de tractament d’imatges i, fins i tot, el podrem penjar al web i fer-lo aparèixer a la nostra pàgina on es visualtzarà amb tota normalitat.
Un pingüinet no tan innocent
Recuperar els fitxers amagats
Curiosament, l’arxiu tux007.png serà interpretat per la utilitat unzip com si fos un arxiu comprimit normal i corrent, ignarant la presència de la imatge “despistadora”. Així, per obtenir un llistat del seu contingut, només ens caldrà fer:
unzip -v tux007.png
I si volem recuperar els arxius amagats:
unzip tux007.png
Recuperar la imatge original
L’ordre cat que ha produït l’arxiu “de camuflatge” no ha fet sinó concatenar, bit a bit, una imatge i un arxiu comprimit. Si volem recuperar el fitxer imatge original, caldrà esbrinar quants bytes ocupa exactament i, després, amb l’ordre dd, el podrem extraure de la part inicial de l’arxiu camuflat. Podem esbrinar aquesta mida amb:
unzip -v tux007.png
Observarem que hi ha una línia que comença amb la paraula “warning”; en el nostre cas, la segona línia:
Archive: tux007.pngwarning [tux007.png]: 47599 extra bytes at beginning or within zipfile (attempting to process anyway) Length Method Size Ratio Date Time CRC-32 Name-------- ------ ------- ----- ---- ---- ------ ---- 893 Defl:N 442 51% 07-30-07 13:24 6970d7a0 missatgesecret.txt-------- ------- --- ------- 893 442 51% 1 file
(També ho podem esbrinar canviant "-v" per "-t", i ens estalviem la taula amb els continguts de l’arxiu comprimit.)
En el nostre exemple, la mida és de 47.599 bytes. Es tracta, com hom pot endevinar, de la mida exacta de la imatge que vam utilitzar per camuflar els nostres arxius. Ara la podem recuparar amb una ordre dd que llegeisca, de l’arxiu camuflat, eixa quantitat exacta de bytes:
dd if=tux007.png of=imatgerecuperada.png bs=47599 count=1
I només ens falta obrir imatgerecuperada.png amb el nostre visor d’imatges preferit per contemplar una reproducció exacta de la imatge original (que, en aquest cas, ja no amaga res).
Consideracions
No crec que aquest sistema d’ocultació siga gaire segur, jo no hi confiaria “secrets d’estat”; tanmateix, la segurat es pot augmentat fent servir el xifrat en el moment de la compresió. Mès bé, trobe que aquest procediment és una curiositat que ens permet “jugar a espies” amb els amics i que, a més, és molt didàctica pel que fa al funcionament de cat i de dd. Continue sense tindre clar per què l’arxiu camuflat és interpretat amb encert (no m’atrevisc a dir “correctament”, ja que actuen com si foren arxius normals, i no ho són) tant pels programes gràfics com pels descomprimidors.
Crec que hi ha programes que permeten obtindre resultats més segurs a l’hora d’amagar informació, com ara steghide (no l’he provat); però no tenen la gràcia de fer-ho tot u mateix, pas a pas.
També funciona amb arxius jpg; de fet, sospite que funcionarà amb moltes combinacions de fitxers d’imatge amb arxius comprimits.
e-bibliografia
Una descripció del procés per a Windows:
Como esconder archivos rar en imágenes jpeg/jpg
M’hauria agradat posar l’enllaç al primer post que vaig llegir, el que explicava el procés tant per a Windows com per a GNU/Linux, però no l’he tornat a trobar (de fet, per això he fet aquest post). Si el localitze, afegiré l’enllaç.