Tecnicamente, você pode filtrar diretamente os dados codificados em base64 por palavras-chave. Não estou dizendo que é uma coisa prática ou razoável, dada a existência de alternativas melhores e mais simples (como descrito, por exemplo, na resposta da Esa acima), mas é possível.
O truque é perceber que a codificação base64 é um mapeamento determinístico de blocos de 3 bytes de dados não codificados brutos em blocos de 4 caracteres de caracteres base64. Assim, sempre que uma determinada sequência de blocos de 3 bytes aparecer nos dados não codificados, a mesma sequência de blocos de 4 caracteres aparecerá na versão codificada.
Por exemplo, se você digitar a string Quanzhoucoowayem um codificador base64 , obterá a saída UXVhbnpob3Vjb293YXk=. Como o comprimento da entrada não é múltiplo de 3 bytes, a saída contém algum preenchimento no final, mas se soltarmos os =sinais finais e o último caractere base64 real k(já que ele também codifica alguns bits de preenchimento), obtemos a sequência UXVhbnpob3Vjb293YXque seja garantida a aparecer nos dados codificados-base64 sempre que os tripletos de byte Qua, nzh, ouc, oowe o tripleto parcial ayaparecem na entrada em que ordem.
Mas, é claro, a sequência Quanzhoucoowaypode não começar exatamente no limite dos trigêmeos. Por exemplo, se codificarmos a string XQuanzhoucooway, obteremos a saída WFF1YW56aG91Y29vd2F5, que parece completamente diferente. Desta vez, o comprimento da entrada é divisível por três; portanto, não há caracteres de preenchimento para descartar no final, mas precisamos descartar os dois primeiros caracteres ( WF) que codificam alguns bits do Xbyte precedido , deixando-nos com F1YW56aG91Y29vd2F5.
Finalmente, a codificação base64 XXQuanzhoucoowayfornece a saída WFhRdWFuemhvdWNvb3dheQ==, que possui preenchimento nas duas extremidades. Removendo os três primeiros caracteres WFh(que codificam o XXprefixo) e os três últimos Q==(que codificam o preenchimento de zero bits no final), ficamos com a string RdWFuemhvdWNvb3dhe. Assim, obtemos as seguintes três cadeias codificadas em base64:
UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe
dos quais (pelo menos) um deve aparecer na forma codificada em base64 de qualquer sequência de entrada que contenha a palavra Quanzhoucooway.
Obviamente, se você não tiver sorte, o codificador base64 pode inserir uma quebra de linha no meio deles, entre dois trigêmeos codificados. (Sua mensagem de exemplo, por exemplo, tem uma entre F1YW56e aG91Y29vd2F5.) Portanto, para corresponder essas strings com regexps, você precisa de algo como o seguinte (usando a sintaxe 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
Gerar esses padrões manualmente é meio tedioso, mas não seria difícil escrever um script simples para fazê-lo na sua linguagem de programação favorita, pelo menos desde que ele forneça um codificador base64.
Se você realmente quisesse, poderia implementar a correspondência sem distinção entre maiúsculas e minúsculas, codificando base64 tanto a versão em minúscula quanto a maiúscula da palavra-chave e combinando-as em uma regexp que corresponda a qualquer combinação delas. Por exemplo, a codificação base64 de quanzhoucoowayé cXVhbnpob3Vjb293YXk=enquanto QUANZHOUCOOWAYé de UVVBTlpIT1VDT09XQVk=, portanto, a regra:
/[cU][XV]V[hB]\s*[bT][nl]p[oI]\s*[bT][31]V[jD]\s*[bT][20]9[3X]\s*[YQ][XV]/ DISCARD
em qualquer caso, corresponderá à palavra codificada em base64 "Quanzhoucooway", desde que comece em um limite de trigêmeo. A geração dos outros dois regexps correspondentes para as versões deslocadas é deixada como um exercício. ;)
Infelizmente, fazer algo mais complicado do que uma simples correspondência de substring como essa rapidamente se torna impraticável. Mas pelo menos é um truque legal. Em princípio, isso pode até ser útil se, por algum motivo, você não puder usar o SpamAssassin ou qualquer outro filtro que possa decodificar a codificação base64 antes da filtragem. Mas se você pode fazer isso, em vez de usar hacks como esse, certamente deveria.