手机端微信聊天记录数据库解密过程记录
出发点是想找回微信被撤回的信息。
根据《PC版QQ微信防撤回补丁》文章,拦截PC端的撤回函数,新的撤回消息将不会被撤回。但是打补丁前撤回的消息,依然无法查看。
之前发现,手机端的微信,图片、视频信息撤回后,可以在本地找到相应的记录。由此猜测,文本信息是否本地依然有记录。查询资料得知,文本的聊天记录,存放在Sqlite数据库中。本来想破解PC端的数据库,但是收集到的资料都是手机端的。
根据《手把手教你破解微信本地数据库(利用Sqlcipher查看)》和《Android动态破解微信本地数据库(EnMicroMsg.db)》,得知微信聊天记录的数据库存放在/data/data/com.tencent.mm/MicroMsg/<user-md5>路径下的EnMicroMsg.db数据库中。
进一步研究发现,以上两个教程的源头都来着《Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息》(目前有新更新《微信数据库最新的解密方式,使用C++代码解密微信加密数据库信息!》)。
实践过程中如下:
1、获取EnMicroMsg.db文件
访问该文件需要root权限,一开始打算在已经Root的虚拟机中获取,尝试多款虚拟机后,发现新版本的微信无法正常安装。最后Genymotion + Android 4.2.2 + Genymotion-ARM-Translation_v1.1 + Wechat 5.3组合,在虚拟机中正常启动微信。
但是微信版本过低,无法登陆。最后选择在MI 5上获取该文件。MI 5虽然是开发版系统,但是还没Root,在http://www.miui.com/unlock/index.html下载解锁工具后,可以在 安全中心的权限管理中获取Root权限。
解锁过程中发现,Fastboot模式下无法连接电脑,猜测是驱动问题,在http://www.miui.com/shuaji-393.html下载小米线刷工具,安装驱动后解决无法连接问题。
Root后,安装微信登陆,生成数据库,通过adb命令(cp res des)拷贝目标文件到/sdcard/Download路径下。通过USB文件传输模式拷贝到电脑。
2、获取IMEI与uin(uin是个整型,微信分配个用户的唯一ID)
IMEI获取比较简单,拨号界面输入*#06#获取,MI 5支持双卡,有两个IMEI号,都记录下来。
862033030*****2 862033030*****6 |
uin存储在/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml文件中,用同样的方法拷贝到电脑,查看uin值:
3、计算密码
密码为MD5(IMEI+uin)的前7位,计算过程中,所有字母均为小写。
在https://md5jiami.51240.com/计算,或者直接将拼接后的字符串存放在txt中,通过Md5checker工具计算。
4、通过SQLite管理软件查看数据
根据文章的截图,选用SQLiteDatabaseBrowser,但是两组密码均无效。
根据《手工解密微信聊天数据库的四个大坑》,发现是工具的问题,最新版的SQLiteDatabaseBrowser无法兼容微信的数据库(应该是微信为了兼容性,一直没升级)。应该选用V2.1版的工具,百度sqlcipher 2.1,可以下载到合适的版本。
成功解密数据库:
发现,撤回的文本消息直接被覆盖了,并没有保留在本地。
后续:
以上破解的手机端的数据库。后续发现PC端的微信,也是使用Sqlite数据库,但使用同样的密码,无法打开。查询后发现,PC端的密码和手机端不一样,为32位密码。目前网上没有详细的获取资料。
进一步发现,《安卓微信数据库解密》中,对微信数据库有了进一步的研究。
收获:
- 小米手机的Root流程
- 了解Sqlite数据库的管理工具:SQLiteExpert、SQLiteDatabaseBrowser
- MD5Checker的另类用法
- 了解sqlcipher库可以用于加密sqlite数据库