Home - norman-ipn/Ofuscador GitHub Wiki

Welcome to the Ofuscador wiki!

__**POR ISAAC OLGUÍN**__  Información General, Links, Teoría y Aspecto importante a ofuscar

Mmmm no había publicado porque creo que ando en el mismo dilema que algunos compañeros, ya que he buscado información, pero no he encontrado alguna fuente que permita hacer un desarrollo de este tipo de programas, de ofuscar un código. Un aspecto importante que creo o considero se debe de analizar, es especificar estándares que debemos de seguir para ofuscar código, ya que finalmente cada quien podría ofuscar su código de manera independiente y ese es el objetivo, que no se entienda el código que escribimos, pero dado que el proyecto es en común, creo que deberíamos de organizarnos mas para saber como, y bajo que características o condiciones ofuscaremos el código; es decir, en el caso de los comentarios que se llegan a hacer en el código por cada programador, es importante que este principalmente sea ofuscado, ya que cada programador comenta lo que en ese código se realiza durante la ejecución de programa, por lo que considero se debería de hacer un recorrido por cada carácter, y definir que expresión puede ser implementada, para alterar el código ASCII, por ejemplo:

double salary; ... ... ...

//Recibe valores para determinar los salarios de los empleados........................ printf("Introduce valores para realizar la operación...........: "); scanf("%d", &salary);

El comentario que dice //Recibe valores ...... es de vital importancia en un programa, ya que permite recordar al programador lo que se esta realizando, sea en ese tipo de código, en funciones, recursividad, ciclos, etc. es decir, expresa el motivo por el que se hace determinadas lineas de código, sin embargo al introducir comentarios, estos no siempre son los mismos (evidentemente), pero se cuenta con las características que al tener una linea que inicie con // o /* se habla de comentarios de una sola linea, o un bloque de comentarios, que es de lo que nos podemos valer para hacer ofuscar estos comentarios.

¿QUÉ ES LA OFUSCACIÓN? Se refiere a cambios que no destruyen o modifican el código fuente o máquina durante el tiempo de compilación, para que este no sea fácil de entender, o para dificultar la ingeniería inversa. (http://es.wikipedia.org/wiki/Ofuscaci%C3%B3n)

Según algunas fuentes de información, los lenguajes C, C++ y Perl son los mas fácilmente ofuscables. (Link que permite ofuscar código PHP y Perl: http://jcarlosrendon.morelosplaza.com/herramientas/ofuscador.php)

Existe una página de internet, que habla de un concurso de Ofuscador de Código en C, dicho concurso se llama: "The International Obfuscated C Code Contest" y se encuentra en la página http://www.ioccc.org/index.html Esta página se encuentra en inglés, pero contiene algunos archivos interesantes, que les recomiendo puedan visualizar.

      __**POR ISAAC OLGUÍN**__   Características Importantes para Ofuscar Código

Entre los desarrolladores es común tratar de evitar que su código sea tomado, y que se violen sus derechos de autor sobre dicho código, la manera más frecuente de evitarlo es por medio de ofuscar su código, para que sea, no imposible pero si bastante complejo interpretar el código.

Sin embargo, ofuscar no es únicamente alterar el código que se escribió, sino que como buen programador, se hace práctica de la inteligencia, y se hacen jugarretas para confundir aun mas a aquellos que quieran interpretar el código, por medio de incluir: Bucles irrelevantes Cálculos innecesarios Comprobaciones absurdas Nombres de funciones y de variables que no tienen nada que ver con el código principal. Además de incluir: Funciones larguísimas que no sirven para nada Interacciones inverosímiles (absurdo o irracional) entre variables y funciones, etc.

                              ASPECTOS IMPORTANTES PARA OFUSCAR CÓDIGO
  1. Que todos los nombres de funciones y variables carezcan de sentido
  2. Incluir ocasionalmente cálculos y bucles sin sentido
  3. Esconder números pequeños en cadenas de texto
  4. Crear métodos grandes, en vez de utilizar sub-rutinas (en el caso de POO)
  5. Distribuir los métodos entre las subclases (en el caso de POO)

ES IMPORTANTE QUE UN PROGRAMA NO SE OFUSQUE DESDE EL INICIO, SINO QUE SE ESCRIBA COMO NORMALMENTE SE REALIZA (DE MANERA CONVENCIONAL) Y POSTERIORMENTE SE AÑADAN COSAS ABSURDAS AL CÓDIGO.

http://www.iec.csic.es/criptonomicon/java/ofuscacion.html

PASOS QUE REALIZA UNA APLICACIÓN PARA OFUSCAR CÓDIGO DE JAVA Encontré una página que habla sobre un ofuscador para JAVA, se llama GPL ProGuard, sin embargo eso no es lo importante sino hablar de lo que presuntamente realiza dicha aplicación: La herramienta funciona buscando primeramente clases, campos, métodos y atributos no utilizados, los cuáles elimina; pasa entonces a optimizar el bytecode y eliminar instrucciones innecesarias; y, por último, elimina la información de depuración y re-nombra las clases, campos y métodos restantes utilizando nombres cortos y poco legibles. http://mundogeek.net/archivos/2009/06/08/ofuscar-codigo-java/