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