分享好友 最新资讯首页 最新资讯分类 切换频道
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

最新文章
4K超清曲面带鱼屏 Dell 3417W显示器评测
提到现在的显示屏技术,曲面与4K可以说已经是近年来炒得非常火的话题了,俨然成为如今显示器热点技术。最早的曲面屏幕是应用在电
android优化排名 安卓优化最好的手机
原标题:目前最流畅的四款安卓手机,能做到1000天不卡顿!在智能手机发展的初期,由于安卓系统底层问题以及硬件性能不到位,卡顿
AI赋能营销,构建智能名片生态,实现高效获客
在数字化时代,企业营销面临着前所未有的挑战。如何在激烈的市场竞争中脱颖而出,吸引更多潜在客户?AI技术的出现为营销工作注入了
AI智能生成创作歌曲歌词大全:一键写歌神器,歌词资源汇总
在数字技术的浪潮中,人工智能已经渗透到了各个领域,涵音乐创作。想象一下,只需轻点一下按,就能创作出一首属于本身的歌曲,这
ai机器人聊天怎么使用?语音聊天智能机器人有哪些?
4. 可以通过语音或文本方式与机器人进行交互,并了解它的回答和建议。二、目前常见的语音聊天智能机器人1. 小冰:由百度开发的语
2023人工智能专业就业方向及前景分析
摘要:  在2021年高校新增专业中最多的就是人工智能专业,所以预测今年高考人工智能专业依然会成为报考热门,今天就分析一下,
2023年人工智能市场规模将达上百亿美元
2023年市场规模将达上百亿美元人工智能进入新的发展阶段本报记者 吴秉泽 王新伟□ 人工智能对科技、产业和社会变革的巨大潜力得
ai智能写作工具:百度AI在线USB多平台应用解析
在数字化时代人工智能技术的快速发展为各行各业带来了革命性的变革。特别是在内容创作领域,智能写作工具的兴起,极大地提升了写
ChatGPT全方位解析:如何培养 AI 智能对话技能?
简介ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的
6月汽车销量排名最完整版:共459款车型,来看看你的爱车排第几
进入7月以后,乘联会和中汽协先后公布了2020年6月中国汽车销量数据,各细分市场销量排名也相继出炉。据乘联会公布的6月综合销量