上一篇文章中對PDF文件結(jié)構(gòu)進行分析,那么實戰(zhàn)中遇到PDF損壞的情況該如何進行手工或工具修復? 案例背景分析和《數(shù)據(jù)恢復(六)-SqlSever數(shù)據(jù)庫mdf文件恢復實戰(zhàn)》是同樣的勒索場景,PDF文件頭尾均丟失了256kb的數(shù)據(jù)。 文件頭 文件尾,xref表已經(jīng)完全丟失 根據(jù)上面的情況分析PDF丟失了哪部分數(shù)據(jù)?
為什么強調(diào)丟失部分對象obj?因為對象obj是PDF的主體部分。 第一個完整的obj編號為26,說明在此之前已經(jīng)丟失了26個obj對象了(從0開始)。 這就意味著,我們最多也就只能恢復pdf文件中的81-26=55個完整的obj。 別擔心obj數(shù)量太少,沒法恢復出來什么數(shù)據(jù)。比如有的obj是一個圖片,數(shù)據(jù)量占比實則很大。 PDF文件修復思路按照上面的情況,相當于PDF文件的文件頭、xref表、trailer完全丟失。只剩下大部分的obj。 此時只能掃描PDF所有的obj,重新排序計算obj的偏移地址,生成xref交叉引用表和trailer。 PDF修復工具我對市面上常見的PDF修復工具都進行了測試,發(fā)現(xiàn)有三款工具能達到恢復效果。
這里以PDF Recovery Toolbox工具為例,導入受損的PDF文件。 工具會掃描PDF的所有內(nèi)容重新生成完整的PDF文件。 但是工具的缺點是不支持批量PDF損壞文件修復。 PDF手工修復以圖片類型的PDF為例進行分析。 可以通過寫代碼obj特征提取pdf中的圖片內(nèi)容,這里就不貼代碼了,可以自行實現(xiàn)。 foremost提取PDF圖片文件也可以用到foremost。思路很簡單,因為PDF文件本身的obj就是嵌入的其他文件,所以其他格式的文件在PDF中還是原樣保存的。 apt-get install foremost -y 這里可以把PDF看做一個raw二進制文件,從中提取圖片文件。 foremost -t jpg -i damaged_file.pdf -v 從損壞的pdf文件中提取所有圖片文件,再把所有的圖片合并到一個新的PDF即可完成修復。 |
|
來自: zjshzq > 《網(wǎng)絡》