JPEG 图片篡改检测 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
voidshine
V2EX    分享创造

JPEG 图片篡改检测

  •  
  •   voidshine 2024-10-17 17:02:48 +08:00 2439 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我写一个简单的 JPEG 图片防篡改工具. 希望大家帮我看看有没有漏洞可以钻.

    主要思路是对 JPEG 图片进行签名并将签名信息写入 EOI 文件尾, 若签名后的图片内容有任何的改动(不包括修改文件名), 则无法通过验证, 以此来检测该图片相较于签名前的图片是否有改动过.

    项目已上传至GitHub

    $ pixelguard sign -i official.jpg -o output_official.jpg # 将签名信息写入图片尾部 JPEG file signature successful! $ pixelguard verify output_official.jpg # 图片未被修改 This JPEG file has not been tampered with. $ exiftool -Artist="happy-shine" output_official.jpg # 修改 EXIF 信息(或修改像素点之类的操作) 1 image files updated $ pixelguard verify output_official.jpg # 再次验证, 检测到图片内容被修改 Warning: This JPEG file has been tampered with! 
    24 条回复    2024-10-18 15:37:31 +08:00
    vus520
        1
    vus520  
       2024-10-17 17:30:10 +08:00
    截屏缩放裁剪呢?
    voidshine
        2
    voidshine  
    OP
       2024-10-17 17:33:28 +08:00
    @vus520 测试过缩放, 也能检测到图片被修改. 原理上只要动过 JPEG 文件的文件头至文件尾的任何内容, 都会与签名信息对不上.
    hatw
        3
    hatw  
       2024-10-17 17:36:39 +08:00
    比较 MD5 啥的不也一样?
    voidshine
        4
    voidshine  
    OP
       2024-10-17 17:43:01 +08:00
    @hatw 这种方法是自举的, 不依赖外部存储, 能自己证明我是我; md5 比较也就意味着要 原始图片的 md5 与 要验证的图片 md5 进行对比.
    hatw
        5
    hatw  
       2024-10-17 17:44:14 +08:00
    @voidshine #4 了解,谢谢
    alexsz
        6
    alexsz  
       2024-10-17 17:46:47 +08:00
    一时想不出有哪些应用场景
    vodshine
        7
    voidshine  
    OP
       2024-10-17 17:54:36 +08:00
    @alexsz 确保监控摄像头捕获的图像未被篡改......之类的?
    NoOneNoBody
        8
    NoOneNoBody  
       2024-10-17 17:55:23 +08:00   1
    EOI 就是 ffd9 之后吧,这些截了也不影响图片显示,不少图片存储的服务器是直接截了的,避免借传图片之名传不当信息
    如果截了之后,如何自举?
    voidshine
        9
    voidshine  
    OP
       2024-10-17 17:59:09 +08:00
    @NoOneNoBody 这个确实是一个问题, 还不知道咋解决, 现在的做法是直接当成被修改过了, 不接受识别不了签名的图片:

    $ pixelguard sign -i official.jpg -o output_official.jpg
    JPEG file signature successful!

    $ pixelguard verify official.jpg # 原图, 没有签名信息
    Warning: This JPEG file has been tampered with!
    iqoo
        10
    iqoo  
       2024-10-17 18:04:04 +08:00
    还以为利用水印信息存储签名呢
    voidshine
        11
    voidshine  
    OP
       2024-10-17 18:06:07 +08:00
    @NoOneNoBody 其实好像就是自举不了, 仅针对已经签过名的图片的篡改识别, 未签名 或 签名信息被破坏 或 签名信息与图片信息对不上 的都算被篡改过了
    ltyj2003
        12
    ltyj2003  
       2024-10-17 18:06:08 +08:00 via Android   1
    人家篡改完重新生成个签名信息替换,阁下当如何应对?
    voidshine
        13
    voidshine  
    OP
       2024-10-17 18:10:45 +08:00
    @ltyj2003 用的本机的 gpg 指纹生成的签名, 别人机器生成的签名本机应该是检测为已被修改过, 因为属于 签名信息与图片信息对不上
    yhnbgfd
        14
    yhnbgfd  
       2024-10-17 18:11:00 +08:00
    一直在想有什么场景,
    比如, 以后手机截图自带签名功能, 以后各种屏幕截图拿去验签一下就知道是真截的还是 p 的? 额, 如果我直接截屏 P 的图片阁下..额
    Afcar
        15
    Afcar  
       2024-10-17 18:20:32 +08:00
    @ltyj2003 你说到点子上了
    Yukineko
        16
    Yukineko  
       2024-10-17 18:31:29 +08:00
    @voidshine #13 意识是只有在特定机器上校验才能通过?换一个机器就校验不了了?
    TimG
        17
    TimG  
       2024-10-17 18:39:27 +08:00 via Android
    @voidshine 13# 这种情况也能自举?不用存储旧信息就能实现吗?如果旧验证信息同样存在于文件内那就存在被一起篡改的可能,否则理论上就没法自举,如果能同时实现,确实是有巧思,佩服。
    kera0a
        18
    kera0a  
       2024-10-17 18:43:04 +08:00 via iPhone
    下一步是不是要引入 ca 了
    voidshine
        19
    voidshine  
    OP
       2024-10-17 18:44:04 +08:00 via iPhone
    @Yukineko 是的,但是可以将一台机器上的 gpg 公钥私钥导出为文件,然后 scp 到目标服务器再导入,就能识别了。做这个的初衷就是上传到本服务器的 jpeg 要被打上签名,用户下载的图片是带签名的图片
    cavan
        20
    cavan  
       2024-10-17 18:50:17 +08:00
    可以考虑图像数字水印技术,这种技术可以保证图片肉眼看不出内容变化的情况下,隐写版权信息进去。比如对图像矩阵进行离散余弦变换后,把版权信息写入到矩阵的左上角,然后再离散余弦反变换回 jpeg 图像,这样截图、缩放、旋转后,版权信息一般都还在。
    voidshine
        21
    voidshine  
    OP
       2024-10-17 19:10:12 +08:00 via iPhone
    @cavan 之前参考过这个 ,挺厉害的. https://github.com/guofei9987/blind_watermark
    qdwang
        22
    qdwang  
       2024-10-17 19:54:53 +08:00
    我目前只想到一种适用情况。就是怕云服务器把我图片改了。。。其他好像没什么用?
    cat
        23
    cat  
       2024-10-18 08:21:14 +08:00
    @voidshine 所以在哪台机器生成的 只能在哪台机器验证吗,这个局限性 感觉比截掉 ffd9 的问题更大啊
    Greatshu
        24
    Greatshu  
       2024-10-18 15:37:31 +08:00
    一个场景是监控录像机给下载的图片签名,保证是图片没有修改
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:17 PVG 05:17 LAX 14:17 JFK 17:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86