再来一发,现在开始!

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

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

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

    多玩YY语音的面试题:C++中如何在main()函数之前执行操作? 第一反应main()函数是所有函数执行的开始.但是问题是main()函数执行之前如何执行呢? 联想到MFC里面的 C**App类的t ...

  2. django基础之day08,分页器从无到有,动态思路解析全过程

    *********分页器从无到有的全过程,动态思路解析如下:******** 1.通过book_queryset = models.Book.objects.all()[start_num:end_n ...

  3. DNS解析全过程及原理

    DNS解析原理及过程. 当用户访问我们网站一个网页时,他需要经过以下步骤: 1)找到这个网页的存放服务器: 2)服务器将用户的请求信息接入: 3)服务器通过文件路径(URL)查找用户请求网页: 4)用 ...

  4. DNS解析全过程

    浏览器输入一个网址.要訪问该网址必须由DNS解析出相应的server的IP地址. 对于大型站点来说,一个站点相应多台server.那么DNS解析出的可能是进行负载均衡的server的IP地址.DNS解 ...

  5. DNS解析全过程分析

    DNS解析过程 1.检查浏览器缓存中是否缓存过该域名对应的IP地址 用户通过浏览器浏览过某网站之后,浏览器就会自动缓存该网站域名对应的IP地址, 当用户再次访问的时候,浏览器就会从缓存中查找该域名对应 ...

  6. DNS解析全过程详解

    1.Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.linux178.com 对应的条目,而且没有过期,如 ...

  7. Android抓包解析全过程

    需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...

  8. 【Android测试工具】Android抓包解析全过程

    需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...

  9. Spring框架之beans源码完全解析

    导读:Spring可以说是Java企业开发里最重要的技术.而Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Oriented Programmin ...

随机推荐

  1. Stack trace对性能的影响

    package ceshi; public class ExceptionTest { public long maxLevel = 20; public static void main(Strin ...

  2. 前端笔试题 JS部分

    题目 http://www.itmian4.com/forum.php?mod=viewthread&tid=4540 http://www.itmian4.com/forum.php?mod ...

  3. Oracle Primavera P6 R84单机版安装教程

    本教程用于指导Oracle Primavera P6 R84版本的单机版安装过程.P6 R84版本于2014年9月30日发布.其功能较之前版本有较大提升.单机版的安装方式也发生了很大的变化.P6 R8 ...

  4. 高频(工作频率为13.56MHz)

    在该频率的感应器不再需要线圈进行绕制,可以通过腐蚀活着印刷的方式制作天线.感应器一般通过负载调制的方式 的方式进行工作.也就是通过感应器上的负载电阻的接通和断开促使读写器天线上的电压发生变化,实现用远 ...

  5. protel99_拼板详细图解

    首先打开PCB文档.如图所示,在PCB左下角放置一個坐標為X=0,Y=0的焊盤. 从下图看,为了方便电路板生产厂家的加工和焊接工厂的加工,拼版的方向是向上Y轴方向拼版. 接着为了在拼版过程中好对齐板边 ...

  6. perl5 附录一 函数集(未定稿)

    附录一 函数集(未定稿) by flamephoenix 一.进程处理函数  1.进程启动函数  2.进程终止函数  3.进程控制函数  4.其它控制函数二.数学函数三.字符串处理函数四.标量转换函数 ...

  7. Flex疑难小杂症

    本文主要解决Flex中一些小问题,收集一些小技巧(来自网络及个人经验) flex自动换行问题  有时候由于label .button等控件中需要用到text属性显示出文本,文本太长就涉及到换行问题,解 ...

  8. powerdesigner数据建模

    目标: 本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念.一.概念数据模型概述数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世界2 ...

  9. 数据科学家:神话 & 超能力持有者

    一个打破神话的季节,正在降临.        我将坦诚地揭穿人们关于数据科学家所持有的惯有看法.在下文中,我将一个一个展示这些观点,宛如将一个又一个的玻璃瓶子摔碎在墙壁上一样.        关于数据 ...

  10. SVNserver的本地搭建和使用

    Subversion是优秀的版本号控制工具,其具体的的长处和具体介绍,这里就不再多说. 首先来下载和搭建SVNserver. 如今Subversion已经迁移到apache站点上了,下载地址: htt ...