
最近,我需要与人分享一些聊天记录. 因为大量的截图太麻烦了,我想直接获取微信数据并顺便备份一下. 按照常见过程操作,获取EnMicroMsg.db文件,找到密码,然后导出. 但是,获取密码后微信表情怎么导出,用于注册微信的手机imei不再可用,尝试当前手机的手机也失败了,因此只能采取蛮力破解的方式. 有关详情,请参见下文.
整个过程分为三个步骤:
提取聊天消息以获取密码,解密并导出聊天记录
微信用户消息存储在sqlite3文件中,该文件位于/data/data/com.tencent.mm/MicroMsg/{hash}/EnMicroMsg.db. 只要可以取出,后面就没有太多障碍了. 但是,唯一有权访问/data/data/com.tencent.mm文件夹的用户是: 1.腾讯开发者用户2. root. 由于我的手机已经扎根,因此导出此文件很容易. 这是针对非root用户的一些想法:
由于该机器没有超级用户权限,因此我们将通过微信聊天记录迁移将当前手机的聊天记录转移到具有超级用户权限的系统中. 最可靠的方法是找到有根手机. 如果没有这样的设备,您也可以在计算机上安装Android模拟器. 通常具有root权限. 我已经尝试了Overnight Simulator,但是它仅支持Android 4,这已经是一个古老的版本. 登录微信账号后,一段时间后闪回. 除了夜神之外,还有很多模拟器可供尝试,读者可以自己找到它们.
某些手机制造商提供了系统级备份软件功能,该功能可用于获取微信存储数据目录的备份,然后解压缩备份文件以获取此信息. 我知道小米,但我还没有尝试过. 三星手机曾经支持此功能,但后来出于安全原因取消了该功能.
由于开发人员可以访问其应用程序的数据目录,因此他也可以假装自己是开发人员并通过adb shell复制数据. 根据Android的安全政策,只有以开发模式打包的应用程序才能使用adb shell访问数据目录. 因此,您需要获取处于开发状态的微信安装包. 我尝试反编译微信,更改内部的开发模式标记,然后将其打包以安装,但是该过程非常繁琐,并且由于签名与第二次打包期间的签名不同,因此无法替换之前的微信应用程序(即使已安装)以前的数据. 但是我没有Android开发经验,也许经验丰富的开发人员可以工作.

最后,如果以前没有root用户微信表情怎么导出,但您希望获得root用户权限才能获取聊天记录,则必须仔细考虑它,因为root用户过程中有一个步骤要求删除所有数据. 不删除强制根的后果是不可预测的.
上一步中取出的EnMicroMsg.db文件已加密,加密方法为SQLCipher V2. 这是两种获取密码的方法.
Internet上的许多博客都提到了生成微信密码的方法,该密码是将手机的IMEI号码与微信uin串联后的MD5值的前7位. MD5用小写字母表示.
第一个是IMEI,您可以在手机上拨打*#06#进行查看,每个卡插槽一个IMEI(取前14位数字),每个手机一个MEID,请尝试一下. 但是令人痛心的是,IMEI可能不是当前的手机. 我还看到有这样的说法,即注册微信时手机的IMEI.
其余的uin,类似于微信用户的id,位于/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml:


uin是否为负,只需将其与IMEI作为字符串连接即可. 然后使用IMEI + uin字符串来计算MD5值(百度将提供一个工具来进行计算),并取出密码的前7位数字(小写).
我通过上一节中的过程获得的密码不正确. 即使是高中时代使用的手机也曾尝试过,但也失败了. 但是,密码只有7位数字,并且字符集也受到限制(MD5是十六进制字符串),因此总共只有$ 16 ^ 7 $的可能性,如果破解蛮力,计算量是可以接受的.
Internet上有现成的工具,因此我不会动手: EnMicroMsg.db-Password-Cracker. 该程序使用CPU. 我的i7-6700HQ的运行速度约为200 / s,需要15天.
这个时间长度仍然有点不能接受. 幸运的是,在已完成CUDA版本但不会在该仓库下发布的问题中,有一个体面的用户说他不会发布他编写的GPU版本. 仍发布: SQLCipher-Password-Cracker-OpenCL. 要运行它,您需要OpenCL + CUDA环境. 项目的自述文件中有更多详细的配置步骤. 建立环境花费了很多精力. 由于CUDA的各种问题,折腾了一天的时间.
该程序的速度非常出色,我的GPU是GTX 1060,平均速度为190k / s,最坏的情况只有20分钟.
我跑步后发现没有找到密码. 我对其进行了研究,然后发现问题Dose在2018年2月不适用于我的的原因. 微信7.0版更改了的读写头,从而成功进行了解密. 确定存在问题,该问题已在CPU版本程序的提交20eb4中修复. 但是,GPU版本没有更改,因此您需要手动更正它:
将Lib / pbkdf2-sha1_aes-256-cbc.cl文件的第752行(链接)修改为

if(((uint)(data[5] ^ iv[5])==0x40) && ((uint)(data[6] ^ iv[6])==0x20) && ((uint)(data[7] ^ iv[7])==0x20))
. 然后再次运行,成功获得密码.
如果这是蛮力方法,则程序将在获取密码的同时保存解密的. 如果这是一种计算方法,则可以参考微信转储项目,该项目提供了使用IMEI和uin进行解密的脚本.
解密后的是一个普通的sqlite3文件,可以用很多软件打开. 建议在这里使用SQLiteStudio.

消息表中有所有聊天记录. 当然,无论使用什么软件,可读性都非常差. 需要一个程序来根据聊天组/人单独显示它们.

微信转储库是一个很好的库,用于从中提取消息并对其进行分类和导出. 它需要在linux + python 2环境中运行. 有关具体配置,请参见项目README.
列出所有联系人:
./list-chats.py decrypted.db
将所有聊天记录导出为文本文件:
./count-message.sh output_dir
将会话呈现为html文件:
./dump-html.py <contact_display_name>
可以使用浏览器打开导出的html文件,也可以将其进一步打印为pdf.

本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-198537-1.html
别用这样的新闻来误导读者
现在国内投资环境是这样的