互联网离不开八卦,八卦离不开打码。每个网友的手机里多少都躺着几个活跃的群,流传着不同的聊天截图和消息。为了不被揪出源头或者多少保护一点隐私,截图通常都顺手打了马赛克。然而,资深的PWN友都知道,从来都没有100%的安全。不论是照片还是文字,打完码(像素化处理)后都有可能被还原……
最近,安全公司Bishop Fox 的首席研究员 Dan Petro公开了一项研究成果,用自己写的工具可以将打了马赛克的文字还原。他录制了一段视频,将研究过程清楚展现了出来。
至于为什么想到做这个工具,事情还要从2020年底说起。当时,信息安全顾问 Sipke Mellema 公开了能够去除马赛克、还原文字的 Depix项目,成功吸引了学术界和业界的关注。利用线性方框滤波器(linear box filter)单独处理像素框实现覆盖的原理,Depix 可以对搜索图像中的每一个 block 进行像素化操作,寻找直接的字母匹配,做到基本还原文字信息。
不过从结果来看,Depix 还不够完美,还原出的文字有模糊或缺失,在实际应用中,可能会出现偏差。所以这个项目公开之后,遇到了一些质疑。来自 Jumpsec Lab 的一位研究员就此发布挑战,将一串字符打码,看看究竟谁能有办法正确还原。
酷爱研究的技术研究人员们自然是有战必应。所以,Dan Petro 积极参与了挑战,清楚地恢复了这些字母,而且在联系到出题者之后,也获得了肯定的回复。
Dan Petro 沿用了 Depix 的理论思路,开发出一款叫做Unredacter 的工具, 只需要安装并启动,就能自动将文本还原。
要实现这样的效果,先要理清楚马赛克的原理。给图片打马赛克本质上是将图像划分为固定大小的网格块,再用同一区域原始图像的平均色值填充网格块。通过这种方式,可以把原始图像信息涂抹掉。正是因为这种方式简单、“有效”,所以在很多编辑器中都有应用,且效果相同,成为人们信手拈来的神器。
基于这个原理,在知道被打码图片的内容是文本以及文本的字体与字号这些前提下,就可以进行还原操作。而这在现实中也是合理的,因为我们在看到一些截图的时候,打码的内容往往是一部分信息,所以可以通过其他未打码的内容去推测出文本的字体、字号。
另一个需要注意的是,被还原的内容是在本地完成打码过程。从密码学的角度来解释,就是这些信息还没有扩散(diffusion)。因此,如果原始图片中某个像素有所变化,也只会影响到这个像素所对应的色块,对整体影响不大。所以,可以对字符进行循环深度优先搜索,推测字母内容,再根据与编辑文本的边缘匹配程度确定字母。简单来说码就是猜到一个字母a,就拿a打码之后的图片与原来打码后的字母对照,查看匹配度。不过这个过程也需要解决一些难题。
-
字母溢出
字符不会与色块一一对齐,有时候两个字母的一部分会存在于同一个色块里。随意会导致一些错误。在这种情况下,就要调整算法,让它把色块切断,只保留一边。
-
空格
如果字母前后有空格,再加上问题1的影响,也会导致算法枚举、匹配的结果出错。这个时候,依旧需要对相对空白的色块进行特殊分割,并调低阈值。
-
字母宽度
不同字母宽度不同,占用的空间不一样,而有些排版方式会让不同的字母等宽。在等宽的情况下,猜测的难度会增大。而如果字母以原始宽度呈现,就会更容易根据形状去匹配正确的字母。
-
字体呈现效果
对于完全相同的字体,在不同的编辑器里呈现的图像也会略有不同。下图就是例子,上一行是来自GiMP,下一行来自FireFox:
可以看到,长度 (shang yi hang chang yi dian)、和文本的光栅化方式(下一行粗一点)不太一样。这也会对还原结果造成影响。
-
像素偏移
在文本打码时,会有X轴和Y轴的标准去衡量偏移度。在大多数编辑器中,打码的人随手从一个点开始涂抹,最终出现的打码色块完全不同。Unredacter 也设置了偏移量测试,进行多重猜测与匹配。
解决了这些问题之后,再去完成挑战题目,就有的放矢了。挑战题目原本如下图,仔细一看还有色彩,这是屏幕上呈现文本的光栅化过程产生的。
为了方便工具处理,要把这张图先转换成黑白色,把一些暗部调亮,最后进行处理。
Unredacter 只运行了几分钟就给出了正确答案。不过,为了让挑战继续,这个最终的答案还不能公开。
好消息是,目前这个工具理论上似乎还无法处理汉字文本,不过,也许哪位读者看到了 GitHub 代码,就能改良出一个针对汉字的工具。所以,Dan Petro 的建议是,以后都不要再用马赛克打码了,直接用画笔涂抹,用大块的色块(黑条、白条等)把内容覆盖掉,这样会保险一点。或者你也可以像PWN君一样,先糊一层马赛克,再画笔抹一遍,最后再叠放一层表情包……
*参考来源:
https://bishopfox.com/blog/unredacter-tool-never-pixelation
https://github.com/bishopfox/unredacter
如果你还想看其他去除马赛克的项目,可以点击下图,或者观看我们往期的科普讲解。
原文始发于微信公众号(GeekPwn):下次发截图的时候再打码,就别用马赛克了
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论