微信聊天记录分析

解密聊天记录数据库


2017年2月12日更新:微信6.5.*可能已经更改读取方式,具体还没了解。

微信6.2.5使用sqlcipher进行AES加密,因此我们要得到密钥,根据编译的信息,可以得知微信使用 key=md5(IMEI+uin) | cut -c -7 , 即取md5的前7位做为密钥。解密微信聊天数据库就是简单的一行代码,(注意sqlcipher新版本(3.x)默认不向下兼容,需要使用,cipher_use_hmac 是兼容1.1.x,kdf_iter 是兼容2.1.x的)。

IMEI很容易获取,uin在shared_prefs/多个文件中存在,如com.tencent.mm_preferences.xml,auth_info_key_prefs.xml, system_config_prefs.xml。理论上是在system_config_prefs.xml文件中的default_uin,注意有可能是负的,之前我没有意识到这个问题,导致一直解码不成功,直到看了这个博客。ps. 负数是因为溢出 int32(2639833126) = -1655134170 。

解密曾经登录过的帐号(多个用户的微信)


网上的解密聊天记录都是以登录帐号为基础的,直到我阴差阳错发现这个牛逼的微信聊天记录导出应用。重点不是在他能导出,而是他能导出之前登录过的帐号的聊天记录。仔细的思考一下,一旦有过登录,微信就会生成一个32位长的用户文件目录如 da60995c77c8cd8b47f69cc38e7a52cc ,一看就知道是个md5的hash。根据测试,在不同的机子上这个文件夹名是不变的,也就是说只跟微信ID(wx_user_name, uin…)有关,所以是跟微信哪个id是一一映射的? 感觉还是跟uin有关。

分析那个应用的包网络通信,发现他跟服务器通信只用了文件目录名如 da60995c77c8cd8b47f69cc38e7a52cc ,所以可以肯定能够通过目录名逆推uin。我尝试了不同的组合 wx_uin,wechat_uin... ,都不对。看来只能反编译。

反编译

直觉上来说,反编译微信的难度太大。还是反编译那个聊天记录导出应用好了。写应用的那哥们还是比较专业的,都做了加密和混淆,而且貌似是手动的,导致里面的字符串都难以识别。经过努力,还是破解了那哥们的加密方式,看得懂应用源码中的字符串就事半功倍,不到1小时就发现原来

TM就是前面加了”mm”。注意 uin=-1655134170 是负的。。至此,就能够逆推uin,也就是说你手机丢了,别人还是能够破解你的微信聊天记录,因为uin是int啊,找md5不要太快!所以多用户的微信当某一用户退出后能通过这种方法破解得到uin,然后破解聊天记录文件。爽歪歪。。

聊天记录整理


这方面已经很人做了,比如github上的wechat-dump,效果还是可以的,稍微有点问题,日后再改

日后改了一些东西,最重要的是微信的头像文件不再单一保存,而是用 avatar.index 来索引,保存在一个大文件中avatar.block.0000x。经测试,可以得知用户头像以avatar.index中的数值为起始位置,找到avatar.block.0000x相应连续的96×96×3×4个连续字节就算用户头像的bitmap(png.bm)。具体见代码

 

 

国庆期间,别人在玩,我在写代码。这波不亏

 

参考


在Genymotion中使用微信

由于手机焊飞了,需要临时有个代替的微信,但是平板在实验室太不方便,就想能不能在电脑上运行微信。网页版的微信不过瘾啊。这折腾了我整整一天。

Genymotion

Genymotion 号称是最快的android模拟器,因为他用的是x86的架构,直接在virtual box上运行,总之安装了就行了。然后得安装一个镜像。这一步我就傻逼了。如果要用微信这些,必须得用Android 4.3以下的,因为4.4用了不同的虚拟机ART (我用的是4.2.2的,好像4.3的微信也会闪退)。为什么这样会有问题呢,因为Genymotion是X86的,他在2.0版本移除了ARM和GAPPs,他要运行apk的话要有一个指令翻译的东西。否则就会出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE或者安装之后闪退。

ARM 支持

要正常使用这些APK,就要有ARM的指令翻译。根据这个Gist,我们可以安装一个叫ARM Translation的包,如果有需要的话再安装一些google的软件。而这个东西,只支持4.3之前的版本,之后的版本会有bug,作者自己也说了

Xprivacy

有时候微信会检测是否是模拟器登陆,导致帐号被封。根据网友的经验,使用Xprivacy禁用微信的一些请求后可以防止被封。可以自行安装xposedxprivacy,好像xposed也很好玩。

 

Wechat

我用的是5.3.1版本的(原链接失效,我放了一份在百度云,密码是 gfd3),去掉了更新提示,但保留原签名,就不会出现下面这种警告信息。

当前设备安装了非官方客户端。为了帐号安全,请不要使用非官方软件。访问http://weixin.qq.com/下载安装微信官方最新版本。如继续使用非官方软件,通过当前设备登录的所有帐号都可能被封号。

然后用Xprivacy去掉微信的一些权限,反正我用到现在都没有被封号。但是每天凌晨都提醒我

你的微信登录环境存在异常。为了帐号安全,请不要通过模拟器等途径登录微信。如继续在异常环境下使用微信,通过当前设备登录的所有帐号都可能被封号。


 

看看现在的模拟器安卓,是非常不卡的。

genymotion