Ofuscación de código.

La ofuscación de código se refiere al acto de escribir código que oculte una intención o alguna
funcionalidad a los ojos de otros programadores.
Vos te preguntaras ¿Para que es necesario ofuscar código? bueno, podría responderte que es muy útil cuando queres evitar la ingeniería inversa o cuando tu código queda expuesto al cliente, por ejemplo en el caso de JavaScript, y así poder evitar plagio.

Investigando he encontrado diversas técnicas para ofuscar código. Algunos hacen abuso del preprocesador de C, otros usan las palabras reservadas del lenguaje (con un guion bajo adelante) para definir variables o funciones y otros sencillamente tratan de engañarnos haciéndonos creer que esa porción de código hace algo totalmente diferente (nombrando de una manera inapropiada funciones y variables). Por ejemplo, si queres imprimir algo por pantalla puedo renombrar la funcion printf por la función fork. Creo que esto se entendería mejor con un breve ejemplo de mi autoría.

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4
 5 #define padding NULL
 6 #define block(a,c) a##mem_d==padding? c:;
 7 #define pad(a,b,c,d,e,f) _(a,b,c,d,e,f)
 8 #define fork(j,p) j##p()
 9 #define mmap(a) #a
10 #define _(d,an,fi,g,h,kk) f##h##fi##f(d##g, mmap(%s), fork(an, kk));
11
12 char* dismsg(void);
13
14 int main(int _int, char **_char)
15 {
16         int nt, hol, pri;
17         FILE *std = NULL;
18         void *mem_d = calloc(1024,1);
19         void *shmem_d = NULL;
20         char mun;
21
22
23         pad(std, dis,nt, out, pri, msg);
24 }
25
26 char* dismsg(void)
27 {
28         return (char *)"hola mundo\n";
29 }

Si compilamos este fuente de la siguiente manera "gcc ofusque.c -o ofusque" y ejecutamos el binario vemos que muestra un muy querido "Hola mundo". Ahora, ¿como logro mostrar un mensaje sin siquiera usar un printf o alguna función similar de biblioteca? Es la magia de la ofuscación de código!!!.

Una muy curiosa pagina para empezar a ver tecnicas de ofuscacion es http://www.ioccc.org/. Estos chicos hacen un concurso donde premian el mejor codigo ofuscado.


No hay comentarios.:

Publicar un comentario