不过,虽说问题的本质一样,但这两个大厂出问题的理由却并不相同。
谷歌是因为 Android 9 到 Android 10 的时候,读写文件相关的一个接口发生了变动,而且没有记载在文档和更新日志里。

祖传的代码在旧接口上会正确删除旧文件,不会留下只因脚。然而在新版本下,同样的代码就只能覆盖写入旧文件,只要新文件小于旧文件,旧文件的残余部分就会留下来。

而微软这边的问题可能要更大些。。。
根据微软的 API 规则,程序员在调用覆盖文件的接口时,如果没有额外的特别指示 Windows 把旧文件删掉,那么新文件就会直接从头开始覆盖旧文件,然后留下一堆旧文件的残余。
但凡程序员在写的时候没注意到这个规则,就会有安全风险。。。
至于微软为何要把这种不安全的行为作为接口的默认值,世超只能说,或许这就是国际大厂对编程的精妙理解吧。
好消息:微软的接口一直都没变过;坏消息:但是设计的和狗屎一样。

严重的是,随着这个漏洞原因的公开,已经有人在更加常用的 JPG 格式的图像上发现了类似的问题。
考虑到大多数截屏和手机拍照都是 JPG 直出,漏洞扩展到 JPG 后,这个问题其实是是扩散了。
而且由于 JPG 和 PNG 的压缩方式不同,文件头部被覆盖的 JPG 旧文件,搞不好还能实现几乎完美的还原。。。还原的JPG图像只是比原图多了点噪点

