文档章节

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

我是李达康
 我是李达康
发布于 2016/02/05 13:10
字数 780
阅读 588
收藏 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
博文 68
码字总数 26262
作品 0
济南
程序员
私信 提问
加载中

评论(1)

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

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

我是李达康
2016/02/14
36
0
PHP的IP地址查询库--QQWry

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

匿名
2009/01/18
9K
2
EaglePHP v2.2 更新日志

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

maoxiaojian
2012/11/08
1K
3
Java解析归属地,以前用纯真库,现在需要兼容ipv6

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

bluysky
2013/08/15
372
0
Python读取纯真IP数据库

一、获取最新版IP地址数据库qqwry.dat 纯真IP地址数据库下载地址:http://update.cz88.net/soft/setup.zip 在windows机器上下载解压,点击setup.exe安装,在安装目录下的qqwry.dat即是最新版...

张斌_青岛
2014/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
20
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
15
0
my.ini

1

architect刘源源
今天
14
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
15
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部