Sed

從文件中刪除所有 base64 塊

  • February 12, 2022

我正在嘗試將價值約 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 類型的消息,該類型包含 string application,通常表示附件已編碼(可能在 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,並在從原始郵箱中刪除它們後退出。

引用自:https://unix.stackexchange.com/questions/690180