再来一发,现在开始!
下载安装YY,观察YY目录,很明显的发现了sqlite3.dll,这个数据库很多很多很多软件都在用,简单小巧且开源。
删除sqlite3.dll 进入YY,历史记录不能正常显示,基本确定YY在使用sqlite3.dll
下一步:在磁盘上找YY的数据库文件
于是,在 C:\Users\用户名\AppData\Roaming\duowan\yy\imgroup\‘xxx’\yydb 目录下发现了 xxx.yydb文件,这就是YY的数据库文件
用UE打开发现这个是个加密的文件,很明显经过加密的,现在的目标就是从这个加密的数据库中拿到聊天记录。
思路:由于YY直接使用了sqlite3.dll,为了简单方便起见,考虑用YY自己的sqlite3.dll读取YY的数据库,以达到获取YY聊天记录的目的。
实验:我自己在网上下载了一个sqlite3源码编译,生成sqlite3.dll,替换YY的sqlite3.dll (注:sqlite3源码里默认是不包含加密模块的,只有加密接口的宏开关,需要加密,自己打开宏开关去实现接口进行加密)我生成的sqlite3.dll当然不包含加密模块,经过观察,YY的聊天记录是存储在服务器上的,每次新安装YY,随便打开个联系人,点击查看聊天记录,YY会从服务器下载聊天记录,并存储在本地数据库中。懂了么?这意味着什么??
好吧,不卖关子,想想YY的sqlite3.dll,肯定自己实现了加密接口,YY肯定会自己调用这个接口的,那么我自己生成的sqlite3.dll没有这个接口,替换过后,YY调用加密接口会失败,两种可能:1.加密不成功,存储明文数据库 2.YY检测到错误,返回并退出! 我的实验结果是第一个,我得到了未经加密的数据库文件,哈哈,用可视化工具打开直接可以看到聊天记录!
下一步:调用YY自己的sqlite3.dll获取聊天记录。
我经常用sqlite3,对sqlite3很熟悉,用eXeScope打开YY的sqlite3.dll,一眼就发现了一个接口:sqlite3_key,这个接口默认是没有的,很明显,这是YY自己实现的加密接口,我也懒得去分析具体算法了!!于是我在下载的源码里打开宏开关,在接口实现里面将YY传过来的每个参数写到文件里面,就这样,轻松得到了YY的数据库密码,接下来就不用说啦,调用YY的sqlite3.dll,开源的,可以去看每个接口的官方注释,网上也有相当多sqlite3的用法。so easy 啦!!
好了,方法都说了,如果自己感兴趣可以按照这个来自己写代码实现!
这个太简单了,我也懒得插图和帖代码了。
就这样啦!!
https://www.0xaa55.com/forum.php?mod=viewthread&tid=1790&extra=page%3D1