Un pequeño viaje por el Cracking

Creado: Sábado, 25 Mayo 2013 Escrito por karmany Visto: 14842
Tamaño de letra:

Cracking, un paso por su pasado y su futuro

Icono OllyDBGCreo que fue sobre los años 2000/2003 (¡uff! qué rápido pasa el tiempo, ya más de 10 años) que hubo una especie de boom con el tema del Cracking. En nuestro idioma, y fue así como empezó una de las listas más conocidas sobre Ingeniería Inversa (CrackSLatinoS), un usuario consiguió quitar una protección a un programa que limitaba su ejecución. Esto hizo que muchos usuarios se interesasen por cómo lo había hecho y aunque no sé si realmente fue este el motivo, lo cierto es que se crearon muchísimas páginas dedicadas al Cracking que analizaban y mostraban las entrañas de un programa. Se empezaron a crear también los conocidos CrackME que no son ni más ni menos que retos de programación hechos a propósito. ¿Y el futuro?

Qué herramientas y cómo se crackea(ba)

Cracking o crackear un programa está asociado a quitar la protección del mismo para que puedas usarlo sin limitaciones. Por ejemplo, si tienes un software que solo funciona durante 5 días, puedes  intentar "crackearlo" y conseguir que dure eternamente. Esto ha hecho que la palabra crackear esté asociada a rozar la ilegalidad porque, lógicamente, los programas que tienen restricciones son principalmente de pago. Para analizarlos se hace uso de lo que se conoce como Ingeniería Inversa y ¡no!, no es una carrera universitaria. Pero voy a dejar los conceptos aquí.

Esto del Cracking no viene de ahora ni del 2003, se ha vivido desde mucho tiempo atrás. Sin ir más lejos, cuando hablamos sobre el juego de Batman en el ZX Spectrum, ya mencionamos los conocidos POKE que son la forma de modificar la memoria. En muchas revistas de la época, existía un apartado con los POKE más conocidos para "crackear" programas (¡y salía publicado en las revistas!):

Cargador Spectrum

De SoftICE a OllyDBG

Para analizar el interior o lo que hace un determinado programa, se recurre a desensambladores y depuradores o debuggers, entre otras herramientas. Con DOS y hasta Windows XP (creo) hubo un debugger muy conocido y utilizado llamado SoftICE de Numega. Era (o es) un depurador que se ejecutaba por debajo del Sistema Operativo (ring 0) y permitía incluso la depuración de drivers. Con Windows XP, SoftICE ya necesitaba una configuración especial y con los nuevos SP, muchos usuarios no podían ni sabían ejecutarlo (me incluyo).

Fue en este punto cuando, tal vez por estas dificultades, se empezó a conocer un debugger que nació a finales del año 2000: OllyDBG. El desarrollo de OllyDBG fue impresionante y sobre el año 2004 apareció la versión más que conocida mundialmente 1.10. Fue una versión impresionante: muy completa, se dejaba de depurar solo por comandos y ahora era todo visual desde una interfaz muy amigable e intuitiva, pero tal vez lo más importante de todo fue que permitía el uso de plugins. Esto hacía y hace de OllyDBG una herramienta poderosísima e indispensable. El hecho de permitir el uso de plugins, hizo que muchos programadores empezaran a crear los suyos propios y en poco tiempo existían miles.

Fue sobre 2003-2004 cuando yo lo conocí. No lo recuerdo bien, pero tal vez la llegada de Windows XP SP2 en agosto de 2004, fuese el punto de inflexión e hizo que SoftICE se empezara poco a poco a olvidar y  diera paso a OllyDBG. Además de la gran herramienta que es este depurador, surgió en nuestro idioma una persona que revolucionó el uso de este software porque explicó desde cero "patatero" su uso para toda persona sin ningún conocimiento. Esta persona es el Maestro Ricardo Narvaja y sus mundialmente conocidos "Tutoriales de OllyDBG desde cero".

Si observamos las tendencias de Google y hacemos una consulta de OllyDBG, veremos esta interesante gráfica:

Tendencia OllyDBG

Hasta junio de 2005, según las tendencias de Google, OllyDBG tuvo un gran interés, sin embargo las previsiones actuales no son muy buenas.

OllyDBG, ring3, NET y 64 bits

OllyDBG para la depuración de aplicaciones era maravilloso porque permitía y permite la depuración en ring 3, pero claro, SofICE también lo hacía en ring 0. ¿Qué alternativas quedaron? El mismo Windows trae WinDBG y KD (Kernel Debugger). También son muy conocidos otros depuradores como IDA Pro (excelente desensamblador) o Syser Debugger.

Otra alternativa interesante en ring3 es el programa Immunity Debugger que con una interfaz muy similar a OllyDBG tiene la peculiaridad de permitir la creación de scripts en Python.

¿Y el paso de 32 a 64 bits? También se han creado depuradores como Visual DuxDebugger, aunque no es un tema tan comentado (de momento) como a 32 bits.

La aparición de la tecnología .NET hizo pensar de otra forma, OllyDBG se embarcó en un difícil, ambicioso y largo proyecto que fue el desarrollo de su versión 2, pero ya no era la herramienta más idónea para depurar estos programas NET (sí se podía pero era algo complejo). Windows tenía la herramienta ILDasm que a partir de un archivo ejecutable portable (PE) que contiene código MSIL (Lenguaje intermedio de Microsoft), crea un archivo de texto apropiado y también proporciona (voy a hablar en presente) 2 buenos depuradores por línea de comandos:  MDBG (Managed Debugger) y CLR Debugger . También hay interesantes GUI, por ejemplo Calimero de stzwei para MDBG y una muy buena herramienta que al principio fue gratis y ahora de pago .NET Reflector.

Y he dejado en el tintero muchísimas herramientas (por ej. Resource Hacker) de las que no he querido hablar porque si no no acabamos.

El futuro del Cracking

Como ya comenté, sobre el año 2000-2003 existían muchísimas páginas sobre Ingeniería Inversa y Cracking, la página de Karpoff fue una de las más conocidas y, desde mi punto de vista, era el tema del momento, el Trending Topic de Twitter. Piensa que en el año 2001 se produjo el lanzamiento de Windows XP, no conocíamos los Smartphone actuales, ni Android, ni la tecnología .NET, ni se pensaba en la programación online como hoy día. Esto hacía que todos los programas (o la mayoría) fuesen de escritorio. Conocer el "arte" de la Ingeniería Inversa te daba el "poder" para destripar cualquier software.

¿Y hoy día? Yo creo que al mismo nivel que se ve la tendencia de OllyDBG en el gráfico anterior, ha disminuido algo el interés por el Cracking o Ingeniería Inversa. El problema de tratar estos temas en un foro o web, es que se rozan casi siempre temas ilegales y muchos webmaster no quieren alojarlos en su servidor. Sin embargo, yo también apunto a otros problemas, como que con paso del tiempo las protecciones han ido también aumentando su dificultad. Hace años, "crackear" un software era una tarea un tanto sencilla; se desensamblaba el código, se miraban las cadenas de texto, se depuraba y normalmente en pocos minutos ya lo habías desprotegido: era accesible a todo el mundo (recuerdo tutoriales de Cracking solo con ¡Resource Hacker!). Los programadores de packers aprendieron de todo esto y empezaron a complicar la cosa, de hecho se llegaron a crear impresionantes packers que trabajaban en ¡ring 0!, algo que después con Windows Vista no se les permitió (muy lógico).

En pocos años se llegaron a unos conceptos que un principiante ya no podía entender: que si hay que reparar la IAT pero está totalmente destrozada, que el packer se descomprime en una zona totalmente ofuscada, que el OEP no existe y lo emula el mismo packer, que existe stolen code, que las llamadas intermodulares están dirigidas al propio código del packer, que el código es ilegible porque el packer hace uso de una máquina virtual, que el packer se depura a sí mismo, los nanomites y cientos de protecciones. Estos conceptos ya no estaban dirigidos a un Newbie (como se denomina a una persona que se inicia) y aprenderlos llevaba muchísimo tiempo.

Sea cual fuere el motivo, lo cierto es que muchas páginas de aquellos años tan famosas, fueron abandonadas, están desactualizadas o desaparecieron. Me impresiona porque había webs con muchas (muchísimas) visitas diarias y hoy día, cuando vuelvo a visitarlas, pues solo queda el recuerdo de lo que llegaron a ser.

Tampoco quiero decir que no sea un tema que interese, porque yo sigo hablando de vez en cuando en el foro o en esta web y los artículos son vistos (de verdad que cuesta muchísimo hacer tutoriales sobre Ingeniería Inversa). Yo creo que siempre se ha considerado a la Ingeniería Inversa como un tema complejo (y de hecho lo puede ser) y yo no soy más que un Newbie comparado con grandísimos autores (por ejemplo la lista CrackSLatinoS). Sin embargo, si lees, estudias, entiendes y, sobre todo, practicas la Ingeniería Inversa, llegarás a tener unos conocimientos que te permitirán entender las entrañas de cualquier aplicación.

Lo bueno y malo de la informática es que día a día avanza y evoluciona de tal forma, que el abanico de conocimientos puede llegar a ser desbordante.

Los programas en servidor

Finalmente otro "problema" que se suma a los anteriores, son los programas online. No sé hasta qué punto podrán desaparecer los programas de escritorio pero incluso Photoshop se apunta a esta "moda". Hay personas que dicen que los programas de escritorio están viviendo su próximo final y es bien cierto que en poco tiempo se han creado muchísimas aplicaciones en servidor sobre todo para la gestión de redes sociales (Twitter, Facebook...) pero incluso ya existen editores gráficos, de texto etc. Si esto es verdad, parece ser que Chrome OS fue un adelantado a su tiempo, tal vez demasiado adelantado y la idea es interesante: tener en tu ordenador un navegador como principal herramienta de uso y las aplicaciones en servidor. La tecnología .NET tiene esto en mente desde hace tiempo y tal vez sea hora de pensar en la propia Internet como la base de un nuevo Sistema Operativo.

Llegados a este punto, el Cracking, como tal, pierde sentido ya que las restricciones de software las encontraríamos muchas veces en el propio servidor y fuera de nuestro alcance. Para la industria del software esto puede ser un punto interesante con vistas al futuro, pero claro habrá que invertir en servidores y posiblemente las pequeñas empresas no estén dispuestas a hacerlo. También muchas empresas solicitan programas para manejar sus bases de datos en red (y no locales), así pueden conectarse y ver lo que otra tienda tiene en la otra punta del mundo.

... es muy difícil hablar del futuro. Tal vez no se pierdan los programas de escritorio, ¡quién sabe! La tecnología .NET tiene muchas ventajas pero mientras exista Microsoft Windows, un programa nativo para esta plataforma puede ser mucho más rápido (y más si trabajas en C++ con ASM)... y muchísimos más detalles... ¿Tal vez Android será el Sistema Operativo predominante?

¿Qué opinas de todo esto?

Última actualización: Sábado, 25 Mayo 2013