fixzt 0.3.0

A tool to fix ZIP file offset issues caused by prepended data (e.g., image seeds)
# 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文件损坏可能无效。