从像素化屏幕截图中恢复密码

学号:17020150056   姓名:张伟航

【嵌牛导读】超神项目,一天获得 4k+ star 的马赛克密码还原——Depix 是一个从像素化/马赛克的截图中恢复密码的工具,它用线性盒式过滤器实现像素化图像还原。在它开源后的一周内,获得了 10.1k star,可见它的神奇之处。

【嵌牛鼻子】马赛克   解马赛克   性盒式过滤器  图像还原 

【嵌牛正文】

参考  https://www.linkedin.com/pulse/recovering-passwords-from-pixelized-screenshots-sipke-mellema

简介

像素化在许多领域被用来模糊图像中的信息。我见过一些公司在内部文档中用像素化的方式显示密码。没有工具可以从这样的图像中恢复密码,所以我创建了一个。本文介绍了去像素化的算法和类似的研究。

该工具在Github上可用,下图显示了其中一个测试结果。


什么是像素化?


像素化,也称为马赛克化。描述了部分降低图像分辨率以筛选信息的过程。本算法的实现采用了普通的线性盒滤波器。线性框过滤器获取一个像素框,并用框中所有像素的平均值覆盖这些像素。它的实现简单,工作速度快,因为它可以并行处理多个块。

下图显示了线性框过滤器的示例。图释的图像分为四个块。块的平均颜色覆盖块的像素,从而生成最终的像素化表情。



去模糊工具、历史和研究

图像可以通过多种方式进行模糊处理,通常称为模糊处理。像素化与盒过滤器可以看作是一个子集模糊技术。大多数模糊算法倾向于分散像素,因为它们试图模仿由抖动的相机或聚焦问题引起的自然模糊。

有许多消除模糊的工具,如锐化模糊的照片。不幸的是,我使用的像素化密码只有几块高,所以没有什么可磨的。

人工智能的最新发展引起了一些花哨的头条新闻,比如“研究人员已经发明了一种可以完全消除面部关系的工具”。然而,人工智能却不这么做。最近的PULSE算法类似于谷歌2016年的raiser算法。人工智能会生成像素化后产生相同图像的人脸,但它恢复的人脸不是原始人脸。

像PULSE这样的算法似乎是新的,但它们源于一系列很长的去模糊工具。M. W. Buie在1994年写了一个工具生成“Plutos”,对其进行模糊处理,并将其与观察到的图像进行匹配。

在2006年的一篇广为人知的文章中,D.Venkatraman解释了一种恢复像素化信用卡号码的算法。想法很简单:生成所有信用卡号码,将其像素化,并将结果与像素化的数字进行比较

2019年,S.Sangwan解释了如何利用Photoshop为OSINT恢复人脸,方法是锐化图像并通过Google Images进行查找。它与其他技术类似,它使用谷歌对图片中的脸部进行“暴力”处理。

注意上述解决方案之间的相似之处。如果没有足够的信息将图像平滑到一起,那么可以选择的技术是将相似的数据像素化并检查是否匹配。从屏幕截图中恢复密码也是我的算法基础

算法描述

由于线性盒滤波器是一种确定性算法,因此将相同的值像素化总是会得到相同的像素化块。像素化相同的文本,使用相同的块位置,将导致相同的块值。我们可以尝试对文本进行像素化以找到匹配的模式。每一个块或块的组合都可以被视为一个子问题。

我没有选择创建潜在字体的查找表。该算法要求在同一背景下具有相同的文本大小和颜色。现代的文本编辑器还添加了色调、饱和度和亮度,允许使用大量的潜在字体设置来拍摄屏幕截图。

这个解决方案非常简单:取一个De Bruijn sequence 的字符序列,将其粘贴到同一个编辑器中,然后制作一个屏幕截图。该截图用作类似块的查找图像。例如:


此序列包括预期字符的所有2字符组合。使用两个字符的组合很重要,因为有些块可以重叠两个字符。

要找到合适的匹配,需要在搜索图像中存在相同配置的像素块。在测试图像中,我的算法找不到“o”的一部分。我注意到这是因为在搜索图像中,搜索块还包括下一个字母的一部分(“d”),但在原始图像中有一个空格。


创建一个带有空格的 De Bruijn 字母序列显然会带来相同的问题:该算法无法为连续字母找到合适的块。同时包含空格和近距字母的图像搜索时间较长,但会产生更好的结果。

对于大多数像素化图像,该工具似乎可以找到块的单个匹配结果。它假设这些是正确的。然后将周围多个匹配块的匹配进行比较,使其与像素化图像中的几何距离相同。这些匹配也被视为正确的。

当正确的块不再有几何匹配后,它将直接输出所有正确的块。对于多匹配块,它输出所有匹配的平均值。它的输出并不完美,但性能相当好。下图显示了一个带有随机字符的测试图像。大多数字符都能正确读懂。


结束语

始终要从图像中完全删除敏感信息,因为模糊处理技术可能会泄露原始值的可恢复部分。

如果有其他工具可以从像素化的图像中恢复密码,我想了解一下。请先在Github存储库中的测试映像上测试它们,然后再声明它们可以工作。我还对其他技术感兴趣,比如像素化块的模式识别。

上面提到的技术完美地链接到了密码学中易受攻击的模式。它类似于散列破解,利用ECB和已知的明文攻击。使用保护数据的最佳做法。假设模式不能被破坏,仅仅因为实现者不知道如何破坏,这是信息安全中常见的陷阱。

我认为人工智能既可以帮助选择正确的方块匹配,也可以看到一般的模式。示例图像显示了一些字符如何突出在顶部,表示像“l”或“h”等字符。此外,像“m”这样的字符会生成更多的暗方块,因为它们有更多压缩的暗像素。因为这些特性,一个为特定字体或模式训练的人工智能应该提高准确性。

你可能感兴趣的:(从像素化屏幕截图中恢复密码)