V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tracert
V2EX  ›  Windows

Windows 自带截图工具存在漏洞,裁剪内容可被还原

  •  
  •   tracert · 2023-03-23 08:58:03 +08:00 · 4816 次点击
    这是一个创建于 616 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,谷歌手机中也有同样的漏洞

    https://news.mydrivers.com/1/899/899180.htm

    https://news.mydrivers.com/1/898/898721.htm

    所以,比较保险的方法还是打码后另截图
    第 1 条附言  ·  2023-03-23 11:13:20 +08:00
    7 楼有补充
    第 2 条附言  ·  2023-03-23 12:22:41 +08:00
    (被迫)再补充,15 楼有傲娇发言(大雾),16 楼有对 1 楼的修正,对 7 楼的汉化
    22 条回复    2023-03-30 15:09:03 +08:00
    nothingistrue
        1
    nothingistrue  
       2023-03-23 09:16:18 +08:00   ❤️ 3
    标题党,撤了吧。两个问题都是图片修改后原图片还保留着,并不是修改后的图片还携带原始信息。
    cherryas
        2
    cherryas  
       2023-03-23 09:31:47 +08:00
    "同时,用户已经上传的图片,也存在被依靠该漏洞复原的可能。"
    TGl2aWQgZGUgZGll
        3
    TGl2aWQgZGUgZGll  
       2023-03-23 09:50:31 +08:00
    @nothingistrue #1 这难道不严重吗?比包含 exif 信息严重多了。exif 最多泄露你的 GPS 位置和手机型号,日期。

    这玩意泄露的可能就是你自己已经马赛克掉的各种敏感信息
    opengps
        4
    opengps  
       2023-03-23 09:52:44 +08:00
    你可以套娃啊,截图之后再截图一次
    cjpjxjx
        5
    cjpjxjx  
       2023-03-23 10:00:49 +08:00
    那么,下图是使用 Win10 截图工具在截图后点击保存,随后裁剪并再次覆盖源文件保存的截图,有人能还原出被我裁剪掉的内容吗

    https://img.cencs.com/images/2023/03/23/O1QP.png
    lambdaq
        6
    lambdaq  
       2023-03-23 10:05:54 +08:00
    @cjpjxjx 楼主标题党忘记说了,仅限 win11 那个工具。。。。

    目测是三哥做的 KPI 应用,编辑新图片后,忘记把老数据截断了。。。
    feedcode
        7
    feedcode  
       2023-03-23 10:11:18 +08:00   ❤️ 3
    中文翻译有问题.

    current exploits only work with PNG images, not JPEGs.
    A screenshot cropped with Snipping Tool and then saved over the original (the default behavior) adds a new IEND chunk to the PNG image but leaves a bunch of the original screenshot's data after the IEND chunk.
    https://www.w3.org/TR/PNG-Structure.html

    app https://acropalypse.app/
    proof code: https://gist.github.com/DavidBuchanan314/93de9d07f7fab494bcdf17c2bd6cef02
    leafin
        8
    leafin  
       2023-03-23 10:16:24 +08:00 via Android
    如果我没理解错,这两个新闻说的是修改前的原始文件没有删除而是被新文件覆盖,有被还原的可能性。
    我个人理解这种还原需要接触到存储设备,是类似硬盘数据恢复这种操作。
    所以如果把这张图片拷贝/发送给别人,对方是无法还原的
    tool2d
        9
    tool2d  
       2023-03-23 10:21:52 +08:00
    @leafin "所以如果把这张图片拷贝/发送给别人,对方是无法还原的"

    可以还原,你看 7 楼的代码就知道了。只能是 png 。
    newmlp
        10
    newmlp  
       2023-03-23 10:26:18 +08:00
    @leafin 看代码应该不是覆盖旧文件,而是直接在旧文件上重新开始写入新数据
    leafin
        11
    leafin  
       2023-03-23 10:38:37 +08:00 via Android
    @newmlp 所以文件还是同一个,不是新建一个文件?
    newmlp
        12
    newmlp  
       2023-03-23 10:50:19 +08:00   ❤️ 1
    @leafin 可能文件句柄都是同一个,然后 seek 0 开始写入新数据,啊哈哈哈
    oldshensheep
        13
    oldshensheep  
       2023-03-23 11:07:34 +08:00 via Android
    改原文件的话,打开文件用 r+,然后读取数据,删除全部数据,写入新数据。
    正确做法应该是 seek(0),然后 truncate()。

    之前开发就遇到这个问题。。。。
    oldshensheep
        14
    oldshensheep  
       2023-03-23 11:11:00 +08:00 via Android
    @cjpjxjx 这个需要知道裁剪前原图的大小,用 7 楼的 app 那个链接,或者 Python 代码试试
    nothingistrue
        15
    nothingistrue  
       2023-03-23 11:25:26 +08:00
    @TGl2aWQgZGUgZGll #3 以楼主两个链接的对应内容来看,问题是,本地文件系统残留原始内容,修改之后的文件是没有残留的,那就自然不严重。当然看 7 楼贴出英文原文后,问题是修改之后的文件当中,而非本地文件系统残留原始内容,那就是很严重的。这不但表示楼主的两个链接仍然是标题党,还表示特么的是机翻加农场。
    nothingistrue
        16
    nothingistrue  
       2023-03-23 11:35:49 +08:00
    @tracert 再加个附言吧:

    原始链接的内容有问题,1 楼的回复基于原始内容也是错的,问题很严重。7 楼英文的真正意思大致如下。截图修改并保存的时候,在文件系统处理上上用的是追加方式,于是原始内容仍然存在与新文件中。即,修改之后的文件还保留着修改之前文件的完整信息,所以问题非常大。只有 PGN 有此问题,JPEG 无此问题。
    oldshensheep
        17
    oldshensheep  
       2023-03-23 13:33:23 +08:00
    @nothingistrue 其实是覆盖而不是追加,修改后的文件并没有保留着修改之前文件的完整信息,而是保留了没有覆盖的部分信息。
    其实 JPG 保存同样的也是没有调用 truncate ,但是 JPG 不能被复原,是因为 JPG 压缩过程有熵编码,而它的编码信息在文件头部,而软件是从文件头部覆写的,所以就不能复原了。
    jhdxr
        18
    jhdxr  
       2023-03-23 15:35:46 +08:00
    @cjpjxjx 按照 7L 的工具还需要屏幕分辨率,我盲猜了一个 2560*1440 (从你截图的内容上预估的),但失败了
    crokily
        19
    crokily  
       2023-03-23 20:08:36 +08:00
    我拿 ios 的截图试了下
    截图,裁剪成四分之一大小
    然后进入图库,此时该图确为四分之一大小,编辑该图,右上角就有一个复原按钮
    点复原,图片就变成了原大小。
    这说明 ios 的截图裁剪也是有保留原图信息的
    2le
        20
    2le  
       2023-03-24 10:20:21 +08:00
    看了下代码和原帖,似乎只要存在未被破坏的 IDAT 数据块,就可以实现部分复原。我本地验证了下,只要确保图片宽度是正确的(高度不是必须),就可以实现图片复原。图片宽度可以通过递增尝试,写个遍历脚本,成功率应该挺大的,拿 4k 分辨率来算,只需要尝试 (3840-截图后宽度) 次。
    2le
        21
    2le  
       2023-03-24 12:52:58 +08:00
    @2le 再补充下:但由于 PNG 是先编码压缩再按顺序分块,所以在丢失了部分前置的 IDAT 数据块后,仅依靠尾部的 IDAT 数据块,是存在一定几率复原失败的。
    camillo
        22
    camillo  
       2023-03-30 15:09:03 +08:00
    @crokily 微软的我不评价 iOS 的 Photos 非破坏编辑这个是 feature 如果你把这张剪裁过的照片分享出去了并不能被别人复原……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:47 · PVG 21:47 · LAX 05:47 · JFK 08:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.