Professor Benjamin

O que é obfuscated code, opções e exemplos [parte 1]

Eu inicialmente escrevi esse artigo em https://www.anom.ia.br/o-que-e-obfuscated-code/. Eu recomendo primeiro ler meu post original e depois voltar para ler o restante aqui, podendo pular direto para o exemplos.

Em programação, obfuscated code — ou código ofuscado — é o código escrito de forma difícil de entender. Ele pode executar uma tarefa simples, mas faz isso de maneira tão confusa, compacta ou criativamente distorcida que até programadores experientes têm dificuldade para decifrar o que está acontecendo.

Escrever código ofuscado é, de certo modo, o oposto do que se ensina em engenharia de software, onde busca-se clareza, legibilidade e manutenibilidade. Embora pareça apenas uma brincadeira, o estudo do código ofuscado revela um domínio profundo da linguagem de programação e do compilador.

No fundo, o obfuscated code é uma forma de poesia técnica. Ele transforma o código em um enigma, convida à decodificação e desafia nossa ideia do que é “beleza” em programação. Não é útil no sentido tradicional, mas é uma celebração da criatividade, da curiosidade e do domínio técnico.

Começando com um exemplo

Abaixo vai um exemplo pequeno de obfuscated code em C que imprime “Hello, world!”. O código é intencionalmente escrito de forma pouco direta (macros com token-pasting, escapes octais para letras, loop compacto) mas continua perfeitamente funcional. Depois do código segue uma explicação em prosa, sem bullets.

#include <stdio.h>
#define _(a,b) a##b
#define P _(p,utchar)

int main(void) {
    char *s = "H\145llo, w\157rld!\n";
    for (int i = 0; s[i]; ++i) P(s[i]);
    return 0;
}

Abaixo explico o que cada parte do programa faz, como o pré-processador transforma os símbolos e quais truques de C estão sendo explorados:

Se expandirmos as macros e resolvermos os escapes, o programa é conceitualmente equivalente ao código abaixo.

#include <stdio.h>

int main(void) {
    char *s = "Hello, world!\n";
    for (int i = 0; s[i]; ++i)
        putchar(s[i]);
    return 0;
}

Uma continuação deste post, com aprofundamento dos itens apresentados está disponível em https://www.galirows.com.br/meublog/blog/o-que-e-obfuscated-code-parte2/

Sair da versão mobile