Ofuscación

La ofuscación se refiere a encubrir el significado de una comunicación haciéndola más confusa y complicada de interpretar.

Informática

En computación, la ofuscación se refiere al acto deliberado de realizar un cambio no destructivo, ya sea en el código fuente de un programa informático o código máquina cuando el programa está en forma compilada o binaria, con el fin de que no sea fácil de entender o leer.

En Internet, la ofuscación refiere a crear una publicación o formar parte del grupo los Ofuscados.

El código ofuscado es aquél código que, aunque se tiene el código fuente, ha sido enrevesado específicamente para ocultar su funcionalidad (hacerlo ininteligible).

La ofuscación binaria se realiza habitualmente para impedir o hacer más difícil los intentos de ingeniería inversa y desensamblado que tienen la intención de obtener una forma de código fuente cercana a la forma original.

Como un efecto lateral, la ofuscación, en ocasiones, hace que los programas resultantes sean más pequeños (aunque puede hacer que los programas sean más grandes en otros casos).

Algunos tienden más a la ofuscación que otros. C, C++ y Perl son los más citados como fácilmente ofuscables. Las macros de preprocesador son usadas a menudo para crear código complicado de leer enmascarando la gramática y sintaxis estándar del lenguaje del cuerpo principal de código.

Aparte de los lenguajes más conocidos, existen lenguajes de programación esotéricos. Además, también se puede buscar que el código fuente resulte una obra de ascii art. Existen otros programas ofuscados llamados quine que al ejecutarse la salida debe ser el código fuente del programa.

También hay programas ofuscadores que pueden actuar sobre el código fuente, código objeto o ambos para dificultar la ingeniería inversa.

Ejemplos

Un ejemplo simple de ofuscación es llamar a las variables o funciones con palabras reservadas del lenguaje añadiendo algún símbolo

 int int_;

Con esta línea se define una variable de tipo entero.

 long int _int(int int_){return int_-int_};

Con esta línea definimos una función con un parámetro entero que devuelve un valor long int, que por otra parte siempre será 0.

 _int-_int;

Esto equivale a poner 0.

 (_int-_int)!;

Esto equivale a poner 1.

 (((!(int_-int_)<<!(int_-int_))<<(!(int_-int_)<<!(int_-int_)))|(!(int_-int_)<<!(int_-int_)));

Esto equivale a poner 10.

Other Languages
čeština: Obfuscator
Deutsch: Obfuscator
italiano: Offuscatore
한국어: 난독화
русский: Обфускация
Simple English: Obfuscation
српски / srpski: Маскирање кода
svenska: Obfuscator
中文: 代码混淆