spipm/Depixelization_poc
GitHub: spipm/Depixelization_poc
Depix是一个从马赛克截图中恢复纯文本的概念验证工具,揭示像素化处理作为脱敏手段存在严重安全隐患。
Stars: 3989 | Forks: 295
# Depix
Depix 是一种用于从马赛克截图中恢复纯文本的技术的 PoC。
该实现适用于使用线性盒式滤镜(linear box filter)生成的马赛克图像。
在[这篇文章](https://www.spipm.nl/2030.html)中,我介绍了关于像素化和类似研究的背景信息。
## 示例

## 更新
* 24 年 12 月 24 日:将 repo 设为私有,更改了名称,然后再次公开。因为媒体的炒作,它获得了荒谬数量的 star,这感觉不太对。这是我当年为一家公司快速制作的一个 PoC,因为有人把一个拥有 Domain Admin 权限的账户密码部分打了马赛克。炒作是因为那张引人注目的图片而开始的,最终这个 repo 获得了 26152 个 star。如果我再次获得这么多 star,我希望那也是为一个我自己同样热衷的项目。

* 23 年 11 月 27 日:重构并移除了所有 pip 相关的东西。我喜欢可以直接运行的脚本。如果找不到包,直接安装它就是了。还添加了 `tool_show_boxes.py` 来展示方块检测器有多糟糕(你必须非常精确地切出像素)。在 TODO 中列入了创建一个直接切出静态大小方块的版本。
## 安装
* 安装依赖项
* 运行 Depix:
```
python3 depix.py \
-p /path/to/your/input/image.png \
-s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png \
-o /path/to/your/output.png
```
## 用法示例
* 对使用记事本创建并使用 Greenshot 打马赛克的示例图像进行反像素化。Greenshot 通过平均 gamma 编码的 0-255 值来进行平均,这是 Depix 的默认模式。
```
python3 depix.py \
-p images/testimages/testimage3_pixels.png \
-s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png
```
结果:
* 对使用 Sublime 创建并使用 Gimp 打马赛克的示例图像进行反像素化,其中平均是在线性 sRGB 中完成的。backgroundcolor 选项过滤掉了编辑器的背景颜色。
```
python3 depix.py \
-p images/testimages/sublime_screenshot_pixels_gimp.png \
-s images/searchimages/debruin_sublime_Linux_small.png \
--backgroundcolor 40,41,35 \
--averagetype linear
```
结果:
* (可选)你可以使用 `tool_show_boxes.py` 查看方块检测器是否找到了你的像素。如果看起来乱七八糟,请考虑更小批量的像素。良好方块的示例:
```
python3 tool_show_boxes.py \
-p images/testimages/testimage3_pixels.png \
-s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png
```
* (可选)你可以使用 `tool_gen_pixelated.py` 创建马赛克图像。
```
python3 tool_gen_pixelated.py -i /path/to/image.png -o pixed_output.png
```
* 有关详细说明,请尝试运行 `$ python3 depix.py -h` 和 `tool_gen_pixelated.py`。
## 关于
### 制作搜索图像
* 从截图中将马赛克块作为一个矩形剪切出来。
* 将具有预期字符的 [De Bruijn sequence](https://en.wikipedia.org/wiki/De_Bruijn_sequence) 粘贴到具有与输入图像相同字体设置的编辑器中(相同的文本大小、相似的字体、相同的颜色)。
* 对该序列进行截图。
* 将该截图移动到类似 `images/searchimages/` 的文件夹中。
* 运行 Depix 并将 `-s` 标志设置为该截图的位置。
### 制作马赛克图像
* 精确剪切马赛克块。有关示例,请参阅 `testimages`。
* 它尝试检测块但效果并不理想。如果你的块没有被正确检测,请尝试使用 `tool_show_boxes.py` 脚本和不同的剪切方式。
### 算法
该算法利用了线性盒式滤镜分别处理每个块这一事实。对于每个块,它将搜索图像中的所有块进行像素化以检查直接匹配。
对于某些马赛克图像,Depix 设法找到了单一匹配结果。它假设这些是正确的。然后将周围多匹配块的匹配项进行比较,以确认其在几何距离上与马赛克图像中的相同。匹配项也被视为正确。此过程重复几次。
在正确块没有更多几何匹配后,它将直接输出所有正确块。对于多匹配块,它输出所有匹配的平均值。
### 已知限制
* 该算法按整数块边界进行匹配。因此,它有一个潜在假设,即对于所有渲染的字符(在 de Brujin 序列和像素化图像中),文本定位都是在像素级别完成的。然而,一些现代文本光栅化器将文本定位[在亚像素精度](http://agg.sourceforge.net/antigrain.com/research/font_rasterization/)。
* 你需要知道截图中使用的字体规格,以及某些情况下的屏幕设置。但是,如果原始图像中有足够的纯文本,你或许可以使用原始图像作为搜索图像。
* 如果执行了额外的图像压缩,此方法将不起作用,因为它会打乱块的颜色。
### 未来开发
* 实现更多过滤函数
创建更多类似于某些流行编辑器的平均滤镜。
* 创建一个利用 HMM 的新工具
尽管如此,仍然鼓励任何对这种反像素化类型充满热情的人实现自己的基于 HMM 的版本并分享它。
### 其他来源和工具
在创建此程序后,有人向我指出了一份 2016 年的[研究文档](https://www.researchgate.net/publication/305423573_On_the_Ineffectiveness_of_Mosaicing_and_Blurring_as_Tools_for_Document_Redaction),其中一组研究人员设法创建了一个类似的工具。他们的工具具有更高的精度,并且适用于许多不同的字体。虽然他们的原始源代码不公开,但在 [DepixHMM](https://github.com/JonasSchatz/DepixHMM) 有一个开源实现。
22 年 2 月 16 日编辑:[Dan Petro](https://bishopfox.com/authors/dan-petro) 创建了工具 UnRedacter([文章](https://bishopfox.com/blog/unredacter-tool-never-pixelation)、[源码](https://github.com/BishopFox/unredacter))来破解一个作为对 Depix 回应而创建的[挑战](https://labs.jumpsec.com/can-depix-deobfuscate-your-data/)!
25 年 4 月 16 日编辑:Jeff Geerling 为移动图像中马赛克文件夹内容的去像素化创建了一个[挑战](https://www.jeffgeerling.com/blog/2025/its-easier-ever-de-censor-videos)。有三个人成功做到了。[这里](https://github.com/KoKuToru/de-pixelate_gaV-O6NPWrI)是 KoKuToru 的一个 repo,展示了如何使用 TensorFlow 做到这一点!太神奇了!
标签:ESC4, meg, OSINT, Python, Steganography, 信息安全, 像素化, 像素化还原, 反马赛克, 图像分析, 图像处理, 图片解码, 密码学, 密码还原, 截图还原, 手动系统调用, 无后门, 网络安全, 视觉黑客, 逆向工具, 隐私保护, 隐私恢复, 马赛克去除