前言

最近我在阅读微信数据库最新的解密方式,使用C++代码解密微信加密数据库信息!文章的时候,对破解微信数据库产生了浓厚的兴趣,所以,我编写了这篇文章记录下我对微信数据库破解的一些过程。在这里,我还特意的去了解了下文章的作者姜维发现他还写了一本关于反编译的书《Android应用安全防护和逆向分析》,对于反编译这块入门很不错,大家可以去下载看看,不过我还是支持大家去支持正版。

数据准备

首先,我们下载一个360一键ROOT,将手机成功ROOT后。进入到微信的文件目录,将沙盒里面的数据全部拷贝到本地电脑中。

  • 在手机的sd卡中创建一个临时目录,用于存放微信的数据.
  • 拷贝微信的沙盒数据到当前文件夹中。
  • 数据准备完成
//mk
mkdir /storage/A1AE-1701/tmp/a_wechat/MicroMsg//copy
cp -r /data/data/com.tencent.mm/MicroMsg/. .///pull
adb pull /storage/A1AE-1701/tmp/a_wechat/ /Users/martin/Downloads/wechat/MicroMsg

数据库破解

工具准备

数据准备完成后,我们来分析文件夹。发现在/data/data/com.tencent.mm/MicroMsg/03d7ed00f0ba3136b633d9c54bae06be的路径下有这连个数据库名字有点可疑,我们可以导出来看看。

我们可以使用SQLPro(提取码: zk7u)进行查看。使用工具无法打开,因为加密了。所以我们接下来就尝试从源码中查找加密的技术细节。首先我们来找到微信的下载APK软件,这里我们使用的是微信的目前最新版本6.7.3。有了APK文件以后,我们就需要使用反编译工具来进行反编译了。

JADX工具找代码

因为在jadx工具是可视化工具,解压Apk(注:这里的APK文件也可以改为zip个时候解压)后的dex文件反编译为Java文件进行可视化的搜索。我们只需要将apk压缩包解压后,将xxx.dex文件拖入工具中即可。

下面展示下JADX搜索的功能。

有了这个工具,我们就可以开始分析代码了。

逆向分析

静态代码分析

之前看了文章微信数据库最新的解密方式,使用C++代码解密微信加密数据库信息!说到:

微信数据库加密的密码很简单就是:MD5(IMEI+UIN).Substring(0, 7).toLower;设备的imei和微信登录账号后的唯一表示uin值拼接然后计算MD5值,取前7位在变成小写字母即可。

接下来,我们只需要验证下当前版本的加密有没有变化即可。大部分步骤我都是参考上面文章来的,首先,我们找到包com.tencent.mm.a.g类,这个包下是一些MD5的加密算法。

查看下哪些地方调用了MD5的加密算法,有一个地方比较可疑。


接下来就查看下key传递到什么地方了。


在这里我受到了阻碍,可能是微信团队,针对反编译工具把这里进行了一些另外的操作,重要的代码块不能反编译了。不过我们可以从上面的this.key = g.o((str4 + j).getBytes()).substring(0, 7);来查找,如果strj两个参数,是imei和uin的话,那么就可以证明,微信的算法确实不会变的,
我们在com.tencent.mm.cf.h包下,找到了看到了下面的代码段,在这里插入图片描述

继续查找引用,

发现他的包名名称很可疑,感觉应该快找到了。


在这里,我们已经确认,前面要找的str4就是我们的IMEI号,前面分析了MD5加密是通过a方法的两个参数来共同加密的。

我们来看下a参数,先找到a的赋值。


就是获取类的的成员变量uin,所以,此时,我们就需要将查看赋值情况。

上面的代码就可以看出,文件是赋值在我们的SharedPreferences中的,通过adb命令查看一下system_config_prefs.xml文件的内容。

上面的default_uin就是我们要找的uin值了,这里需要注意下uin值是会动态改变的,在登陆状态下才会将当前用户的uin值设置进去,另外一种查找uin方法的,我们可以去auth_info_key_prefs.xm_auth_uin获取,大家cat命令查看就好,这里记录的就是当前用户的uin值并且是不会随登陆状态改变的。

实现解密

上面我们静态分析代码,知道了微信数据库加密的密码很简单就是:MD5(IMEI+UIN).Substring(0, 7).toLower;。接下来,我们来看下腾讯的Github仓库,可以找到这么一款开源的加密工具,那么我们就不难猜出,腾讯肯定是使用了Sqlcipher工具来对数据库进行加密工作。

下面我们就需要在Mac上搭建Sqlcipher数据库工具对数据库进行解密操作,如果对Sqlcipher不了解的可以看一下我写的这篇文章Mac终端使用Sqlcipher加解密基础过程详解,这里就默认大家知道了如何使用这个工具了,解密的主要思路就是下面三个步骤:

  • 下载sqlcipher-master,将文件夹中的工具路径加入环境变量。
  • 进入到微信的沙盒文件MicroMsg/03d7ed00f0ba3136b633d9c54bae06be文件夹下,这里需要说明下,这个文件夹是通过"mm"+uin值通过MD5加密后获取的,微信通过这种方法方便找到对应用户的个人信息。
  • 数据库密码构造,我们根据MD5(IMEI+UIN).Substring(0, 7).toLower;获取到我们需要解密的密钥。
  • 在Mac下使用Sqlcipher命令开始解密。

下面我重点来说一下数据库密码的构造。

数据库密码的构造

首先获取设备的IMEI,可以直接拨打:*#06#查看;然后根据上面获取的uin值,取SharedPreferences中的值即可,然后拼接到一起,用txt文件档保存一下,在使用HashTab工具进行查看属性即可得到MD5的值,如果这里不想使用工具的情况,我这里也有自己编写的Java代码。

上面的前7位就是我的密码了f73982,现在我们开始解密操作。

sqlite> .open EnMicroMsg.db
sqlite> pragma key='f73982';
sqlite> pragma cipher_use_hmac=off;
sqlite> pragma cipher_page_size=1024;
sqlite> pragma kdf_iter=4000;
sqlite> SELECT count(*) FROM chatroom;
Error: file is not a database

使用Mac终端遇见的转码问题解密失败

在这里可能大家就很疑惑,为什么解密失败,我猜测可能是Mac终端的编码的问题,转换为密码后和Android中的SDK的加密密码不一致导致的,毕竟是两个不同的平台,出现转码问题也很正常,在这里我就放弃了使用Mac的去解密我数据库了,毕竟我对Mac不是很熟悉,暂时不去研究,如果有读者知道如何去修改这个问题,请告知我下,谢谢。

使用AndroidSDK解密

改用编写Android应用去实现我的解密过程。在这里我使用了别人的项目地址fork到了我自己的Github上WxDatabaseDecryptKey大家可以直接去下载,下载好项目的依赖库后,运行就没问题了。下面是一张破解后的结果的打印日志。

使用windows软件解密

我无意间有找了一个解密工具《sqlcipher.exe windows客户端》,发现是可以解密的。

解密过程的心得分享

在解密过程中我大概花费了4-5天的时间,我还是遇见了很多坑的,就比如我搭建了Mac的Sqlcipher,但是并没有解密成功,我一度猜测是不是解密方式变了,于是还是回去再仔细分析微信的源码,发现不会变。后来我就猜想,既然是Android去加密的,那么就用Android的SDK去解密,去网上搜索相关文档后,发现有别人写好的项目拿来使用就解密成功了。逆向破解的关键,还是要再找到不变的因素,而且有耐心,并且要相信自己的判断,才能破解成功。

参考链接

  • MAC下Apktool的配置与应用
  • ApkTool的jar包构建
  • Android逆向之旅—静态方式破解微信获取聊天记录和通讯录信息
  • 微信数据库最新解密方式,用代码解密微信数据库信息

Mac下微信6.7.3版数据库破解过程相关推荐

  1. MAC下微信双开(一键命令)

    背景 上班后大家一般都有多个微信,主要是为了方便将工作和生活分开.我们经常会想在一个电脑上登陆两个微信,有没有比较简单的方法,用mac双开微信呢? 分析 首先mac也是类linux系统,微信只是一个客 ...

  2. Mac下github的基本使用(有详细过程)

    一.github准备 1.注册github账号 https://github.com 按照提示进行注册 2.查看git版本 由于macOS默认安装了git 在终端输入 git -v 3.设置usern ...

  3. mysql虚拟机授权错误,windows下用navicat链接虚拟机MySQL数据库的过程和问题解决

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 navicat远程连接到虚拟机中的MySQL数据库 1.在Linux上检查mysql服务器的IP地址 \ ifcon ...

  4. Mac 下投屏软件Vysor安装及破解

    文章目录 安装Vysor 1. 在Google Chrome中输入 chrome://extension,打开引用商店,输入vysor,添加vysor到扩展程序中 2. 打开Vysor官网,点击Dow ...

  5. Linux和Mac下的微信电脑版electronic-wechat(非官方)

    2016-10-15更新 添加了3.3–为微信电脑版增加桌面启动器(快捷方式) CSDN GitHub Linux和Mac下的微信电脑版electronic-wechat(非官方) AderXCodi ...

  6. Linux和Mac下的微信电脑版electronic-wechat 非官方

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 2016 ...

  7. mac os 10.8.5下 微信开发者工具安装问题

    最近用到微信开发者工具,安装到XP sp3和mac os x 10.8.5都不能正常运行.os x 10.8.5报 wechatwebdevtools 意外退出.微信开发者工具版本:1.01.1710 ...

  8. mac下多个php版本切换(可操作版)

    mac下多个php版本切换(可操作版) 参考了多个文章,并且进行测试实践,总结了如下正确的操作方式 实践 适用版本: OS X Version: 10.12.3 (16D32) -------- Ho ...

  9. android studio降版本,Mac下Android Studio完美从2.2.2降级到2.1.3正式版方案

    本人开发工具一直秉行与时俱进的原则,没事就升级到Studio2.2.2最新版本了.本来以为最新版本应该用着挺爽的,然并卵. 首先,谷歌一直推荐的instant Run还是个坑,用起来还是不好用,遂关闭 ...

最新文章

  1. 老程序员都去哪儿了?
  2. 了解女友的心还不如了解Python之在Python中解析和修改XML
  3. mysql查看隔离模式_InnoDB 隔离模式对 MySQL 性能的影响
  4. Intent传递对象
  5. 0401互联网新闻 | 企业微信新版发布;阿里巴巴发布“AI谣言粉碎机”
  6. 【推荐】技术人必看的音视频学习资源清单
  7. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(二)ActionSheet视图 学习笔记...
  8. C#由转换二进制所引起的思考,了解下?
  9. php sql取数据生成数组中,php中实现数组生成要执行的sql语句
  10. JAVA编程思想-第四章 控制执行流程
  11. 基于STM32的NRF24L01模块一对一的问题记录
  12. php+检测是否是手机浏览器,php 判断是否是手机浏览器访问?
  13. WinMerge:一个免费开源的文件对比神器
  14. 华为p4不是鸿蒙吗怎么又改为安卓_华为已将“基于安卓10”变成“兼容安卓10”,EMUI就是鸿蒙OS...
  15. hive存储处理器(StorageHandlers)以及存储格式以及hive与hbase整合
  16. 读hadoop权威指南关于hive
  17. php获取本机的IP
  18. vb.net 获取系统图标_【系统更新V4】优麒麟 20.04 LTS持续完善!优化高清屏支持,上架6款新应用!...
  19. STC8H驱动hub75e接口的64*64LED点阵屏
  20. 浅谈android中加载高清大图及图片压缩方式(二)

热门文章

  1. 共享经济带动共享网红?共享网红的未来如何?
  2. AE中文版 AE2021中文版下载 AfterEffects2021中文版ACR14.0最新下载和安装
  3. 人工智能将使今天不可能做到的事情成为可能?
  4. 解决联想拯救者混合模式+不插电情况下屏幕亮度和颜色异常问题
  5. win 10 主题 美化
  6. 关于梯度翻转层GRL的理解
  7. C语言中,a+=a-= a*a与a+=a-=a*=a
  8. m基于PSO粒子群优化的立体仓库货位优化matlab仿真
  9. ERROR 1146 (42S02): Table ‘xxxxxxx‘ doesn‘t exist模拟删表删库恢复
  10. HMI智能座舱自动化测试内容