# ZIP文件偏移修复工具 (fixt)
一个用于修复ZIP文件偏移量问题的命令行工具,专门解决"图种"或其他在ZIP文件头部添加数据导致的ZIP结构损坏问题。
## 功能特点
- ✅ 支持普通ZIP格式(32位偏移)
- ✅ 支持ZIP64格式(64位偏移)
- ✅ 修复因头部附加数据导致的偏移量错误
- ✅ 自动识别ZIP格式类型
- ✅ 保持原始文件完整性
- ✅ 命令行界面,使用简单
## 解决的问题
当ZIP文件头部被添加额外数据时(如图种文件),会导致以下问题:
```bash
unzip -l corrupted.zip
# 输出:
# warning [corrupted.zip]: 100 extra bytes at beginning or within zipfile
# (attempting to process anyway)
```
这些问题出现的原因是:
1. ZIP文件内部记录的偏移量仍然基于原始ZIP结构
2. 添加头部数据后,实际ZIP结构位置发生偏移
3. 解压工具无法正确定位文件数据
## 工作原理
### ZIP文件结构基础
ZIP文件由以下几部分组成:
1. **本地文件头** - 存储每个文件的元数据和偏移信息
2. **文件数据** - 实际的压缩文件内容
3. **中央目录** - 所有文件的索引信息
4. **中央目录结束记录(EOCD)** - ZIP文件的尾部结构
### 修复逻辑
#### 1. 定位ZIP尾部结构
- 在文件末尾64KB范围内搜索ZIP签名
- 优先查找ZIP64定位器签名(`0x07064b50`)
- 其次查找普通EOCD签名(`0x06054b50`)
#### 2. 计算偏移量
```
prefix_len = 实际中央目录位置 - 记录的中央目录偏移量
```
如果`prefix_len > 0`,说明存在前置数据需要修复。
#### 3. 修复中央目录条目
- 遍历中央目录中的每个文件条目
- 修正32位本地头偏移量(位于条目+42字节处)
- 对于ZIP64格式,同时修正扩展字段中的64位偏移量
#### 4. 修复结构偏移
- **普通ZIP**:修正EOCD中的中央目录偏移(+16字节处)
- **ZIP64**:
- 修正ZIP64 EOCD中的中央目录偏移(+48字节处)
- 修正ZIP64定位器中的EOCD偏移(+8字节处)
## 使用方法
### 编译程序
```bash
cargo build --release
```
### 运行修复
```bash
# 编译后直接运行
./target/release/fixt <待修复ZIP文件>
# 或使用cargo运行
cargo run <待修复ZIP文件>
```
### 使用示例
```bash
# 创建图种文件(示例)
echo "图片头部数据" > header.txt
zip normal.zip file1.txt file2.txt
cat header.txt normal.zip > image_seed.zip
# 修复文件
cargo run image_seed.zip
# 验证修复结果
unzip -l image_seed.zip # 应该无警告
```
## 技术细节
### 支持的ZIP格式
| 普通ZIP | 32位偏移,最大4GB | 修正中央目录中的32位偏移字段 |
| ZIP64 | 64位偏移,支持超大文件 | 额外处理扩展字段中的64位偏移 |
### ZIP签名常量
```rust
const EOCD_SIG: u32 = 0x06054b50; // 中央目录结束记录
const ZIP64_LOCATOR_SIG: u32 = 0x07064b50; // ZIP64定位器
const CENTRAL_DIR_SIG: u32 = 0x02014b50; // 中央目录条目
const ZIP64_EXT_TAG: u16 = 0x0001; // ZIP64扩展字段标签
```
### 错误处理
程序包含完善的错误处理机制:
- **IO错误**:文件读写问题
- **EOCD未找到**:无法识别的ZIP格式
- **ZIP格式错误**:文件结构损坏
## 安全性
- ✅ 原地修复,不创建临时文件
- ✅ 修正前验证ZIP结构完整性
- ✅ 防止越界访问,避免文件损坏
- ✅ 处理边界情况,确保数据安全
## 限制与注意事项
1. **仅修复偏移量问题**:无法修复其他类型的ZIP损坏
2. **需要写权限**:程序需要读写文件的权限
3. **建议备份**:对重要文件建议先备份再修复
## 开发信息
- 语言:Rust
- 依赖:thiserror(错误处理)
- 版本:0.1.0
- 兼容平台:支持Rust的所有平台
## 许可证
本项目采用开源许可证,具体请查看LICENSE文件。
## 贡献
欢迎提交Issue和Pull Request来改进这个工具。
---
**注意**:此工具主要用于修复因图种等技术导致的ZIP偏移问题,对于其他类型的ZIP文件损坏可能无效。