微信加密数据库密码

博客分类: 技术 阅读次数: comments

微信加密数据库密码

概要

微信的核心数据库是EnMicroMsg.db,但是是加密操作的,而加密的密码是设备的IMEI+用户的UIN值(在SP中保存了),计算MD5(字符是小写),取出前7位字符即可。

获取 IMEI+UIN

首先获取设备的IMEI,可以直接拨打:*#06#即可查看;然后查看他的uin值,直接读取SharedPreferences中的值即可,然后拼接到一起,用txt文件档保存一下,在使用HashTab工具进行查看属性即可得到MD5的值

总结

  1. 猜想信息是保存在本地数据库 想得到聊天记录和通讯录信息,我们的想法是这些信息在设备没有连接网络的时候也是可以查看的,所以我们猜想这些信息是保存在本地的数据库中的。

  2. 使用sqlite工具查看信息报错 我们把微信的沙盒数据全部导出到本地,然后查找db文件,找到了EnMicroMsg.db文件,使用sqlite expert工具进行查看报错,提示数据库被加密了。

  3. 根据数据库的常规使用流程找到入口 我们在Android中使用数据库的时候都会用到SQLiteDatabase类,所以可以全局搜索这个类,找到这个类的定义,然后再找到他的一些open方法,看看这些方法的调用地方。

  4. 通过数据库的入口方法进行代码跟踪 知道了open系列方法的调用地方,就开始使用Jadx工具进行代码跟踪,最后跟踪到了有利信息,就是密码是用户设备的IMEI+uin值计算MD5值,注意是小写字符,然后在取MD5的前7位字符构成的密码。

  5. 获取密码流程 这里知道了密码的构成,获取就比较简单了,使用*#06#拨号直接获取IMEI值,然后在去查看SharedPreferences中的auth_info_key_prefs.xml文件中的_auth_uin值就是用户的uin值,然后进行拼接,使用HashTab计算出MD5值,获取前7位字符串。

  6. 使用sqlcipher工具查看数据库 得到密码之后,使用sqlcipher工具进行数据库的查看,可以找到通讯录表格recontact和聊天记录表格message。