卧艹!某聊天工具消息记录数据库文件被黑客破解~

沙海
沙海
沙海
765
文章
2
评论
2021年3月29日01:37:39
评论
4 2454字阅读8分10秒
摘要

速读摘要

速读摘要

查看该工具的Bin目录下的Dll文件可以知道它用的是sqlite的数据库,sqlite默认是没有实现加密的函数只是提供了接口,网络上有一些开源的加密库比如wxsqlite3,sqlcipher等。在sqlite.dll里对这些函数下断点动态调试发现没有断下来,结合网络上前辈的分析,IDA中打开KernelUtil.Dll函数名字都很类似,猜测这个Dll就是tx自己对sqlite的具体实现。我们先让它正常登入然后在火绒剑观察它是什么时候对Msg3.0.db进行操作的。

原文约 1638 | 图片 26 | 建议阅读 4 分钟 | 评价反馈

卧艹!某聊天工具消息记录数据库文件被黑客破解~

点击关注 ? Java面试那些事儿

大家好,我是D哥

点击关注下方公众号,Java面试资料 都在这里

本文为看雪论坛优秀文章;看雪论坛作者ID:Jev0n

https://bbs.pediy.com/user-home-870016.htm

卧艹!某聊天工具消息记录数据库文件被黑客破解~正文如下:

# 简介

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

卧艹!某聊天工具消息记录数据库文件被黑客破解~

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

# 前期准备

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

卧艹!某聊天工具消息记录数据库文件被黑客破解~

卧艹!某聊天工具消息记录数据库文件被黑客破解~

sqlite的加解密简易流程:

卧艹!某聊天工具消息记录数据库文件被黑客破解~

# 获取加密所需的函数

在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的对应偏移位置下上断点。

# 抓取解密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。

# 总结

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

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

卧艹!某聊天工具消息记录数据库文件被黑客破解~

卧艹!某聊天工具消息记录数据库文件被黑客破解~

# 参考链接

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

热门推荐:从此告别微信!讲真的,我是培训机构出身的程序员,不敢告诉任何人~快手面试官:说说Mybatis的级联查询、延迟加载技术是如何实现的?

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: