找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 8396|回复: 20

[【原创】] 揭开PDG和PDF书签制作的小秘密(上)

[复制链接]
regina 该用户已被删除
发表于 2008-8-4 19:42:23 | 显示全部楼层 |阅读模式
揭开PDG和PDF书签制作的小秘密(上)

(图片上传数量有限制,不发了,已生成了PDF文件)


今天,我们一起探讨PDG文件中的书签。相信大家在CX下载某本书后,在PDG文件的同一目录下一般会有BookContents.dat和bookinfo.dat两个文件。bookinfo.dat文件可以直接用“记事本”打开,里面记录了书的相关信息,有:书名、作者、页数、SS号、出版日期等。

但BookContents.dat文件用记事本打开会乱码(这是因为里面采用了ZLIB压缩算法),其实这个文件中保存了PDG的书签信息,下面我们来看看如何获取它里面的内容。


其实,在这之前,许多高手都已经开发了相应的软件。像cheming大侠,在下面的帖子里
http://www.readfree.net/htm/200807/4621995.html
http://www.readfree.net/bbs/read.php?tid=216685&fpage=5
已经揭示了BookContents.dat的内部结构,并开发了BookContents.dat Editor等软件。

今天,我想换一个角度,不用大侠们现成的工具,自己用平常的工具,获取BookContents.dat内容,这会加深我们的理解。

首先,用UltraEdit打开某本书的BookContents.dat文件,最好事先备份一个,再打开。
然后,点工具栏上“切换十六进制模式”按钮,如图:



图中,我划红色框的部分是书签文件的头部,也是我们需要改动的部分;其它部分(即从28h以后的部分)是书签的具体内容,这部分是压缩存储的,我们后续的工作是要把这一部分解压。

下面,先改书签头部。方法如下:
在红色的部分里共有三行,把第一、第二行都删除,然后把第三行的头三个字节改成“1F 8B 08”,其余部分都改成“00”(红色以外的部分不要改)。

注:删除前两行方法是,先把光标定位到文件首字节,再选择“编辑”“十六进制功能”“十六进制增加/删除…”,如图:


然后,点“删除”,输入“32”字节,按“确定”完毕。
  

改后,如下图所示:
  

接着,把BookContents.dat另存为BookContents1.dat.gz(注意:加后缀名“.gz”)。
再用WinRar解压BookContents1.dat.gz文件,此时会弹出“CRC循环冗余校验”的错误,不去管它,单击“关闭”。此时,你会发现虽然有错误所示,但文件还是解压出来了BookContents1.dat。
此时,再用“记事本”打开你的“BookContents1.dat”,会发现它已经变成了文本格式。
  

  

BookContents1.dat文件中的每一行,代表一个书签,以“封面页 | 00 | 1 | 0 | 1 |”为例:
第一位:“封面页”是书签的名称;
第二位:“00”控制书签的缩进,在同一级别的编号依次递增,每缩进一层,增加两位编号,编号以“十六进制”表示。
第三位:“1”书签导航的页码。
第四位:“0”我还不太清楚,高手可以告诉我。
最后一位:“1”是书签的类别(主要有:封面页1、书名页2、版权页3、前言页4、目录页5、正文页6、插页7、附录页8、封底页9)

综上,我们可以看到,其实BookContents.dat的结构并不复杂,最主要的原理就是:它在28h以后的部分是gzip压缩存储的,这也是我们为什么可以用WinRar解压的根本原因。下次,我来介绍“PDF Reference学习札记(二)”探讨PDF的书签。只有当我们清楚了PDG和PDF两种书签的实现方式,这样我们开发bkcntEditor.exe等软件就易如反掌了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2008-8-4 21:01:29 | 显示全部楼层
多谢提供,以后做书签快多了!
回复

使用道具 举报

发表于 2008-8-5 12:18:39 | 显示全部楼层
写的不错,了解了
回复

使用道具 举报

regina 该用户已被删除
 楼主| 发表于 2008-8-5 19:25:35 | 显示全部楼层
更正一处错误:

“封面页 | 00 | 1 | 0 | 1 |”为例:
第二位:“00”控制书签的缩进,在同一级别的编号依次递增,每缩进一层,增加两位编号,编号以“三十六进制”表示。

不是“十六进制”表示。
回复

使用道具 举报

发表于 2008-8-5 23:45:17 | 显示全部楼层
楼主写的很认真!
支持!
回复

使用道具 举报

发表于 2008-8-5 23:49:04 | 显示全部楼层
可惜图都没有了
原来pdf中的内容和这个是一样的,还以为是下呢
回复

使用道具 举报

regina 该用户已被删除
 楼主| 发表于 2008-8-6 10:04:16 | 显示全部楼层

回 5楼(iamqsar) 的帖子

我已经补齐了,谢谢提醒:)
回复

使用道具 举报

发表于 2008-8-6 14:30:08 | 显示全部楼层
谢谢,学习了。

请问你是怎么知道BookContents.dat是gzip压缩的呢?自己怎么摸索的,或者用什么软件能测出文件的压缩算法?
回复

使用道具 举报

regina 该用户已被删除
 楼主| 发表于 2008-8-6 21:54:39 | 显示全部楼层

回 7楼(tmdyzc007) 的帖子

试探性地去尝试,比较痛苦的过程
回复

使用道具 举报

peacewyj@126 该用户已被删除
发表于 2008-8-6 22:40:25 | 显示全部楼层
偶是新手,看看很有收获,谢谢了
回复

使用道具 举报

发表于 2008-8-8 22:49:36 | 显示全部楼层
楼主,PDF的书签呢?
回复

使用道具 举报

regina 该用户已被删除
 楼主| 发表于 2008-8-9 11:11:14 | 显示全部楼层

回 10楼(psong789) 的帖子

回复

使用道具 举报

发表于 2008-8-9 15:44:10 | 显示全部楼层
又学了一招
虽然LZ深陷绯闻之中,我等菜鸟依然强烈支持LZ继续开办扫盲班,造福大众!
回复

使用道具 举报

发表于 2008-8-11 17:07:37 | 显示全部楼层
楼主分析的很深刻,佩服
回复

使用道具 举报

发表于 2008-8-11 17:23:17 | 显示全部楼层
支持楼主,应该有奖励呀。
回复

使用道具 举报

发表于 2008-8-11 20:32:58 | 显示全部楼层
为什么好多连接都说是
积分要求 您现在的积分
威望:-5 财富:-100 认证指数:0发帖数:5
回复

使用道具 举报

发表于 2008-8-11 20:58:21 | 显示全部楼层
真是大长见识,令人叹为观止。
回复

使用道具 举报

finest 该用户已被删除
发表于 2008-8-17 08:19:48 | 显示全部楼层
看来对文本格式的pdg有效
回复

使用道具 举报

发表于 2008-8-17 14:20:14 | 显示全部楼层
写的很好,回头试试看。。。






精选好书推荐,精彩不容错过!

软件加密技术从入门到精通【仅售5币】
回复

使用道具 举报

发表于 2008-8-18 08:52:09 | 显示全部楼层
又学了一招,下回试试效果啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-3 15:08 , Processed in 0.403672 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表