【我們為什麼挑選這篇文章】一些線上的儲存空間在上傳檔案時有檔案格式的限制,但基本上都支援圖片檔、影片檔,如果想要上傳其他類型的檔案,通常可先儲存成壓縮檔,再「偽裝」成圖片檔上傳,但有檔案大小的限制。
國外一名駭客將檔案的儲存上限提高到 3 MB,並透過同樣的手法將他的程式碼開源並轉成圖片,照著做,你也能將圖片當擴充硬碟用!(責任編輯:賴佩萱)
本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處
作者:量子位
明明下載的是一張圖片,只需修改後附檔名,圖片就變成了一首歌,一串 Python 程式碼。
國外駭客 David Buchanan 利用 Twitter 的漏洞,可以用圖片偽裝的方式傳輸一份「加密」文件,前提是不超過 3 MB。
他成功把這種藏匿文件的 GitHub 程式碼壓縮到圖片中。
現在你只要去他的 Twitter,把這張圖片下載下來,並將文件後副檔名從 .png 修改為 .zip,即可解壓為 Github 程式碼。
下載圖片檔卻拿到一首歌、一串程式碼
對於有十幾年網齡的網友來說,這並不是一項新技術。早年就有人將文本文件或種子文件藏匿在 jpg 圖片中。
這種方法的特點在於,把文件打包到圖片中並不影響正常顯示,但一般來說文件大小不過幾十 KB。
隨著網路發展,越來越多的平台允許用戶上傳大尺寸無損圖片,這就給藏匿大文件提供了契機。
Buchanan 的新方法現在將藏匿文件體積增加到 3 MB,你甚至能放入一首歌。
Twitter 上就有現成的例子,Buchanan 放出了一張 surprise.mp3 的圖片。如果後附檔名修改為 .mp3,就變成了一首歌。
至於這個 surprise,自然毫無意外是 Rick Astley 的《Never Gonna Give You Up》這首歌。恭喜你,又被「瑞克搖」了。
Buchanan 的這一發現已經連續多天成為 GitHub 熱門項目,最終在周末登上日榜第一。
使用方法很簡單,只需要將 pack.py 文件下載到本地,運行以下程式碼:
其中,cover.png 是封面圖片,file.zip 是你要藏匿的文件,output.png 是輸出結果的文件名。
從外觀上來看,output.png 和 cover.png 是一樣的,但多出一個壓縮包的大小。
背後的原理是什麼?
用圖片隱藏壓縮包的原理並不復雜,png 圖片文件的格式如下。在 Zlib 之後,有一片 IDAT 塊的附加數據,藏匿數據就放在這裡。
Twitter 通常會壓縮圖像並刪除所有不必要的元數據,但是可以在「DEFLATE」的末尾添加更多數據。
如果整個圖像文件符合避免重新編碼的要求,壓縮包內容就不會從 IDAT 塊內的 DEFLATE 流中剝離。
這種方法不僅限於嵌入 zip、mp3 等文件,只要數據能壓縮到 3 MB 以內,都可以嵌入到 png 圖片中。
Buchanan 表示,這種方法可能被駭客用於藏匿惡意程式碼,他本人已將該漏洞,利用報告給「漏洞賞金」程序,但卻被 Twitter 告知這不是 bug。
能傳輸「加密」文件,怎麼能說是 bug 呢?應該是隱藏功能才對。(手動狗頭)
帶壓縮包的圖片網址>>>https://i.imgur.com/kNhGrN3.png
(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈圖片可隱藏 zip 和 mp3 文件,只需修改後綴名,這個 GitHub 項目火了 〉。首圖來源:)
更多開源程式碼
- 【附開源碼】集結 40 萬台電腦算力,數學家算出 x³+y³+z³=3 的第三組整數解
- 【內附開源碼】神人替 iPod 置入「串流功能」,讓你輕鬆連網聽 Spotify
- 【開源程式最佳保存法】Github 將 21 TB 的程式碼轉換成「膠捲」,送到北極永凍層冰封 1000 年
- 【內附開源碼】Google 研發「公式製造機」,讓你瞬間變身數學天才