從文件中刪除所有 base64 塊
我正在嘗試將價值約 20 年的 Usenet 檔案上傳到 archive.org,但我的第一批檔案被拒絕了,因為一些檔案包含以 base64 編碼的木馬。由於我有大約 400GB 的文件要處理,因此手動修復是不可能的。所有文件均為 mbox 格式,即純文字。我的第一個想法是查找並替換 mbox 文件中包含“Content-Type: application/x-msdownload”的所有消息。那可能相當困難。我現在認為更簡單的蠻力方法是刪除所有 base64 塊。
從這個問題中,我看到可以使用 grep 找到 base64 塊,但我不知道如何使用 sed 設置相同的東西,這就是我要問的原因。謝謝!
編輯:到目前為止我嘗試過的
根據this page,
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
應該是查找base64文本所需的正則表達式,但是當我嘗試將其與sed一起使用時,它實際上不起作用,或者至少它沒有達到我的預期。例子:
cat clari.local.california.sfbay.biz.mbox | sed -e '#^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$#d' > clari.local.california.sfbay.biz.mbox.test
clari.local.california.sfbay.biz.mbox.test 仍然包含 base64 文本。
郵件使用者代理 (MUA) 可以按 MIME 類型從
mutt
郵箱中刪除郵件。你甚至可以編寫腳本。帶有編碼附件的郵件可以
mutt
與搜尋表達式匹配~M application
。這匹配任何包含 MIME 類型的消息,該類型包含 stringapplication
,通常表示附件已編碼(可能在 base64 中)。application/x-msdownload
如果您願意,您顯然可以使用更具體的。如果郵箱被呼叫,您可以從命令行
messages.mbox
中刪除其中包含包含字元串的任何附件的所有郵件,如下所示:application
mutt -e 'push <delete-pattern>"~M application"<enter><quit>"y"' -f messages.mbox
請注意,這在從郵箱中刪除郵件之前不會要求任何確認(最後是對退出前是否刪除郵件
"y"
的問題的答复)。mutt
您可能希望將郵件移動到單獨的郵箱中:mutt -e 'push <tag-pattern>"~M application"<enter><tag-prefix><save-message>bad.mbox<enter>"y"<quit>"y"' -f messages.mbox
這會標記與給定搜尋表達式匹配的所有郵件,將它們保存到郵箱
bad.mbox
,並在從原始郵箱中刪除它們後退出。