Secara teknis, Anda bisa langsung memfilter data yang disandikan base64 untuk kata kunci. Saya tidak mengatakan itu praktis atau hal yang wajar untuk dilakukan, mengingat adanya alternatif yang lebih baik dan sederhana (seperti yang dijelaskan misalnya dalam jawaban Esa atas), tetapi adalah mungkin.
Kuncinya adalah menyadari bahwa pengkodean base64 adalah pemetaan deterministik dari blok 3-byte dari data mentah yang tidak di-enkripsi menjadi blok 4-karakter karakter base64. Dengan demikian, setiap saat urutan tertentu blok 3-byte muncul dalam data yang tidak di-kode, urutan yang sama dari blok 4-karakter akan muncul dalam versi yang disandikan.
Misalnya, jika Anda memasukkan string Quanzhoucooway
ke dalam encoder base64 , Anda akan mendapatkan hasilnya UXVhbnpob3Vjb293YXk=
. Karena panjang input bukan kelipatan 3 byte, output berisi beberapa padding di bagian akhir, tetapi jika kita membuang =
tanda-tanda akhir dan karakter base64 aktual terakhir k
(karena juga mengkodekan beberapa bit padding), kita mendapatkan string UXVhbnpob3Vjb293YX
yang dijamin untuk muncul dalam data base64-encoded setiap kali si kembar tiga byte Qua
, nzh
, ouc
, oow
dan triplet parsial ay
muncul di masukan dalam urutan itu.
Tapi, tentu saja, string Quanzhoucooway
mungkin tidak dimulai tepat pada batas triplet. Sebagai contoh, jika kita mengkodekan string XQuanzhoucooway
, kita mendapatkan output WFF1YW56aG91Y29vd2F5
, yang terlihat sangat berbeda. Kali ini, panjang input dapat dibagi tiga, jadi tidak ada karakter padding untuk dibuang di akhir, tetapi kita perlu membuang dua karakter pertama ( WF
) yang masing-masing menyandikan beberapa bit dari X
byte yang diawali , meninggalkan kita dengan F1YW56aG91Y29vd2F5
.
Akhirnya, encoding base64 XXQuanzhoucooway
memberikan output WFhRdWFuemhvdWNvb3dheQ==
, yang memiliki padding di kedua ujungnya. Menghapus tiga karakter pertama WFh
(yang menyandikan XX
awalan) dan tiga karakter terakhir Q==
(yang menyandikan padding bit nol di akhir), kita tinggal dengan string RdWFuemhvdWNvb3dhe
. Dengan demikian, kita mendapatkan tiga string yang disandikan base64 berikut:
UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe
di mana (setidaknya) seseorang harus muncul dalam bentuk yang disandikan base64 dari setiap string input yang mengandung kata Quanzhoucooway
.
Tentu saja, jika Anda kurang beruntung, encoder base64 dapat memasukkan garis putus-putus di tengahnya, di antara dua kembar tiga yang disandikan. (Contoh pesan Anda, misalnya, memiliki satu di antara F1YW56
dan aG91Y29vd2F5
.) Jadi, untuk mencocokkan string ini dengan regexps secara andal, Anda akan membutuhkan sesuatu seperti berikut (menggunakan sintaks PCRE):
/UXVh\s*bnpo\s*b3Vj\s*b293\s*YX/ DISCARD
/F1\s*YW56\s*aG91\s*Y29v\s*d2F5/ DISCARD
/R\s*dWFu\s*emhv\s*dWNv\s*b3dh\s*e/ DISCARD
Membuat pola-pola ini dengan tangan agak membosankan, tetapi tidak akan sulit untuk menulis skrip sederhana untuk melakukannya dalam bahasa pemrograman favorit Anda, setidaknya selama ia menyediakan encoder base64.
Jika Anda benar-benar menginginkannya, Anda bahkan bisa menerapkan pencocokan case-insensitive dengan base64 yang menyandi huruf kecil dan versi huruf besar kata kunci dan menggabungkannya ke dalam regexp yang cocok dengan kombinasi apa pun dari mereka. Sebagai contoh, encoding base64 dari quanzhoucooway
adalah cXVhbnpob3Vjb293YXk=
sedangkan QUANZHOUCOOWAY
adalah UVVBTlpIT1VDT09XQVk=
, sehingga aturan:
/[cU][XV]V[hB]\s*[bT][nl]p[oI]\s*[bT][31]V[jD]\s*[bT][20]9[3X]\s*[YQ][XV]/ DISCARD
akan cocok dengan kata yang disandikan base64 "Quanzhoucooway" dalam hal apa pun, asalkan dimulai pada batas triplet. Menghasilkan dua regexps terkait lainnya untuk versi bergeser dibiarkan sebagai latihan. ;)
Sayangnya, melakukan sesuatu yang lebih rumit daripada pencocokan substring sederhana seperti ini dengan cepat menjadi tidak praktis. Tapi setidaknya itu trik yang rapi. Pada prinsipnya, itu bahkan bisa berguna, jika Anda karena suatu alasan tidak dapat menggunakan SpamAssassin atau filter lain yang dapat mendekode pengkodean base64 sebelum memfilter. Tetapi jika Anda bisa melakukan itu, alih-alih menggunakan peretasan seperti ini, Anda tentu harus melakukannya.