初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 2017-4-28
- 在线时间
- 15 小时
|

楼主 |
发表于 2017-5-16 15:51:29
|
显示全部楼层
解压算法过程:
一. 压缩了file.zip ,内部只有一个空文件1, 进行调试跟踪.
1. 打开压缩文件.
2. 查询centraldir信息从end of centraldir
2.1. 获取文件大小.
2.2. 如果文件大小小于MAX_COMMENTSIZE 那么直接读取整个文件,否则读取MAX_COMMENTSIZE。
2.3. 读取出readsize。
2.4. 从读取出的buffer中来判断0x06054b50,找出这个end of centraldir位置.
2.5. 调转到endcentralpos 读取signature code(0x06054b50)
2.6. 读取卷数,entry数量,centraldir 大小/偏移量,comment_size 等.
2.7. centralendpos -(centraloffset + centraldirsize) , 来获取centraldir对于卷开头位置的偏移量,准备读取centraldir.
3. 读取centraldir信息
3.1. 从offsetcentraldir开始读取signature(0x02014b50) .
3.2. 读取出版本号,压缩方式,日期信息,CRC,压缩大小,未压缩大小,entryname大小,file_extra_size , size_comment_file,起始卷index,internal file attr., external file attr., 当前项对于centraldir 的offset.
4. 读取entryinternal信息,比如名称,offset
5. 读取local file header 信息
5.1. 检查signature(0x04034b50) , 日期,协议中local header信息.
二. 内部空目录1, 进行调试跟踪
实际上差别仅仅在entryname,entryname length,以及由此导致的结构offset.
|
|