Cose che ho letto

martedì 13 gennaio 2015

Sostituire un'immagine e la sua anteprima nella chat di WhatsApp (Android)

English version: How to change image and thumbnail in Whatsapp chat (Android)

La base


Fare in modo che nella cronologia di una chat risulti ricevuta/inviata un'immagine piuttosto che un'altra, è un gioco da ragazzi. Basta infatti andare a sostituire in memoria il file originale con quello falso. Per la maggior parte dei telefoni android, tali file si trovano nella directory principale del sistema (storage/sdcard0 or storage/emulated/0 per esempio), cartella WhatsApp/Media/WhatsApp Images/ o Sent. I nomi delle immagini sono composti dal prefisso IMG, dalla data di arrivo e da un numero progressivo giornaliero. È sufficiente eliminare l'immagine che non vogliamo mostrare e incollare il nuovo file rinominandolo come il vecchio. A questo punto WhatsApp mostrerà la nuova immagine quando andremo a sfogliare la chat.

Questo semplice trucco è alla portata di tutti, basta il semplice Esplora File del sistema o qualche altro file manager.

Il problema si presenta se volete cambiare anche l'anteprima sfocata che viene visualizzata nella chat prima che venga caricata l'immagine in memoria. Potreste pensare che tale anteprima sia generata dal programma in base all'immagine salvata, ma non è così. Ed eccoci alla parte interessante di questa guida.





Premessa legale

Non mi riterrò responsabile di qualsivoglia uso illecito di questa procedura, in quanto illustrata al solo scopo di ricerca.

La Teoria

Le anteprime delle immagini non vengono conservate nel telefono sotto forma di file di alcun tipo, quindi non andate a cercarle chissà dove nel sistema o nella cache dell'applicazione. Queste sono salvate come testo nella cronologia della chat, esattamente come se fossero normali messaggi.
WhatsApp salva periodicamente un backup delle conversazioni all'interno di un database SQLite e li cripta all'interno della sua cartella di sistema. In questo database, nella tabella messages, troviamo in ordine cronologico tutti i messaggi inviati e ricevuti. Ognuno è descritto da vari campi, come id, ora di arrivo e contenuto. Per le immagini abbiamo anche l'url sui server di whatsapp, dimensione dell'immagine, hash e ovviamente l'anteprima.
Se vi servite di un programma come SQLite Database Browser per esplorare il database, potrete constatare quanto detto e verificare che tutti i campi sono chiaramente leggibili ad eccezione di thumb_image, e raw_data che è il dato che interessa a noi.




Questo infatti non è salvato come oggetto INTEGER o STRING, bensì come BLOB, un particolare e odioso tipo di dato che serve a memorizzare piccoli file multimediali in un database. I software in grado di leggere nativamente questo tipo di dato direttamente dal database sono pochi, anzi, che io sappia solo uno, Oracle SQL Developer. Solo che quest'ultimo non supporta i database SQLite, quindi se proprio volete andare a ficcare il naso dovrete convertirlo o smanettare con i plugin.
Detto ciò il piano è semplice: prendere il raw_data di un'immagine a nostro piacimento, o una appositamente inviata, e andare a sostituire quello del messaggio che vogliamo modificare.

Requisiti

Procedura 

Con il file manager recatevi nella cartella di sistema di WhatsApp/Database e cancellate, o ancora meglio rinominate, tutti i file dei vecchi backup.




Aprite WhatsApp e dal menu Impostazioni chat effettuate un nuovo backup della cronologia




Da WhatsApp Tri-Crypt selezionate: Decrypt WhatsApp Database e otterrete un nuovo file non criptato





Trasferite il file sul computer e avviate WhatsApp Xtarct per convertire il database in un file html leggibile. Può volerci qualche minuto a seconda delle dimensioni della chat, e per aprire il file altrettanto.



Il file appare come un elenco di messaggi suddivisi per conversazione e in ordine cronologico.
Per la dimostrazione andrò a modificare la chat con un mio amico che sta costruendo un brutto case per un raspberry pi, sostituirò la foto della ventola blu a quella dell'interno della scatola





Il motivo per cui abbiamo convertito il database è quello di poter leggere gli ID dei messaggi, necessari per avviare lo script di sostituzione



Nella cartella di esecuzione, il programma genera 2 file che rappresentano le anteprime elaborate, usatele come riscontro e in caso di errore cancellate il database e ritentate.
Per verificare di persona la riuscita del trucco, basta rieseguire lo script o convertire nuovamente il database in html




Il più è fatto!
Adesso prendete il file del database e rimettetelo nel telefono al posto di quelli creati da whatsapp (che vanno conservati per sicurezza), ri-criptate il file usando Tri-Cript, e infine disinstallate WhatsApp e lo reinstallate per permettergli di caricare la chat dal nuovo database.
Et voilà!





Nessun commento:

Posta un commento