3. 图片证据格式:JPEG / PNG / TIFF / BMP

图片证据,在电子取证里是最常见也最容易被忽视的一类。很多人觉得「不就是一张图嘛」,但真到了法庭上,格式不对、元数据丢了、哈希对不上——那可就麻烦了。

我个人习惯把图片证据的处理分成四个步骤:提取元数据 → 计算哈希 → 格式转换 → 隐写检测。每一步都有坑,咱们一个一个说。

3.1 EXIF 元数据提取

EXIF 是什么?说白了就是照片的「身份证」。相机型号、拍摄时间、GPS 坐标、镜头参数……全都嵌在文件里。我遇到过一起案子,嫌疑人说照片是网上下载的,结果 EXIF 里清清楚楚写着拍摄设备序列号和 GPS 坐标,直接打脸。

常用提取工具

工具 适用场景 备注
exiftool 批量提取、深度分析 支持几乎所有格式,命令行神器
Exif Pilot Windows GUI 操作 适合非技术人员查看
Python Pillow 自动化脚本集成 取证平台二次开发首选

关键点:提取 EXIF 时不要修改原文件。我建议先用 dd 或 fciv 做位对位备份,再对副本操作。

用 exiftool 提取 GPS 坐标的示例:

exiftool -GPSPosition -n evidence.jpg

输出类似 40.7128° N, 74.0060° W。嗯,这里要注意——有些手机厂商会把 GPS 信息放在 MakerNote 私有区,exiftool 默认不读,得加 -u 参数。

3.2 图片哈希校验

哈希校验是证据完整性的底线。MD5 和 SHA256 是取证界的两大标准。我个人更推荐 SHA256,虽然计算慢一点,但抗碰撞能力更强。法院现在也越来越认可 SHA256。

MD5 vs SHA256

算法 输出长度 安全性 取证推荐度
MD5 128 bit 已发现碰撞攻击 仅用于快速校验
SHA256 256 bit 目前无实际碰撞 首选

避坑指南:我曾经遇到过一张图片,肉眼看着一样,MD5 也相同,但 SHA256 不同。后来发现是文件末尾有多余的填充字节。所以,永远不要只依赖 MD5。

计算哈希的 Python 代码:

import hashlib

def calc_hashes(filepath):
    md5 = hashlib.md5()
    sha256 = hashlib.sha256()
    with open(filepath, 'rb') as f:
        while chunk := f.read(8192):
            md5.update(chunk)
            sha256.update(chunk)
    return md5.hexdigest(), sha256.hexdigest()

print(calc_hashes('evidence.jpg'))

3.3 格式转换与无损压缩

格式转换在取证里很常见——比如你拿到的是 BMP,但鉴定系统只认 JPEG。但转换有风险,搞不好证据就「变质」了。

各格式特点

格式 压缩方式 是否无损 取证适用场景
JPEG 有损压缩 否 网络传播、快速查看
PNG 无损压缩 是 截图、图表证据
TIFF 无损/有损可选 通常无损 原始证据存档
BMP 无压缩 是 极少使用,体积巨大

你想想看,JPEG 每次保存都会重新压缩,质量参数设成 100 也不是真正的无损。所以我的原则是:原始证据永远保留原始格式,转换只对副本做。

用 Python 做格式转换:

from PIL import Image

img = Image.open('evidence.bmp')
img.save('evidence_converted.png', format='PNG')
# 注意:转换后要重新计算哈希

小技巧:如果必须用 JPEG,把质量参数设到 95 以上,能最大程度减少信息损失。我一般用 98。

3.4 隐写术初步检测

隐写术,就是把秘密信息藏在图片里。肉眼看不出来,但哈希会变。我处理过一起商业间谍案,嫌疑人把机密文件藏在风景照的像素低位里,用 LSB 隐写——要不是我们做了隐写检测,根本发现不了。

常见隐写手法

  • LSB(最低有效位):修改每个像素的最低 1-2 bit,人眼无法察觉
  • DCT 系数修改:在 JPEG 的频域里嵌入数据
  • 调色板隐写:修改 GIF/PNG 的调色板顺序
  • 文件附加:在图片文件末尾追加其他数据

初步检测可以用 zsteg 或 steghide 的检测模式。我个人习惯先用 binwalk 扫一遍,看看文件末尾有没有附加数据:

binwalk -Me evidence.jpg

如果输出里出现了 ZIP 或 PDF 的签名,那基本可以确定有隐写。

注意:隐写检测不是 100% 可靠的。有些高级隐写会加密嵌入数据,或者用自适应算法避开统计异常。初步检测只能发现「可疑」,不能作为定案依据。

3.5 知识体系总览

下面这张图把本章的核心流程串起来了。你可以把它当作操作 checklist:

图片证据处理流程 图片证据处理流程 原始图片证据 位对位备份 (dd) EXIF 元数据提取 哈希校验 (MD5+SHA256) 格式转换 + 隐写初步检测 核心原则 • 永远操作副本 • 保留原始格式 • 双哈希交叉验证 常见坑 • JPEG 重压缩 • EXIF 被清空 • 隐写改变哈希

这张图里每一步都环环相扣。跳过任何一步,都可能让证据在法庭上被质疑。我个人建议,每次处理图片证据都按这个流程走一遍,形成肌肉记忆。

3.6 实战避坑清单

  • 不要用手机看图软件打开证据图片——它们可能会自动旋转、压缩、甚至修改 EXIF
  • 哈希值要记录在案——我习惯把哈希值打印出来,签字封存
  • TIFF 转 JPEG 要小心——16 bit 的 TIFF 转成 8 bit JPEG 会丢失色深信息
  • 隐写检测不是一次性的——同一个文件可能用了多种隐写手法,多工具交叉验证更稳妥

最后说一句:图片证据处理,慢就是快。每一步都做扎实了,后面出问题的概率就小很多。我见过太多因为「赶时间」跳过哈希校验,结果证据链断裂的案例了。