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

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

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

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

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

两个文件.

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

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

我们来打开它

ghex copywrite.rar

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

那咋办?

祭出 IDA !!!!!!

struct copywritetag{

uint32_t sign;// "CZIP"

uint32_t version;//一个和日期有关的值

uint32_t unknown1;// 0x01

uint32_t unknown2;

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

}

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

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

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

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

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

for (int i = 0; i<0x200; i++) {

key *= 0x805;

key++;

key &= 0xFF;

}

good 这样就完成了.

用过珊瑚虫的童鞋都知道, 有个叫 "纯真数据库" 的东西, 可以查询 ip 地址对应的物理地址. 有关该数据库格式和解析的内容, 本帖子暂时不讲, 有机会的话, 偶会另行开个新帖子讲讲. 这里讲的是, 不通过官方的查询程序, 如何获取到这个数据库. 通过对官方程序进行抓包, 得出下载此数据库, 主要需要下载 http://update.cz88.net/ip/copywrite.rar 和 两个文件. 但是很明显,这两个压根不是 rar 文件呀! 别被扩展名迷惑了. 那么, copywrite.rar 里到底有神马东西呢? 我们来打开它 ghex copywrite.rar 好吧,老实说, 根本看不明白嘛! 那咋办? 祭出 IDA !!!!!! struct copywritetag{ uint32_t sign;// "CZIP" uint32_t version;//一个和日期有关的值 uint32_t unknown1;// 0x01 uint32_t unknown2; 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 } 别看他是 rar 扩展名, 肯定不是用的 rar 压缩算法. 为啥? 明显会用 zlib 这样的开源库来压缩嘛! 何况这样的压塑 php 都能做,是吧. 初步估计是 inflate 压塑, 对, 就是 zlib 用的那个. 约莫估计用 php 的 compress() 函数直接压塑来的. 啥? 你问我,这 0x200 偏移量怎么来的 ? 诶,笨, 自己比较去吧, 却是和 zlib 压塑的, 就只有前面 0x200 不一样罢了. 那么,这 0x200 个字节的数据, 到底如何解码呢? 来,再次祭出 IDA !!!!!! 好了,网上已经有了祭出 IDA 然后得出解码算法了, 咱看下 for (int i = 0; i<0x200; i++) { key *= 0x805; key++; key &= 0xFF; } good 这样就完成了.
经验分享 程序员 微信小程序 职场和发展