什么是文件魔数
很多文件格式在开头保留固定字节,用来标记格式或版本,这些字节常被称为文件签名或魔数。操作系统和取证工具可以依据内容判断类型,而不是盲目信任文件名后缀。
| 格式 | 常见开头字节 | 文本形式 |
|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | 包含 PNG 标识 |
| ZIP | 50 4B 03 04 | PK |
25 50 44 46 | %PDF | |
| ELF | 7F 45 4C 46 | .ELF |
| Windows PE | 4D 5A | MZ |
从一段 Hex 判断文件
题目给出以下数据,但没有说明来源:
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
前 8 个字节匹配 PNG 签名,随后出现 49 48 44 52,转为文本是 IHDR,对应 PNG 的图像头数据块。这比“看起来像十六进制”更强,因为多个结构信号相互印证。
什么时候适合转成文本
Hex 转文本适合检查可打印 ASCII、Flag 片段、协议字段和已知标识。遇到图片、压缩包、程序或加密数据时,大量字节无法显示为文本是正常现象。此时应保留字节并交给对应解析器,而不是把乱码当作失败。
可以先转换前几十个字节寻找可读标识,再决定是否重建文件。重建时必须保持原始字节顺序,不能删除看似无意义的 00。
字节序与数值字段
魔数通常按文件中出现的顺序书写,但多字节数值可能采用大端或小端。比如字节 78 56 34 12 按小端解释为 0x12345678。只有在解析长度、偏移、时间戳等数值字段时才应套用字节序;不要把整份文件随意倒序。
常见错误
- 只看扩展名,不检查实际内容。
- 把十六进制字符串中的一个字符当成一个字节;实际通常两个 Hex 字符表示一个字节。
- 复制时混入
0x、逗号或不可见字符,却没有记录清理规则。 - 只匹配两个字节就下结论,没有验证后续结构。
- 修复文件头后覆盖原件,导致无法回退和复核。
文件类型判断清单
- 复制样本并计算 SHA-256,保留原件只读。
- 读取开头 16–64 个字节,记录原始 Hex。
- 匹配常见签名,并检查后续块名或结构字段。
- 核对文件长度、结尾标记和容器内容。
- 需要修复时在副本上操作,并重新计算哈希。
签名匹配不是最终鉴定
极短的签名可能碰巧出现,也可能被人为伪造。可靠结论应同时依据文件头、内部结构、长度和解析结果。