首页 网络安全 安全学院 查看内容

新版微信数据库破解获取位置和聊天记录

2019-4-6 00:37 |来自: 互联网 5717 0

摘要: 合理利用技术,切勿违法犯罪!进入到微信的文件目录,将沙盒里面的数据全部拷贝到本地电脑中。在手机的sd卡中创建一个临时目录,用于存放微信的数据.拷贝微信的。数据准备//mkmkdir /storage/A1AE-1701/tmp/a_wechat/MicroMsg//copycp -r /data/data/com.tencent.mm/MicroMsg/. .///pulladb pull /stor ...
关键词: 加密 工具 数据库 文件 Sqlcipher 代码 UIN 密码 就是 分析

合理利用技术,切勿违法犯罪!

进入到微信的文件目录,将沙盒里面的数据全部拷贝到本地电脑中。

  • 在手机的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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

数据库破解

工具准备

数据准备完成后,我们来分析文件夹。发现在/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);来查找,如果str和j两个参数,是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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

使用AndroidSDK解密

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

使用windows软件解密

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

解密过程的心得分享

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

本文出处: https://www.toutiao.com/a6676088829683696141/
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

最新评论

返回顶部