PDA

Ver la Versión Completa : [ IDEA ] WADBView - Programa para visualizar en un PC nuestros mensajes WHATSAPP


WolfBeast
09/12/13, 00:36:13
Hola, foreros.

Mi "nom de plume" es WolfBeast y soy desarrollador informático. Hace poco y por pura curiosidad intelectual me decidí por la idea de enredar y conocer un poco más las tripas de un Android, entorno que me atraía bastante. Me plantee varios retos técnicos y finalmente me decidí por el desarrollo de un programa que me permitiese visualizar de forma estructurada y organizada en un PC los mensajes recibidos en nuestro WHATSAPP y los datos de los contactos. Fruto de esta labor nace WADBView, un visualizador de ficheros de datos WHATSAPP. El programa está en su fase de desarrollo (fase beta) y aun le falta la incorporación de diversas funcionalidades que tengo en mente pero creo sinceramente que ya contiene los suficientes elementos como para que "salga al mundo" y obtenga una impresión de todo aquel que desee probarlo.

El programa es gratuito (FREEWARE) y su uso no conlleva ninguna obligación monetaria ni de ningún otro tipo.

Como digo, el programa aun tiene limitaciones (como por ejemplo que, por el momento, solo visualiza ficheros de datos de WHATSAPP Android ( los usuarios de iPhone, BlackBerry y otras plataformas aún deberán esperar un poquito :-) )) pero creo que su funcionalidad es al menos interesante. Creo también que será mejor que ponga un fragmento del README.


1.- VISIÓN GENERAL
------------------

A estas alturas considero obvio e innecesario definir y describir qué es WHATSAPP. De hecho es bastante probable que, si estás utilizando este programa, seas un usuario habitual de esa aplicación de mensajería instantánea y conozcas su funcionalidad y posibilidades. Baste decir, en líneas generales, que WHATSAPP, al igual que la gran mayoría de aplicaciones que corren en tu smartphone, almacena los datos necesarios para su funcionamiento (mensajes enviados y recibidos, datos de los contactos, etc...) en una serie de ficheros ubicados en su interior. WHATSAPP DABATABASE VIEWER (en adelante, WADBView) permite la visualización organizada desde un PC de dichos ficheros de datos. O algo parecido. Profundizando un poco más podemos decir que un smartphone puede almacenar la información que gestiona en dos ubicaciones diferentes: la memoria interna del teléfono y la memoría externa, que suele ser una tarjera de memoria de tipo SD insertada en el dispositivo. WHATSAPP almacena la información "viva" de su aplicación en la memoria interna del teléfono, pero posee una funcionalidad particular: permite generar regularmente copias de respaldo (backup) de dicha información y almacenarlas en la memoria externa (tarjeta SD) segun especifica la propia aplicación WHATSAPP en su opción "Ajustes -> Ajustes de Chat -> Guardar conversaciones". Esto sirve, por ejemplo, para restaurar las conversaciones si, por cualquier motivo, desinstalamos e instalamos de nuevo WHATSAPP en nuestro dispositivo. Aprovechando esta carácteristica, WADBView está diseñado para acceder a dichos ficheros de respaldo, explotar los datos contenidos en ellos y mostrarlos en la pantalla de un PC. Eso es todo. Ni más ni menos.


2.- ¿Qué tiene de especial WADBView?
------------------------------------

Nada y todo. Es cierto que en Internet ya existen procedimientos y herramientas para acceder a la información contenida en dichos ficheros. Lo que hace WADBView no es novedoso ni revolucionario. Pero si son ciertos dos aspectos: 1) WADBView automatiza y facilita muchas de las tareas necesarias para la explotación de dichos datos, cuestión que otras herramientas (basadas en scripts y ficheros de sentencias que requieren instalación previa de motores y librerías) no hacen. 2) La forma en la que WADBView explota las posibilidades de dichos datos difiere en algunos aspectos de lo que hacen dichas herramientas. Para ser claros: WHATSAPP almacena en sus ficheros de datos mucha más información de la que nos muestra en pantalla (tranquilos, nada para la CIA ni la NSA). Posiblemente dichos datos estén ahí almacenados para su explotación en futuras versiones de WHATSAPP. WADBView accede a dichos datos y los muestra junto a los datos habituales de mensajes, contactos, etc. Como digo, WADBView no hace nada que no se haya hecho ya. Sólo espero que te guste lo que hace y la forma en la que lo hace.

Todo aquél que desee probar y evaluar WADBView puede descargar el fichero de instalación en el siguiente enlace: http://goo.gl/DGuo3r

Muchas gracias a todos por vuestra atención. Si decidís probar WADBView espero que os guste y que le encontréis la utilidad.

Un cordial saludo,
WolfBeast

PD.- Si me lo permitís incluiré unos pantallazos del programa.

PD2.- Si inadvertidamente he trasgredido alguna norma de este foro, pido mil disculpas. Mi única intención ha sido compartir algo que creo de utilidad para mucha gente y molestar lo menos posible. Ni busco dinero ni busco "vender" mi programa. En cualquier caso, pido disculpas si, en calidad de usuario novato, he hecho algo inapropiado.

mangel93
09/12/13, 00:44:15
Veremos que tal anda esto.

nankkurunaaisa
09/12/13, 12:24:17
Muy interesante. Gracias por la iniciativa:ok:

WolfBeast
09/12/13, 14:00:16
Ya he resuelto el problema del almacenamiento. Todo aquel que quiera probar WADBView puede descargarlo aquí: http://goo.gl/DGuo3r

Un saludo y muchas gracias.
WolfBeast

nankkurunaaisa
09/12/13, 16:31:47
Descargando y a probar se ha dicho. De nuevo, gracias:ok:

WolfBeast
09/12/13, 16:53:46
Gracias, Sergiorams. Espero que lo encuentres util.

Un saludo,
WolfBeast

cocoepi
10/12/13, 09:45:03
Muy buen trabajo, a ver para cuando podemos hacer lo mismo con el WA de BlackBerry. Saludos

nankkurunaaisa
10/12/13, 10:01:59
Gracias, Sergiorams. Espero que lo encuentres util.

Un saludo,
WolfBeast
Esta tarde te comento que tal:D

WolfBeast
10/12/13, 11:22:11
Cocoepi: trabajaremos sobre ello a ver qué se puede hacer. Por el momento, el "niño" está dando sus primeros pasos. :-)

Sergiorams: muchas gracias. Me gustará conocer tus impresiones.

Un saludo,
WolfBeast

Udjat
12/12/13, 05:45:29
Un visor de archivos *.db :rolleyes: ¿Cualquiera que tenga acceso al teléfono podra leer las conversaciones? ¿Podría husmear en el whatsapp de x persona?

Campe0n
12/12/13, 15:50:46
creo que estaría bien algún tipo de seguridad a la hora de abrir los archivos... y aquí me refiero a algún tipo de contraseña valida para 24h o algún tipo de código que llegará al mobil ...para que así, como bien ya han comentado, no tenga todo el mundo acceso a tu "What's app"

WolfBeast
12/12/13, 16:26:46
Udjat y Campe0n: no os falta razón en vuestros argumentos, pero discrepo en un matiz: la seguridad no debe depender de la herramienta sino del propietario de los datos. Imagina que tu guardas en una hoja excel tus claves bancarias. La seguridad no debe estar implementada en Excel sino en la forma y manera en la que tu salvaguardas tu hoja de cálculo. La herramienta no es por su misma el problema. Es su uso. Poner a salvo tu propio Smartphone y tu Whatsapp es la prioridad. Una vez incumplida esa prioridad mi herramienta es solo una más (sinceramente, creo que la mejor, más cómoda e intuitiva pero esa valoración no me compete a mí) de las que pueden hacer la labor que comentamos. Y hay varias. No pretendo tener razón. Solo es mi perspectiva y mi punto de vista.

Por cierto...

En la próxima beta (que saldrá en pocos días) ya está implementado:
- Soporte de reproducción de los audios y videos incrustados en los mensajes
- Soporte del tratamiento de los mensajes de ubicación (con interactividad con las Google Maps APIs para mostrar el lugar con detalle)

Es algo más que un visor de archivos DB, Udjat... ;-)

Un saludo,
WolfBeast

Udjat
12/12/13, 19:48:04
Seguro que si, obviamente no me refería que se limitará a un visor cualquiera, está diseñado para extraer datos e información y explotar al máximo la vulnerabilidad, útil para un análisis forense, por no decir otra cosa no ética.

Saludos.

nankkurunaaisa
12/12/13, 20:31:09
Estube probandolo ayer al fin con tiempo y fenomenal oiga. Va estupendamente y no he tenido problema alguno a la hora de mirar algunas conversaciones al azar:ok:
Felicidades y de nuevo, enhorabuena crack:D

WolfBeast
13/12/13, 00:14:02
Gracias, Sergiorams, por tus amables palabras. Lo cierto es que está quedando bastante chulo según se le van añadiendo funcionalidades. Seguimos trabajando en ello. :)

Un saludo,
WolfBeast

WolfBeast
15/12/13, 16:34:40
Disponible nueva versión beta (0.35) de WHATSAPP Database Viewer.

NOVEDADES

* Implementado tratamiento de mensajes que contienen geolocalización.
* Añadidos filtros de consulta en la visualización de ficheros de mensajes y de contactos.
* Implementado tratamiento de mensajes que contienen audio y vídeo.
* Corrección de bugs, optimización de rutinas y defectos menores.

Si quieres probarla, http://goo.gl/DGuo3r

WolfBeast
18/12/13, 10:11:33
WADBView comienza a recibir las primeras valoraciones. :)

http://andesken.com/visualizar-mensajes-whatsapp-desde-windows/

Laucals
19/12/13, 20:00:50
No me funciono, utilice dos celulares android y en ninguno “encontro dispositivos usb” ambos los configure como almacenamiento usb y los dos contaban con sus respectivos archivos .db.crypt

WolfBeast
20/12/13, 01:17:14
Como te he comentado en el blog de Andesken, Laucals, lamento que no te funcionase. Tanto en las propias pruebas de Andesken como en las de otros de betatesters, las mías propias y las de algún otro forero de HTCMania (Sergiorams), el programa suele funcionar sin problemas en la detección de dispositivos USB. El cualquier caso y como se indica en todo momento, el programa es un producto BETA que está en desarrollo y por ello susceptible de algún fallo que me encantaría corregir en caso de producirse. Si pudieses indicarme más circunstancias acerca del entorno de ejecución (Versión de Windows, si es de 32 o 64 bits, etc) me sería de gran ayuda para valorar las circunstancias del posible fallo.

Un saludo,
WolfBeast

gelvlc
06/02/14, 19:39:09
Enhorabuena por el proyecto!
He de decir que en mi Galaxy S3 no funciona. Pero porque se conecta como MTP y no da opción de almacenamiento masivo.
Con root y la aplicación USB Mass Storage Enabler he conseguido que lo reconozca perfecto.
Incluso si se nos resiste se puede copiar todo el directorio de whatsapp a un usb y entonces funciona a la perfección jeje.
Gracias por esta aplicación y espero que mejore y permita leer las bases de datos sin tener que estar conectado el móvil. Permitiendo elegir el archivo desde el explorador sería más sencillo.

pepemontero1
16/02/14, 13:25:29
Interesante!

inaxioav
04/03/14, 20:30:48
Gracias WolfBeast!!!! por fin doy con algo asi!!!! ya se que dices que no es algo nuevo, pero hacia tiempo que no buscaba a ver si alguien habia conseguido crear algo por el estilo
No he leido todo el hilo pero... se te puede agradecer de alguna forma economica???? no mucho eh, pero estaria genial poder pagarte el tipico eurillo o 2 como hacen en el google play

inaxioav
04/03/14, 20:31:50
Bueno, que lo mismo ya esta finiquitado este hilo que desde hace meses no has escrito nada... en fin... gracias si lo lees :-)

equ24
06/03/14, 19:54:11
Que pena que no pueda leer los archivos megstore.db.crypt5, estos son los nuevos de la nuevba actualizacion de wappsas

equ24
06/03/14, 21:07:33
package com.whatsapp.util;

import com.whatsapp.eib;
import com.whatsapp.jj;
import com.whatsapp.tbb;
import dk;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class nc
{
private static nc b;
private static final String[] z;
private Cipher a;
private Cipher c;
private Cipher d;
private Cipher e;
private boolean f = false;
private Cipher g;
private Cipher h;
private Cipher i;
private Cipher j;
private Cipher k;
byte[] l = new byte[131072];
private Cipher m;

static
{
String[] arrayOfString = new String[16];
char[] arrayOfChar1 = "4Qd\\\035 @nA\npZhZD1BfG\b1VkK".toCharArray();
int n = arrayOfChar1.length;
int i1 = 0;
char[] arrayOfChar2;
int i5;
char[] arrayOfChar3;
int i9;
char[] arrayOfChar4;
int i13;
char[] arrayOfChar5;
int i17;
char[] arrayOfChar6;
int i21;
char[] arrayOfChar7;
int i25;
char[] arrayOfChar8;
int i29;
char[] arrayOfChar9;
int i33;
char[] arrayOfChar10;
int i37;
char[] arrayOfChar11;
int i41;
char[] arrayOfChar12;
int i45;
char[] arrayOfChar13;
int i49;
char[] arrayOfChar14;
int i53;
char[] arrayOfChar15;
int i57;
char[] arrayOfChar16;
int i61;
if (n <= i1)
{
arrayOfString[0] = new String(arrayOfChar1).intern();
arrayOfChar2 = "5Zd\\\035 @b\\K5Zd\001\r?\024".toCharArray();
int i4 = arrayOfChar2.length;
i5 = 0;
if (i4 <= i5)
{
arrayOfString[1] = new String(arrayOfChar2).intern();
arrayOfChar3 = "5Zd\\\035 @nA\npZhZD1BfG\b1VkK".toCharArray();
int i8 = arrayOfChar3.length;
i9 = 0;
if (i8 > i9)
break label785;
arrayOfString[2] = new String(arrayOfChar3).intern();
arrayOfChar4 = "5Zd\\\035 @b\\K5Zd\001\013%@(G\013p".toCharArray();
int i12 = arrayOfChar4.length;
i13 = 0;
if (i12 > i13)
break label877;
arrayOfString[3] = new String(arrayOfChar4).intern();
arrayOfChar5 = "\030^iT\0055_I]\036!ZH\0365\"A0O\023%e:\023".toCharArray();
int i16 = arrayOfChar5.length;
i17 = 0;
if (i16 > i17)
break label969;
arrayOfString[4] = new String(arrayOfChar5).intern();
arrayOfChar6 = "5Zd\\\035 @b\\K>[t[\0078UkI".toCharArray();
int i20 = arrayOfChar6.length;
i21 = 0;
if (i20 > i21)
break label1061;
arrayOfString[5] = new String(arrayOfChar6).intern();
arrayOfChar7 = "".toCharArray();
int i24 = arrayOfChar7.length;
i25 = 0;
if (i24 > i25)
break label1153;
arrayOfString[6] = new String(arrayOfChar7).intern();
arrayOfChar8 = "".toCharArray();
int i28 = arrayOfChar8.length;
i29 = 0;
if (i28 > i29)
break label1245;
arrayOfString[7] = new String(arrayOfChar8).intern();
arrayOfChar9 = "\021qT".toCharArray();
int i32 = arrayOfChar9.length;
i33 = 0;
if (i32 > i33)
break label1337;
arrayOfString[8] = new String(arrayOfChar9).intern();
arrayOfChar10 = "5Zd\\\035 @b\\K%Zt[\024 [uZ\0014QiM\0134]iI".toCharArray();
int i36 = arrayOfChar10.length;
i37 = 0;
if (i36 > i37)
break label1429;
arrayOfString[9] = new String(arrayOfChar10).intern();
arrayOfChar11 = "\021qT\001'\022w(~/\023g2~\0054Pn@\003".toCharArray();
int i40 = arrayOfChar11.length;
i41 = 0;
if (i40 > i41)
break label1521;
arrayOfString[10] = new String(arrayOfChar11).intern();
arrayOfChar12 = "".toCharArray();
int i44 = arrayOfChar12.length;
i45 = 0;
if (i44 > i45)
break label1613;
arrayOfString[11] = new String(arrayOfChar12).intern();
arrayOfChar13 = "\021gDg-".toCharArray();
int i48 = arrayOfChar13.length;
i49 = 0;
if (i48 > i49)
break label1705;
arrayOfString[12] = new String(arrayOfChar13).intern();
arrayOfChar14 = "".toCharArray();
int i52 = arrayOfChar14.length;
i53 = 0;
if (i52 > i53)
break label1797;
arrayOfString[13] = new String(arrayOfChar14).intern();
arrayOfChar15 = "5Zd\\\035 @b\\K9ZqO\b9PfB\003 UuO\t".toCharArray();
int i56 = arrayOfChar15.length;
i57 = 0;
if (i56 > i57)
break label1889;
arrayOfString[14] = new String(arrayOfChar15).intern();
arrayOfChar16 = "5Zd\\\035 @b\\K9ZqO\b9PlK\035".toCharArray();
int i60 = arrayOfChar16.length;
i61 = 0;
if (i60 > i61)
break label1981;
arrayOfString[15] = new String(arrayOfChar16).intern();
z = arrayOfString;
b = null;
}
}
else
{
int i2 = arrayOfChar1[i1];
int i3;
switch (i1 % 5)
{
default:
i3 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar1[i1] = ((char)(i3 ^ i2));
i1++;
break;
i3 = 80;
continue;
i3 = 52;
continue;
i3 = 7;
continue;
i3 = 46;
}
}
int i6 = arrayOfChar2[i5];
int i7;
switch (i5 % 5)
{
default:
i7 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar2[i5] = ((char)(i7 ^ i6));
i5++;
break;
i7 = 80;
continue;
i7 = 52;
continue;
i7 = 7;
continue;
i7 = 46;
}
label785: int i10 = arrayOfChar3[i9];
int i11;
switch (i9 % 5)
{
default:
i11 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar3[i9] = ((char)(i11 ^ i10));
i9++;
break;
i11 = 80;
continue;
i11 = 52;
continue;
i11 = 7;
continue;
i11 = 46;
}
label877: int i14 = arrayOfChar4[i13];
int i15;
switch (i13 % 5)
{
default:
i15 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar4[i13] = ((char)(i15 ^ i14));
i13++;
break;
i15 = 80;
continue;
i15 = 52;
continue;
i15 = 7;
continue;
i15 = 46;
}
label969: int i18 = arrayOfChar5[i17];
int i19;
switch (i17 % 5)
{
default:
i19 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar5[i17] = ((char)(i19 ^ i18));
i17++;
break;
i19 = 80;
continue;
i19 = 52;
continue;
i19 = 7;
continue;
i19 = 46;
}
label1061: int i22 = arrayOfChar6[i21];
int i23;
switch (i21 % 5)
{
default:
i23 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar6[i21] = ((char)(i23 ^ i22));
i21++;
break;
i23 = 80;
continue;
i23 = 52;
continue;
i23 = 7;
continue;
i23 = 46;
}
label1153: int i26 = arrayOfChar7[i25];
int i27;
switch (i25 % 5)
{
default:
i27 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar7[i25] = ((char)(i27 ^ i26));
i25++;
break;
i27 = 80;
continue;
i27 = 52;
continue;
i27 = 7;
continue;
i27 = 46;
}
label1245: int i30 = arrayOfChar8[i29];
int i31;
switch (i29 % 5)
{
default:
i31 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar8[i29] = ((char)(i31 ^ i30));
i29++;
break;
i31 = 80;
continue;
i31 = 52;
continue;
i31 = 7;
continue;
i31 = 46;
}
label1337: int i34 = arrayOfChar9[i33];
int i35;
switch (i33 % 5)
{
default:
i35 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar9[i33] = ((char)(i35 ^ i34));
i33++;
break;
i35 = 80;
continue;
i35 = 52;
continue;
i35 = 7;
continue;
i35 = 46;
}
label1429: int i38 = arrayOfChar10[i37];
int i39;
switch (i37 % 5)
{
default:
i39 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar10[i37] = ((char)(i39 ^ i38));
i37++;
break;
i39 = 80;
continue;
i39 = 52;
continue;
i39 = 7;
continue;
i39 = 46;
}
label1521: int i42 = arrayOfChar11[i41];
int i43;
switch (i41 % 5)
{
default:
i43 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar11[i41] = ((char)(i43 ^ i42));
i41++;
break;
i43 = 80;
continue;
i43 = 52;
continue;
i43 = 7;
continue;
i43 = 46;
}
label1613: int i46 = arrayOfChar12[i45];
int i47;
switch (i45 % 5)
{
default:
i47 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar12[i45] = ((char)(i47 ^ i46));
i45++;
break;
i47 = 80;
continue;
i47 = 52;
continue;
i47 = 7;
continue;
i47 = 46;
}
label1705: int i50 = arrayOfChar13[i49];
int i51;
switch (i49 % 5)
{
default:
i51 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar13[i49] = ((char)(i51 ^ i50));
i49++;
break;
i51 = 80;
continue;
i51 = 52;
continue;
i51 = 7;
continue;
i51 = 46;
}
label1797: int i54 = arrayOfChar14[i53];
int i55;
switch (i53 % 5)
{
default:
i55 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar14[i53] = ((char)(i55 ^ i54));
i53++;
break;
i55 = 80;
continue;
i55 = 52;
continue;
i55 = 7;
continue;
i55 = 46;
}
label1889: int i58 = arrayOfChar15[i57];
int i59;
switch (i57 % 5)
{
default:
i59 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar15[i57] = ((char)(i59 ^ i58));
i57++;
break;
i59 = 80;
continue;
i59 = 52;
continue;
i59 = 7;
continue;
i59 = 46;
}
label1981: int i62 = arrayOfChar16[i61];
int i63;
switch (i61 % 5)
{
default:
i63 = 100;
case 0:
case 1:
case 2:
case 3:
}
while (true)
{
arrayOfChar16[i61] = ((char)(i63 ^ i62));
i61++;
break;
i63 = 80;
continue;
i63 = 52;
continue;
i63 = 7;
continue;
i63 = 46;
}
}

private nc()
{
try
{
SecretKeySpec localSecretKeySpec1 = new SecretKeySpec(tbb.l.getBytes(z[12]), z[8]);
SecretKeySpec localSecretKeySpec2 = new SecretKeySpec(dk.a(z[13]), z[8]);
SecretKeySpec localSecretKeySpec3 = new SecretKeySpec(jj.a(dk.a(z[7])), z[8]);
IvParameterSpec localIvParameterSpec = new IvParameterSpec(dk.a(z[4]));
this.i = Cipher.getInstance(z[8]);
this.g = Cipher.getInstance(z[8]);
this.j = Cipher.getInstance(z[8]);
this.m = Cipher.getInstance(z[11]);
this.a = Cipher.getInstance(z[10]);
this.h = Cipher.getInstance(z[8]);
this.d = Cipher.getInstance(z[8]);
this.k = Cipher.getInstance(z[8]);
this.c = Cipher.getInstance(z[11]);
this.e = Cipher.getInstance(z[10]);
this.i.init(1, localSecretKeySpec1);
this.g.init(1, localSecretKeySpec2);
this.j.init(1, localSecretKeySpec3);
this.m.init(1, localSecretKeySpec3, localIvParameterSpec);
this.a.init(1, localSecretKeySpec3, localIvParameterSpec);
this.h.init(2, localSecretKeySpec1);
this.d.init(2, localSecretKeySpec2);
this.k.init(2, localSecretKeySpec3);
this.c.init(2, localSecretKeySpec3, localIvParameterSpec);
this.e.init(2, localSecretKeySpec3, localIvParameterSpec);
this.f = true;
return;
}
catch (UnsupportedEncodingException localUnsupportedEncodingException)
{
Log.a(z[9], localUnsupportedEncodingException);
return;
}
catch (NoSuchPaddingException localNoSuchPaddingException)
{
Log.a(z[6], localNoSuchPaddingException);
return;
}
catch (NoSuchAlgorithmException localNoSuchAlgorithmException)
{
Log.a(z[5], localNoSuchAlgorithmException);
return;
}
catch (InvalidKeyException localInvalidKeyException)
{
Log.a(z[15], localInvalidKeyException);
return;
}
catch (InvalidAlgorithmParameterException localInvalidAlgorithmParameterException)
{
Log.a(z[14], localInvalidAlgorithmParameterException);
}
}

public static nc a()
{
try
{
if (b == null)
b = new nc();
return b;
}
catch (IllegalStateException localIllegalStateException)
{
throw localIllegalStateException;
}
}

public void a(InputStream paramInputStream, OutputStream paramOutputStream, int paramInt1, int paramInt2, long paramLong, eib parameib, yc paramyc)
{
int n = Log.a;
try
{
if (!this.f)
throw new IllegalStateException(z[0]);
}
catch (IllegalStateException localIllegalStateException)
{
throw localIllegalStateException;
}
switch (gc.a[paramyc.ordinal()])
{
default:
case 1:
case 2:
case 3:
case 4:
case 5:
}
while (true)
{
long l1 = 0L;
do
{
do
{
int i1 = paramInputStream.read(this.l);
if (i1 < 0)
break;
paramOutputStream.write(this.l, 0, i1);
l1 += i1;
}
while ((parameib == null) || (paramInt2 <= 0));
parameib.a(l1, paramLong, paramInt1, paramInt2);
}
while (n == 0);
return;
CipherInputStream localCipherInputStream4 = new CipherInputStream(paramInputStream, this.h);
if (n != 0)
{
paramInputStream = localCipherInputStream4;
CipherInputStream localCipherInputStream3 = new CipherInputStream(paramInputStream, this.d);
if (n != 0)
{
paramInputStream = localCipherInputStream3;
CipherInputStream localCipherInputStream2 = new CipherInputStream(paramInputStream, this.k);
if (n != 0)
{
paramInputStream = localCipherInputStream2;
CipherInputStream localCipherInputStream1 = new CipherInputStream(paramInputStream, this.c);
if (n != 0)
{
paramInputStream = localCipherInputStream1;
paramInputStream = new CipherInputStream(paramInputStream, this.e);
}
else
{
paramInputStream = localCipherInputStream1;
}
}
else
{
paramInputStream = localCipherInputStream2;
}
}
else
{
paramInputStream = localCipherInputStream3;
}
}
else
{
paramInputStream = localCipherInputStream4;
}
}
}

// ERROR //
public void a(InputStream paramInputStream, OutputStream paramOutputStream, yc paramyc)
{
// Byte code:
// 0: getstatic 166 com/whatsapp/util/Log:a I
// 3: istore 4
// 5: aload_0
// 6: getfield 92 com/whatsapp/util/nc:f Z
// 9: ifeq +87 -> 96
// 12: getstatic 174 com/whatsapp/util/gc:a [I
// 15: aload_3
// 16: invokevirtual 180 com/whatsapp/util/yc:ordinal ()I
// 19: iaload
// 20: tableswitch default:+36 -> 56, 1:+94->114, 2:+116->136, 3:+138->158, 4:+160->180, 5:+182->202
// 57: aload_0
// 58: getfield 90 com/whatsapp/util/nc:l [B
// 61: invokevirtual 186 java/io/InputStream:read ([B)I
// 64: istore 12
// 66: iload 12
// 68: iflt +19 -> 87
// 71: aload_2
// 72: aload_0
// 73: getfield 90 com/whatsapp/util/nc:l [B
// 76: iconst_0
// 77: iload 12
// 79: invokevirtual 192 java/io/OutputStream:write ([BII)V
// 82: iload 4
// 84: ifeq -28 -> 56
// 87: aload_2
// 88: invokevirtual 208 java/io/OutputStream:close ()V
// 91: iload 4
// 93: ifeq +214 -> 307
// 96: new 161 java/lang/IllegalStateException
// 99: dup
// 100: getstatic 73 com/whatsapp/util/nc:z [Ljava/lang/String;
// 103: iconst_2
// 104: aaload
// 105: invokespecial 169 java/lang/IllegalStateException:<init> (Ljava/lang/String;)V
// 108: athrow
// 109: astore 5
// 111: aload 5
// 113: athrow
// 114: new 210 javax/crypto/CipherOutputStream
// 117: dup
// 118: aload_2
// 119: aload_0
// 120: getfield 128 com/whatsapp/util/nc:i Ljavax/crypto/Cipher;
// 123: invokespecial 213 javax/crypto/CipherOutputStream:<init> (Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
// 126: astore 17
// 128: iload 4
// 130: ifeq +263 -> 393
// 133: aload 17
// 135: astore_2
// 136: new 210 javax/crypto/CipherOutputStream
// 139: dup
// 140: aload_2
// 141: aload_0
// 142: getfield 130 com/whatsapp/util/nc:g Ljavax/crypto/Cipher;
// 145: invokespecial 213 javax/crypto/CipherOutputStream:<init> (Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
// 148: astore 16
// 150: iload 4
// 152: ifeq +235 -> 387
// 155: aload 16
// 157: astore_2
// 158: new 210 javax/crypto/CipherOutputStream
// 161: dup
// 162: aload_2
// 163: aload_0
// 164: getfield 132 com/whatsapp/util/nc:j Ljavax/crypto/Cipher;
// 167: invokespecial 213 javax/crypto/CipherOutputStream:<init> (Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
// 170: astore 15
// 172: iload 4
// 174: ifeq +207 -> 381
// 177: aload 15
// 179: astore_2
// 180: new 210 javax/crypto/CipherOutputStream
// 183: dup
// 184: aload_2
// 185: aload_0
// 186: getfield 134 com/whatsapp/util/nc:m Ljavax/crypto/Cipher;
// 189: invokespecial 213 javax/crypto/CipherOutputStream:<init> (Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
// 192: astore 14
// 194: iload 4
// 196: ifeq +179 -> 375
// 199: aload 14
// 201: astore_2
// 202: new 210 javax/crypto/CipherOutputStream
// 205: dup
// 206: aload_2
// 207: aload_0
// 208: getfield 136 com/whatsapp/util/nc:a Ljavax/crypto/Cipher;
// 211: invokespecial 213 javax/crypto/CipherOutputStream:<init> (Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V
// 214: astore 11
// 216: aload 11
// 218: astore_2
// 219: goto -163 -> 56
// 222: astore 8
// 224: new 215 java/lang/StringBuilder
// 227: dup
// 228: invokespecial 216 java/lang/StringBuilder:<init> ()V
// 231: getstatic 73 com/whatsapp/util/nc:z [Ljava/lang/String;
// 234: iconst_1
// 235: aaload
// 236: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 239: aload 8
// 241: invokevirtual 223 java/io/IOException:toString ()Ljava/lang/String;
// 244: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 247: invokevirtual 224 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 250: invokestatic 226 com/whatsapp/util/Log:e (Ljava/lang/String;)V
// 253: aload_2
// 254: invokevirtual 208 java/io/OutputStream:close ()V
// 257: goto -166 -> 91
// 260: astore 9
// 262: new 215 java/lang/StringBuilder
// 265: dup
// 266: invokespecial 216 java/lang/StringBuilder:<init> ()V
// 269: getstatic 73 com/whatsapp/util/nc:z [Ljava/lang/String;
// 272: iconst_3
// 273: aaload
// 274: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 277: aload 9
// 279: invokevirtual 223 java/io/IOException:toString ()Ljava/lang/String;
// 282: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 285: invokevirtual 224 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 288: astore 10
// 290: aload 10
// 292: invokestatic 226 com/whatsapp/util/Log:e (Ljava/lang/String;)V
// 295: goto -204 -> 91
// 298: astore 6
// 300: aload_2
// 301: invokevirtual 208 java/io/OutputStream:close ()V
// 304: aload 6
// 306: athrow
// 307: return
// 308: astore 7
// 310: new 215 java/lang/StringBuilder
// 313: dup
// 314: invokespecial 216 java/lang/StringBuilder:<init> ()V
// 317: getstatic 73 com/whatsapp/util/nc:z [Ljava/lang/String;
// 320: iconst_3
// 321: aaload
// 322: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 325: aload 7
// 327: invokevirtual 223 java/io/IOException:toString ()Ljava/lang/String;
// 330: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 333: invokevirtual 224 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 336: invokestatic 226 com/whatsapp/util/Log:e (Ljava/lang/String;)V
// 339: goto -35 -> 304
// 342: astore 13
// 344: new 215 java/lang/StringBuilder
// 347: dup
// 348: invokespecial 216 java/lang/StringBuilder:<init> ()V
// 351: getstatic 73 com/whatsapp/util/nc:z [Ljava/lang/String;
// 354: iconst_3
// 355: aaload
// 356: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 359: aload 13
// 361: invokevirtual 223 java/io/IOException:toString ()Ljava/lang/String;
// 364: invokevirtual 220 java/lang/StringBuilder:append (Ljava/lang/String;)Ljava/lang/StringBuilder;
// 367: invokevirtual 224 java/lang/StringBuilder:toString ()Ljava/lang/String;
// 370: astore 10
// 372: goto -82 -> 290
// 375: aload 14
// 377: astore_2
// 378: goto -322 -> 56
// 381: aload 15
// 383: astore_2
// 384: goto -328 -> 56
// 387: aload 16
// 389: astore_2
// 390: goto -334 -> 56
// 393: aload 17
// 395: astore_2
// 396: goto -340 -> 56
//
// Exception table:
// from to target type
// 96 109 109 java/io/IOException
// 12 56 222 java/io/IOException
// 56 66 222 java/io/IOException
// 71 82 222 java/io/IOException
// 114 128 222 java/io/IOException
// 136 150 222 java/io/IOException
// 158 172 222 java/io/IOException
// 180 194 222 java/io/IOException
// 202 216 222 java/io/IOException
// 253 257 260 java/io/IOException
// 12 56 298 finally
// 56 66 298 finally
// 71 82 298 finally
// 114 128 298 finally
// 136 150 298 finally
// 158 172 298 finally
// 180 194 298 finally
// 202 216 298 finally
// 224 253 298 finally
// 300 304 308 java/io/IOException
// 87 91 342 java/io/IOException
}

public boolean b()
{
return this.f;
}
}

equ24
06/03/14, 21:08:56
esto lo he encontrado por ahi, es una clave sobre el crypt5 no se como se come. Lo dejo aqui por si alguin me da la receta.
saludos

anas152009
27/03/14, 14:34:24
Hola, quisiera saber si ya funciona para los archivos db.scrypt5. Cambié de celular (aparato) y guardé las conversaciones, me llevé el archivo a la carpeta Databases de WhatsApp y procedí a instalarla, pero aunque me dijo que había encontrado una copia de seguridad no me muestra ninguna conversación.
A éstas alturas ya sólo me interesan 3 conversaciones que tienen que ver con mi trabajo, pero no he encontrado como abrir el archivo.
Agradezco la colaboración.

joelonzapien
27/05/14, 19:33:56
disculpa, quiza estoy un poco atrsado en informacion pero...baje el programa y todo empieza muy bien, pero a la hora en que lee los ficheros como que no los lee bien y me aparecen como en gris, selecciono uno y me sale que no he seleccionado ningun fichero..me podrias explicar que he hecho mal??

clarens
11/07/14, 19:39:04
Hola, a mi no me esta funcionando. No detcta el Movil (S3) en el de mi novia si pero luego no deja seleccionar los archivos que aparecen en negrita.
Alguna soluycion para el mio. Esta conectado en usb y el pc lo detecta bien.
Un salduo