分享好友 最新资讯首页 最新资讯分类 切换频道
PC微信逆向:两种姿势教你解密数据库文件
2024-12-29 16:29

                                                                                   文章目录

PC微信逆向:两种姿势教你解密数据库文件

  • 定位数据库文件密码
    • 定位数据库密钥的思路
    • 获取数据库密钥的实战分析
      • CreateFileW断点
      • 常见错误
      • 排查堆栈
        • 排查堆栈地址
      • 单步跟踪
    • 用代码实现解密数据库
      • 编译选项
      • 解密代码
      • 实际效果
    • 动态获取数据库密钥
  • 定位数据库文件句柄
    • 关于微信数据库句柄
    • 获取微信数据库句柄的思路
    • 定位微信的数据库句柄

定位数据库文件密码  微信的数据库使用的是sqlite3,数据库文件在C:UsersXXXDocumentsWeChat Files微信账号Msg这个路径下

  所有的数据库文件都是经过AES加密的,AES的密钥是32位,而且所有数据库文件共用一个密钥,我们需要找到那个AES密钥才能进行解密,然后才能对数据库文件进行操作。
定位数据库密钥的思路  微信在登录时肯定要从数据库文件中获取历史聊天记录加载到程序中,然后我们才能看到之前的聊天记录。那么在微信读取数据库文件之前肯定要先打开数据库文件,所以CreateFile这个API就是我们的切入点。
  在API断下之后怎么去找数据库的密码呢?可以根据AES的密钥长度为32位这个线索,32也就是十六进制的20,时刻注意20这个数字
  另外,在解密数据库的call中至少需要两个参数,一个是AES的密钥,另外一个是需要解密的数据库文件的路径。
  还有一种方法是在内存中搜索数据库文件的名字,然后下访问断点。这种方案也是可行的。
获取数据库密钥的实战分析CreateFileW断点

  打开微信,手机不要点击登录,用OD附加微信,在CreateFileW函数下断点,下好断点之后在手机上确认登录

  在CreateFileW的参数中找一个FileName为xxx.db的,我们要在微信访问这个数据库文件的时候断下,然后从这里开始往下跟。一直跟到有数据库的密码的地方
常见错误

  如果出现了这个错误,需要修改一下设置

  将StrongOD和OD本身取消忽略所有异常,这个错误是因为多线程访问冲突引起的。
排查堆栈  在CreateFileW的返回地址下断,直接F9运行,CreateFileW这个API我们是不需要看的

  CreateFileW断点断下来,那么现在应该怎么跟呢?肯定不能一直往下单步,虽然单步也能达到目标。
  分析一下现在的状况,这个时候微信的数据库处于一个还未初始化,但是即将初始化的状态,我们可以在堆栈或者堆栈附近的地址找到关于数据库初始化相关的函数。然后在微信初始化完数据库之后单步往下跟。这样能省去很多麻烦
排查堆栈地址

  直接找到第四个返回地址

  这个函数传入了三个参数,虽然三个参数都没有什么价值。但是这个call稍微往下拉,你会发现一个字符串

  这个函数的作用应该就是用来提示错误的,一般比较大的工程都会将错误提示信息写成一个函数,报错的时候会提示哪一个模块的哪一个cpp的哪一行出错了,以便最快定位到错误点。
  再往上看会发现一个je,用来跳过这个错误

  根据这个错误提示的内容,我们现在可以百分百的确定打开数据库的操作已经完成
单步跟踪

  因为微信的数据库文件不止一个,所以我们不需要重启微信。直接在这个函数下断点,然后取消剩下的所有断点,按F9运行,程序断下。然后F8单步

  这里是我们遇见的第一个函数,看参数就知道不是我们想要的了,跳过 继续往下

  第二个函数将数据库名和一个保存零的指针入栈,也跳过

  第三个函数就很可疑了,这个call将三个参数压入堆栈,其中eax是一个结构体,里面保存一个地址和0x20这个数字,AES的密钥正好是32位的,也就是十六进制的0x20。
  数据窗口跟随,前两行0x20个字节就是数据库的密钥了

  各个参数含义如下

用代码实现解密数据库编译选项

  工程需要包含OpenSSL的相关文件
解密代码  这份代码原作者是谁我已经不记得了 反正被拷来拷去拷了很多次了

 

实际效果  运行程序

  最后生成的dec_ChatMsg.db就是解密出来的文件,对比一下解密前后的文件

  解密前

  解密后 看到这个MAGIC头,不用验证我就知道已经解密成功了。接下来还是验证一下结果

  用Navicat新建一个SQLite连接

  选择解密后的数据库

  可以看到所有的表数据已经出现了。解密完成
动态获取数据库密钥  找到了密钥之后就结束了吗?这个密钥目前是写死的,如果变化的话,我们又要重新找,然后再次输入。所以我们需要动态获取到数据库密钥。想要动态获取数据库密钥,就必须定位到数据库密钥的基址。步骤如下
  直接在CE中搜索之前找到的密钥

  接着依次搜索这两个地址,找到了一个绿色的基址

  这个基址以指针的形式保存了微信数据库的密钥,这个地址就是我们要的微信密钥的基址了。
  动态获取数据库密钥的代码如下

 

定位数据库文件句柄  在拿到数据库密码之后,我们还需要对数据库文件进行解密,解密完成之后才能查询数据库。那么有没有更好的方法可以不需要获取密码也不需要解密数据库文件就能直接进行数据库的查询操作呢?当然是有的,就是通过微信的数据库句柄
关于微信数据库句柄  微信的数据库句柄在一些地方会经常用到,比如查询好友的详细信息的时候,需要传入一个数据库的句柄。然后通过句柄去查询信息,最后返回好友详细信息。
  如果我们直接拿到密码,然后对数据库进行解密,再查询好友信息,这种方法当然也是可以的。但是拿到的数据并不是实时的。
  如果我们拿到这个数据库的句柄,就能实时的去查询好友的详细信息了,而且也不需要进行解密和获取数据库密码的操作了。
获取微信数据库句柄的思路  找微信数据库句柄的思路和找数据库密码的思路是一样的,微信在点击登录的时候,肯定是要打开本地的数据库,然后获得一个句柄,所以我们可以通过在CreateFileW下断点,接着单步跟踪,就能找到数据库的句柄
定位微信的数据库句柄

  在CreateFileW下断,当微信读取数据库文件时让程序断下。

  接着来到CreateFileW的返回地址处,点击K查看调用堆栈


  经过排查,这个地址的call最像我们需要的找的call,在这个call的地址下断,点击F9运行

  程序断下,此时ecx指向数据库文件的路径


  edx指向一个空的缓冲区,那么这个就非常像我们要找的call

最新文章
2024年申报国自然项目基金撰写及技巧 | ChatGPT/GPT4科研技术应用与AI绘图及论文高效写作...
课程安排学习内容专题一AIGC基础讲解【讲解+实践】1.1 AIGC课程概述1.2 AIGC技术发展1.3 人工智能基本概念1.4 大语言模
Chariz
Go beyond apps and do whatever you want with your iPhone, iPad, or iPod touch. Chariz helps you discover useful apps tha
Excel数据透视表经典教程十《值的汇总及显示方式》
前言: 本文介绍值得汇总以及显示方式,大致内容如下: 1、值多汇总方式 2、值百分比显示 3、多字段百分比显示 4、父级百分比显
2024洗面奶品牌排行榜前十名!央视精选优质洗面奶品牌推荐
洗面奶作为日常护肤的必备品,受到了越来越多消费者的关注。不同的肤质和需求使得市场上涌现了众多品牌,如何选择一款适合自己的
AI应用增速超预期,知识付费概念梳理及最新核心龙头概念股一览!1、中国出版:公司
AI应用增速超预期,知识付费概念梳理及最新核心龙头概念股一览!1、中国出版:公司主营图书、报刊、电子音像等出版物出版,全国
EDM邮件营销中不应忽略的几个重要细节
移动设备支持,用户分组,标题测试,邮件排版等,一封成功的营销邮件不仅仅需要你对电子邮件营销有充分深刻的了解,还需要你在这
2024开淘宝店铺需要怎么注册?注册流程是什么?
开淘宝店铺需要怎么注册?注册流程是什么?潘老师给大家讲解一下,用手机端开通淘宝店铺的操作流程步骤,帮助大家把店铺开成功。
95017怎么快速转人工客服?3种方法可以解决
95017怎么快速转人工客服你知道吗?95017转人工客服有3种方法:1.拨打完按55可以直接转人工;2.拨打完按“1-#”可以直接转人工;
2024年固态硬盘天梯图HDD选购指南及性能排行分析
简介:在数字化转型日益普及的今天,固态硬盘(SSD)已成为各类消费者和企业数据存储的首选。不论是想要加速家用电脑的性能,还
AI作画的背后是怎么一步步实现的?一文详解AI作画算法原理+性能评测
“AI作画依赖于多模态预训练,实际上各类作画AI模型早已存在,之所以近期作品质量提升很多,可能是因为以前预