多玩YY聊天记录解析全过程

再来一发,现在开始!

下载安装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

时间: 2024-10-12 23:28:34

多玩YY聊天记录解析全过程的相关文章

解析器解析全过程

首先,我们先让大家看一下python解析器的全流程: 我们编辑器编写好源代码->保存成文件.如果源代码中有编码声明而且用的编辑器支持该语法,那么该文件就以相应的编码方式保存在磁盘中. 注意:编码声明和源文件的编码不一定是一致的,你完全可以在编码声明中声明编码为utf-8,但是用GB2312来保存源文件.当然,我们不可能自寻烦恼,故意写错,而且,好的IDE也能强制保证两者的一致性,但是,如果我们用记事本或者editplus等编辑器来编写代码的话,一不小心就会出现这种问题的. 得到一个.py文件后,

DNS解析全过程

一直对DNS的解析概念很模糊,今日看到一篇关于DNS服务器的讲义,认为讲的很详细,特此整理: 什么是DNS DNS 全名为 DOMAIN NAME SYSTEM ,主要作用是把网站域名解析为对应的IP地址 这个域名与IP地址的对应关系叫做A记录,英文名叫 address record A记录是DNS最重要的功能,DNS服务器还有许多其他的功能,例如: 1)设置CNAME别名记录(之前没接触过,所以不知道是什么鬼,据说这个常被CDN加速服务商用到) 2)设置MX邮件记录,在购买或者搭建邮件服务器的

DNS解析全过程分析

DNS解析过程 1.检查浏览器缓存中是否缓存过该域名对应的IP地址 用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址, 当用户再次访问的时候,浏览器就会从缓存中查找该域名对应的IP地址, 因为缓存不仅是有大小限制,而且还有时间限制(域名被缓存的时间通过TTL属性来设置), 所以存在域名对应的IP找不到的情况. 当浏览器从缓存中找到了该网站域名对应的IP地址,那么整个DNS解析过程结束, 如果没有找到,将进行下一步骤. 对于IP的缓存时间问题,不宜设置太长的缓存时间, 时

多玩YY语音的面试题:C++中如何在main()函数之前执行操作?

第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的theApp对象,其执行顺序就在main函数之前.道理相通,顺理推下,能够想到:如果在main函数之前声明一个类的全局的对象.那么其执行顺序,根据全局对象的生存期和作用域,肯定先于main函数. 示例如下: class simpleClass { public: simpleClass( ) { cout << "simpleClass construct

YY语言

YY语音,又名"歪歪语音",由广州多玩信息技术有限公司(NASDAQ:YY)研发,是一款基于网络团队语音的通信平台的计算机程式,主要功能是进行在线多人语音聊天,也有截图等一些辅助功能. 该款软件的用户群主要集中在中国大陆,大多都用于网络游戏中的团队交流. 是魔兽世界.cf等网络游戏玩家经常使用的软件. ?基本信息 公司名称:   广州多玩信息技术有限公司    总部地点:   广州市 成立时间:   2005年11月 经营范围:   科技公司 公司性质:   民营企业 最新版本:   

外部网站DNS解析过程详解

对外部网站的DNS解析全过程图解(排除ISP缓存方面,只是原理) 如下图: 上图是自制,如有错误地方,还请评论指点,谢谢! 以下为DNS详解,转载自百度文库! 平时我们进行域名解析所用到的DNS服务器,是面对客户的一线服务器. DNS服务器是(Domain Name System或者Domain Name Service)域名系统或者域名服务,域名系统为Internet上的主机分配域名地址和IP地址. 用户使用域名地址,该系统就会自动把域名地址转为IP地址.域名服务是运行域名系统的Interne

AS3聊天单行输入框图文混排完美实现

几年前刚毕业,第一个游戏模块做的就是聊天.到现在,几个游戏写过几次聊天模块, 之前在4399做的<幻龙骑士>(又名<神骑士>),还有上周六刚上线的<疯狂的子弹>, 用的是同一套代码,聊天输入框没有图文混排,而是用符号代替,输出面板才有图文混排. 输出面板的图文混排由于内容没有键鼠操作,实现很简单,不在本文讨论之列:当然本 文的代码中抽出一小部分就可以实现了.以上两款游戏没有加密,有兴趣的可以去弄来看看, <子弹>里面的键鼠.技能.射击.弹道搞得好累人啊 ?(

读《三体三部》笔记

2015-2-5 15:09 小公司不能露面,不能猖狂,因为他没有能力,完善发展的大公司是谦逊,保密,有战略有计划地悄悄发展,因为他知道了黑暗森林法则,知道了如何才能更好地生存.那些刚发展一点就露面猖狂的公司,打的就是他. CEO就要像面壁者一样,因为你有很大的资源可以统配,你能够做统划全局的事情,而且你还是直接的责任负责人,公司的盈亏直接对你的影响你的利益,对于员工,只要想办法让他们好好工作,找到自己的乐趣和价值,就好了,没必要让他们明白计划,也没必要让他们绝对民主.当然,如果能让有能力的某些

linux c正则

c 正则 -------------------------------------------------- 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库. 编译正则表达式 ----------------------- 为了提高效率,在将一个字符串与正则表达式进行比较之前,首先要用regcomp()