Depix是用於從馬賽克後的截圖中,恢復密碼(字符)的工具。
此實現適用於使用線性濾波器創建的像素化(馬賽克後)的圖像。
項目執行命令以及效果
python depix.py -p images/testimages/testimage3_pixels.png -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o output.png
用法
從屏幕快照中將像素化的塊切出為單個矩形。
在具有相同字體設置(文本大小,字體,顏色,hsl)的編輯器中,粘貼帶有預期字符的De Bruijn序列。
製作序列的屏幕截圖。如果可能,請使用與創建像素化圖像相同的屏幕截圖工具。
運行 python depix.py -p [pixelated rectangle image] -s [search sequence image] -o output.png
算法
該算法利用線性濾波器分別處理每個塊。對於每個塊,它將對搜索圖像中的所有塊進行像素化以檢查直接匹配。
對於大多數像素化圖像,Depix設法找到單匹配結果。假設這些是正確的。然後,將周圍的多匹配塊的匹配進行比較,以在幾何上與像素化圖像中的距離相同的距離進行比較。匹配也被視為正確。重複此過程幾次。
正確的塊不再具有幾何匹配之後,它將直接輸出所有正確的塊。對於多匹配塊,它輸出所有匹配的平均值。
技術原理分析文章
https://www.linkedin.com/pulse/recovering-passwords-from-pixelized-screenshots-sipke-mellema/
項目地址
https://github.com/beurtschipper/Depix
技術原理谷歌翻譯
什麼是像素化(馬賽克)?像素化(馬賽克)描述了部分降低圖像解析度以檢查信息的過程。我算法的實現攻擊了普通的線性盒濾波器。線性框濾鏡採用一個像素框,然後用該框中所有像素的平均值覆蓋像素。它的實現非常簡單,並且可以快速運行,因為它可以並行處理多個塊。
下圖顯示了線性盒式濾波器的示例。表情符號的圖像分為四個塊。塊的平均顏色會覆蓋塊的像素,從而產生最終的像素化圖釋。由於原始信息丟失,因此無法直接反轉過濾器。
去模糊工具,歷史和研究圖像可以通過多種方式進行模糊處理,通常稱為模糊處理。使用盒式濾波器的像素化可以看作是模糊技術的子集。大多數模糊算法在嘗試模仿由搖晃的相機或聚焦問題引起的自然模糊時,往往會散布像素。
這些工具具有許多 用於常見任務的去模糊 工具,例如銳化模糊的照片。不幸的是,我使用的像素化密碼只有幾個塊的高度,因此沒有什麼可以提高的。
人工智慧的最新發展引起了人們的關注,例如「研究人員創造了一種可以完美消除臉部像素的工具」。但是,人工智慧沒有做到這一點。最新的PULSE算法與2016年以來的Google的RAISR算法相似。AI生成的面孔在像素化後會生成相同的圖像,但它恢復的面孔並非原始面孔。
諸如PULSE之類的算法似乎很新,但是它們源於一長串的去模糊工具。MW Buie於1994年編寫了一個工具(!),用於生成「 Plutos」,對其進行模糊處理並將其與觀察到的圖像進行匹配。
在2006年發表的一篇廣為人知的文章中,D。Venkatraman解釋了一種用於恢復像素化信用卡號的算法。這個想法很簡單:生成所有信用卡號,對它們進行像素化,然後將結果與像素化的數字進行比較。
在2019年,S.Sangwan解釋了如何通過銳化圖像並通過Google圖像查找來利用Photoshop為OSINT恢復面部。它與其他技術類似,因為它使用Google對圖像中的臉部「強力」。
請注意上述解決方案之間的相似之處。如果沒有足夠的信息來適當地平滑圖像,則選擇的技術是將相似數據像素化並檢查是否匹配。這也是我從屏幕快照中恢復密碼的算法的基礎。
算法說明由於線性盒式濾波器是確定性算法,因此將相同的值進行像素化將始終導致相同的像素化塊。使用相同的塊位置對相同的文本進行像素化將產生相同的塊值。我們可以嘗試對文本進行像素化以找到匹配的模式。幸運的是,這甚至可以為部分秘密價值發揮作用。每個塊或塊的組合都可以視為一個子問題。
我沒有選擇創建潛在字體的查找表。該算法要求在相同背景上具有相同的文本大小和顏色。現代的文本編輯器還添加了色相,飽和度和亮度,從而允許使用大量可能的字體設置來拍攝屏幕截圖。
該解決方案非常簡單:採用De Bruijn預期字符序列,將其粘貼到同一編輯器中,並進行截圖。該屏幕截圖用作類似塊的查找圖像。例如:
該序列包括預期字符的所有2個字符的組合。使用2個字符的組合很重要,因為某些塊可以重疊兩個字符。
要找到合適的匹配項,需要在搜索圖像中存在相同像素配置的精確塊。在測試圖像中,我的算法找不到'o'的一部分。我注意到這是因為在搜索圖像中,搜索塊還包含下一個字母的一部分(「 d」),但是在原始圖像中有一個空格。
創建一個在其周圍帶有空格的De Bruijn字母序列顯然會帶來相同的問題:該算法將無法為連續字母找到合適的塊。帶有間隔和接近的字母的圖像需要更長的搜索時間,但會產生更好的結果。
對於大多數像素化圖像,該工具似乎可以找到塊的單匹配結果。假設這些是正確的。然後,將周圍的多匹配塊的匹配進行比較,使其與像素化圖像中的幾何距離相同。這些匹配也被視為正確。
正確的塊不再具有幾何匹配之後,它將直接輸出所有正確的塊。對於多匹配塊,它輸出所有匹配的平均值。它的輸出遠未達到完美的水平,但性能相當不錯。下圖顯示了帶有隨機字符的測試圖像。大多數字符都可以正確讀取。