文档章节

纯真数据库下载或自动更新实现

我是李达康
 我是李达康
发布于 2016/02/05 13:10
字数 780
阅读 558
收藏 16

用过珊瑚虫的童鞋都知道, 有个叫 "纯真数据库" 的东西, 可以查询 ip 地址对应的物理地址.

纯真数据库是有个名为 QQWry,DAT 的二进制文件, 可以通过纯真数据库自己提供的查询程序进行更新.

有关该数据库格式和解析的内容, 本帖子暂时不讲, 有机会的话, 偶会另行开个新帖子讲讲.

这里讲的是, 不通过官方的查询程序, 如何获取到这个数据库. 通过对官方程序进行抓包, 得出下载此数据库, 主要需要下载

http://update.cz88.net/ip/copywrite.rar

http://update.cz88.net/ip/qqwry.rar

两个文件.

但是很明显,这两个压根不是 rar 文件呀! 别被扩展名迷惑了.

因为要下载两个文件, 所以得出一个很明显的结论, ** 第二个文件需要用到第一个文件里的信息才能正确解开, 获得 qqwry.dat 文件. **

那么, copywrite.rar 里到底有神马东西呢?

我们来打开它

ghex copywrite.rar

好吧,老实说, 根本看不明白嘛!

那咋办?

祭出 IDA !!!!!!


struct copywritetag{  
    uint32_t sign;// "CZIP"   
    uint32_t version;//一个和日期有关的值  
    uint32_t unknown1;// 0x01   
    uint32_t size;// qqwry.rar大小   
    uint32_t unknown2;    
    uint32_t key;// 解密qqwry.rar前0x200字节所需密钥  
    char text[128];//提供商  
    char link[128];//网址 
};

最新--2016-2-5版本

array(6) { 
[1]=> int(1346984515)//时间戳
[2]=> int(42405) //
[3]=> int(1) //未知
[4]=> int(4825373) //文件大小
[5]=> int(783947556) //未知
[6]=> int(205) //key
}


这里,最重要的就是 key 这个整数拉! 接下来要在解码 qqwry.rar 里用到

下载, qqwry.rar 初步断定这个是一个压缩文件. 为啥? 因为比 qqwry.dat 明显小了不少!

别看他是 rar 扩展名, 肯定不是用的 rar 压缩算法. 为啥? 明显会用 zlib 这样的开源库来压缩嘛! 何况这样的压塑 php 都能做,是吧. 初步估计是 inflate 压塑, 对, 就是 zlib 用的那个. 约莫估计用 php 的 compress() 函数直接压塑来的.

但是,用 zlib 将 qqwry.dat 压塑后, 文件大小居然一样! 哈,不过,文件头看着他怎么就是不一样呢?

注意到上面的注释没? key 用来解码 qqwry.rar 的头 0x200 个字节. 也就是说, 先用 key 把开头的  0x200 个字节给解码了, 新的数据就可以 zlib 解压了.

啥? 你问我,这 0x200 偏移量怎么来的 ? 诶,笨, 自己比较去吧, 却是和 zlib 压塑的, 就只有前面 0x200 不一样罢了.

那么,这 0x200 个字节的数据, 到底如何解码呢?

来,再次祭出 IDA !!!!!!




好了,网上已经有了祭出 IDA 然后得出解码算法了, 咱看下

 for (int i = 0; i<0x200; i++)     {
          key *= 0x805;
          key++; 
          key &= 0xFF;   
          uint32_t v = reinterpret_cast<const uint8_t*>(qqwry_rar.data())[i] ^ key;    
          qqwry_rar[i] = v; 
}


good 这样就完成了.

接下来把 qqwry_rar 这个数组里的数据喂给 zlib 的 uncompress 函数就完成解压了! bingo


https://github.com/shuax/QQWryUpdate


本文转载自:http://microcai.org/2014/05/11/qqwry_dat_download.html

共有 人打赏支持
我是李达康
粉丝 31
博文 63
码字总数 25682
作品 0
济南
程序员
加载中

评论(1)

东方皓
东方皓
感谢分享
纯真IP数据库【快速更新】API

最近发现了 纯真ip数据库更新 【不觉明历的更新】 新的纯真IP库下载接口 放在了某CDN上 可以直接下载文件(现在为公开下载) HOST:raw.file.alimmdn.com 接口地址:/qqwry/{yyyy}/{mm}/{dd}...

我是李达康
2016/02/14
36
0
根据ip查找ISP运营商和归属地的几种方法

一般来说都是根据网上流传的各种IP库来解析获取对应的ISP和归属地的, 除非有实力的公司自己从运营商获取数据,然后做数据分析得到。 下面介绍前者,如何利用网上的IP库获取这类信息: 1、利...

大数据之路
2012/07/16
0
0
EaglePHP v2.2 更新日志

EaglePHP v2.2 发布了,改进记录包括: 1、修复数据库模型对象table()方法支持多表连接别名设置。 2、修复Model对象的join方法与表名连接bug。 3、修复框架在CLI命令行模式下执行删除操作出现...

maoxiaojian
2012/11/08
1K
3
PHP的IP地址查询库--QQWry

QQWry 是一个php扩展,实现语言为c。这个扩展的作用,就是根据ip来获取纯真数据库(QQWry.Dat)的地址信息。经过和discuz,CoolCode两个纯php版本的对比测试,这个c实现的扩展比纯php的实现效率...

匿名
2009/01/18
9K
2
Java解析归属地,以前用纯真库,现在需要兼容ipv6

之前项目用纯真的ip库,然后写的Java代码查询纯真库中相应ip的归属地,现在项目需要支持ipv6的ip地址,所以归属地查询就是问题,首先 纯真的ipv6版本的数据库去哪里下载? 其次 查询该ipv6的...

bluysky
2013/08/15
317
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
50分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
52分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部