https://code.google.com/p/secrypt/
La base de datos de mensajes de WhatsApp se guarda en un fichero en formato SQLite. En el caso de los teléfonos IOS este fichero está en la ruta: [ID de App]/Documents/ChatStorage.sqlite y en el caso de los teléfonos Android en: /com.whatsapp/databases/msgstore.db. Este fichero está sin cifrar tal y requiere que el teléfono este jailbreakedo para acceder a el.
En el caso de Android además existe un fichero de backup que se almacena en la tarjeta externa de memoria y que tampoco estaba cifrado. Esto cambió en una de las actualizaciones que sufrió la aplicación. De esta forma si se pierde el teléfono o lo roban, aunque tengan la tarjeta no podrán leer los mensajes.
Por desgracia, el cifrado que utiliza la aplicación (AES-192-ECB) en el fichero de backup siempre la hace usando la misma key (346a23652a46392b4d73257c67317e352e3372482177652c), y ningún factor único de cada dispositivo, por lo que se pueden recuperar los mensajes de cualquier móvil de la misma forma y en pocos segundos.
Pues con el siguiente programa solo tienes que arrastrar ese fichero de backup que se encuentra en la tarjeta (tendrá un nombre parecido a msgstore.db.crypt) encima de el y lo descifrara creando una copia con el mismo nombre añadiendo ".dec" al final. El fichero descifrado no es mas que una base de datos SQLite así que con un simple editor de texto podremos echarle un vistazo a los mensajes, o si queremos ver todos los campos podemos usar el manager del SQLite
A divertirse!!!
El código del programa (incluido en el .zip junto al ejecutable):
program WhatsAppDec; uses Windows, SysUtils, SeAES256 in 'SeAES256.pas'; var Src, Dst: File of TAESState; AESKey: TAESKey; ExpandedKey: TAESExpandedKey; State: TAESState; begin if ParamCount = 0 then Exit; AssignFile(Src,ParamStr(1)); AssignFile(Dst,ParamStr(1) + '.dec'); {$I-} Reset(Src); {$I+} if IOResult = 0 then try {$I-} Rewrite(Dst); {$I+} if IOResult = 0 then try AESCopyKey(AESKey, PAnsiChar(#$34#$6a#$23#$65#$2a#$46#$39#$2b#$4d#$73#$25#$7c + #$67#$31#$7e#$35#$2e#$33#$72#$48#$21#$77#$65#$2c),192); AESExpandKey(ExpandedKey,AESKey,192); Read(Src,State); while not EOF(Src) do begin AESDecrypt(State,ExpandedKey); Write(Dst,State); Read(Src,State); end; finally CloseFile(Dst); end; finally CloseFile(Src); end; end.