0x00 简介

每一个聊天工具账号登入后会在"\Document\Tencent Files\账号"的目录下Msg3.0.db文件里写入加密后的聊天记录信息。

查看该工具的Bin目录下的DLL文件可以知道它用的是sqlite的数据库,sqlite默认是没有实现加密的函数只是提供了接口,网络上有一些开源的加密库,比如wxsqlite3,sqlcipher等。

0x01 前期准备

先再IDA中分析sqlite.dll,查找含有version字符串的函数然后交叉引用,找到上一个函数就可以发现当前程序使用的sqlite的版本号,可以从网上Down下来源码方便进一步分析,下载链接在文末。

sqlite的加解密简易流程:

0x02 获取加密所需的函数

在sqlite.dll里对这些函数下断点动态调试发现没有断下来,结合网络上前辈的分析,IDA中打开KernelUtil.Dll函数名字都很类似,猜测这个Dll就是tx自己对sqlite的具体实现。

我们可以先在CMultiSQLite3DB::innerOpen等open函数下断点,并打开火绒剑对文件操作进行监控。具体下断点的方法就是附加进程然后在模块里找到KernelUtil.DLL,在IDA找到要下断点的函数的偏移,[KernelUtil.DLL + 偏移]就是要下断点的位置。

然后观察堆栈传递的参数结合火绒剑和x96dbg单步步过,就可以找到是哪个函数真正打开db文件。

结合sqlite源码和IDA分析可以还原参数和函数名。

在innerOpen这个函数中我们可以看到CppSQLite3DB::execDML这个函数,我们可以大胆猜测它是封装了sqlite3_exec,结合源码进行重命名。sqlite3_exec的第三参数和第四个参数是回调函数,主要的作用是接收sql语句执行的结果,这个在后续编写Demo有用到,具体用法在文末的链接可以参考。

sqlite3_key的具体实现函数我们可以在IDA中观察CppSQLite3DB::key这个函数并结合sqlite3的源码可以推测真实设置key的函数,不妨在此处下断点,后续抓取key时有大作用。

至此我们获得了后续抓取解密Key所需要的几个函数地址,在x96dbg的对应偏移位置下上断点。

0x03 抓取解密Key

key是云端生成的理论上没有账号的密码是打不开这个聊天记录文件的,并且在每次打开程序后的密钥都是不一样的,所以这里得注意抓到密码后关闭程序得备份Msg3.0.db这个文件,文件于key是一一对应的。

我们先让它正常登入然后在火绒剑观察它是什么时候对Msg3.0.db进行操作的。可以发现是在比较前面就打开了Msg3.0.db所以大胆猜测是在进程在刚启动的时候执行解密操作。接下来附加进程开始调试。

在附加进程的时候得注意,选择上面那个进程,下面那个是登入进程在登入成功后会自动销毁了。

在CreateFileW下断点观察火绒剑和x96dbg堆栈知道发现它打开了Msg3.0.db这个文件。

一直F9直到调用sqlite3_open函数的参数有Msg3.0.db(期间可能有多个地方调用了open,真实的是先调用open后调用key,多次尝试可以试到真实获取解密Key的地方),根据上文可知sqlite会先打开对应db文件并在后面在设Key,根据IDA分析结果可以知道原始key是16位的,扩展之后变成16*17位了。

有了扩展key可以直接调用sqlite3_key_impl这个实现函数,也可以使用原始16位key直接调用sqlite3_key.备份好Msg3.0.db和Key开始编写demo。

0x04 总结

总的来说主要是要找到sqlite解密的各个函数的偏移地址和解密key,有个小坑就是key是动态的而且和Msg3.0.db一一对应的,每次抓到key的记得备份Msg3.0.db。

所以我们可以直接调用tx的KernelUtil.Dll,在Load KernelUtil.Dll的时候要注意放在\Bin 目录下不然会导入失败,因为KernelUtil.Dll还有导入其他的Dll。

0x05 参考链接

sqlite v3.8.8.1下载链接:

https://www.sqlite.org/2015/sqlite-amalgamation-3080801.zip

sqlcipher v3.3.1下载链接:https://codeload.github.com/sqlcipher/sqlcipher/zip/v3.3.1

撬开PC QQ的本地SQLite数据库(适用于Msg3.0.db等):https://www.52pojie.cn/thread-1370802-1-1.html

sqlite_exec回调函数的使用:https://blog.csdn.net/zscfa/article/details/77119522

某聊天工具消息记录数据库文件解密逆向分析相关推荐

  1. Android数据库加解密逆向分析(三)——微信数据库密码破解

    接着上一篇文章,在上一篇文章中我们通过对Line数据库加密的逆向分析,了解到了对要写入到数据库中的数据加密,读取时再将读取出的数据解密这种Android上的数据库加密方式.这篇文章来通过介绍对微信数据 ...

  2. 服务器如何向c winform推送信息,C局域网聊天工具消息推送实现思路与源码.doc

    C局域网聊天工具消息推送实现思路与源码 C#局域网聊天工具怎么实现? 网络通讯编程的基础便是协议,信息的发送常用的协议有面向连接的TCP协议,以及不面向连接的UDP协议TCP:Transmission ...

  3. 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析

    [C/C++基础进阶系列]实战记录 -- Dump 文件生成与分析 [1]Windows 端 Dump 文件的捕获与分析 [1.1]添加 Windows 端 Dump 捕获的代码 代码下载,windo ...

  4. SQLite DBRecovery 恢复引擎实现微信等一些手机聊天工具删除记录的快速恢复

    概述: SQLite DBRecovery 提供了对开源嵌入式数据库SQLite的数据库损毁数据恢复功能,能够快速恢复SQLite 数据库意外操作.系统故障.文件损坏以及误删除记录等原因导致的数据记录 ...

  5. SQLite DBRecovery 恢复引擎实现微信等苹果手机一些聊天工具删除记录的快速恢复

    概述: SQLite DBRecovery 提供了对开源嵌入式数据库SQLite的数据库损毁数据恢复功能,能够快速恢复SQLite 数据库意外操作.系统故障.文件损坏以及误删除记录等原因导致的数据记录 ...

  6. 微信PC端数据库文件解密

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  7. python读取数据库文件的扩展名_Python读取sqlite数据库文件的方法分析

    本文实例讲述了Python读取sqlite数据库文件的方法.分享给大家供大家参考,具体如下: 这是Python内置的,不需要pip install 包 数据库里面有很多张表 要操作数据库首先要连接co ...

  8. 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )

    文章目录 一.从 Android 应用数据目录中拷贝 SQlite3 数据库文件 二.使用 DB Browser 工具打开 SQlite3 数据库文件 一.从 Android 应用数据目录中拷贝 SQ ...

  9. 微信消息记录导出并制作图云(安卓版)

    2019-8-7 文中内容参考自博客:爱情大数据 | 你的专属微信聊天记录统计 前言: 准备在七夕那天给女朋友准备一份小礼物 就是把在一起之后的所有微信聊天记录生成一份词云 MENU 前期准备 数据文 ...

最新文章

  1. iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
  2. Ubuntu10.04下gFtp2.0.19 远程客户端中文乱码解决方法
  3. 成功解决File amp;quot;f:\program files\python\python36\lib\re.pyamp;quot;, line 142, in amp;lt;modul
  4. delphi中的指针与C类似
  5. Mips TLB miss实现in Linux
  6. Spark基础学习笔记13:Scala函数
  7. 14 count(*)
  8. 安卓http服务器源码,Android搭建HTTP和WebSocket的服务器端
  9. 201771010112罗松《面向对象程序设计(java)》第十周学习总结
  10. 13. Window blur() 方法
  11. unity package 包下载不下来
  12. java 英文题_java英文试题
  13. 组态TwinCat软件安装时,There are some files marked for deletion on next reboot.Please reboot first and then
  14. avx2指令集对php有用吗,AVX2指令集的作用
  15. 汽车制造商代码表_汽车制造商合作打造未来汽车
  16. C# 将word/ppt文档转换为Pdf的三种方法
  17. 中国古语中的十大智慧
  18. Linux系统编程学习笔记
  19. 酒诗词之一(七言诗)
  20. 转正实习、春招、秋招、校招、社招的4个区别和陷阱

热门文章

  1. 【最佳解法】剑指 Offer 42. 连续子数组的最大和
  2. jQuery的概念、用法、常见面试题详解
  3. 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
  4. 微信小程序开发与应用 第一章 微信小程序的基本知识1
  5. centos7.6查询不到网卡信息
  6. Linux基础优化方法(三)———字符集编码设置优化
  7. 树莓派各版本配置对比
  8. python一行行写文件_python一行行写文件-女性时尚流行美容健康娱乐mv-ida网
  9. 怎样将html转换do,html代码格式化 Reddo的教程
  10. linux进程 面试题,Linux面试题,浅析常见Linux命令面试题及答案