Está en la página 1de 13

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Introduccin

Navegando por la red me tope con el soft. ClearView Fligth Simulator, y vi que ofreca un demo y al probarlo me llamo la atencin de su esttica, pero la sorpresa fue que solo incluye 15 min de prueba y pues en un principio hasta pens en comprar la licencia que no es muy cara, pero se me ocurri revisar que tan difcil podra ser buscarle la manera de saltarme la validacin de su licencia, crackearlo o crearle algn serial, y sin saber en qu era lo que me meta, me puse a analizar sus archivos de instalacin. Acto seguido me di cuenta que en s, consta de un archivo por lotes (bat), en el cual vienen una serie de comandos que mandan a ejecutar archivos de java. A partir de ese momento me centre en el mundo de java, pero no conoca absolutamente nada sobre java, solo lo usaba y no saba ni cmo funcionaba, en el inicio lo poco que lea pensaba que era sencillo su programacin y posiblemente algo limitada, pero conforme avance en mis investigaciones comenc a descubrir la gran cortina que se encuentra detrs de Java y que realmente es un lenguaje muy potente, flexible y portable. Explore, investigue, prob, y realice todo tipo de ideas, teoras y procesos que se me ocurrieron para intentarle realizar Ing, inversa a esta aplicacin, todo lo realice usando una maquina virtual con XP, prob Ollydbg, W32DASM, JBE, DJ JAVA, JD-GUI, CCK, dirty-JOE, Netbeans, Eclipse, Cavaj, Editores hexadecimales. Todo fue a solo prueba y error, todo lo tuve que ir investigando al paso, fue realmente una tarea ardua, desesperada y la gran mayora de veces desilusionante y desmotivadora. Pero son estos pasos en falso los que te van abriendo el camino y hasta llegue a mezclar la informacin de un soft contra la de otro y resurga una nueva idea y as hasta que logre dar con el resultado final, que cranme resulta ser muy, pero muy gratificante ver que 15 o 20 das despus de muchos esfuerzos logras tu objetivo y logras vencer al cdigo. Al final se convierte en algo ms que no querer o poder comprar la licencia, se vuelve un reto personal sobre adquirir y vencer al conocimiento propio. Con estos apuntes solo pretendo mostrar las pruebas de como pens para realizar mi experimento, no pretendo nada en contra de este software en particular, y no me hago responsable de como pueda ser utilizado este conocimiento por segundas personas.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

- El Inicio Bueno partiendo del hecho que no hay ejecutables en la carpeta de instalacin y que estamos completamente en un entorno java, comenc a revisar los archivos de este programa y le que se podan abrir los archivos JAR con winrar o winzip y as lo hice para probar: Aqu se muestra el directorio principal y sus archivos, donde se instala la aplicacin.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Aqu los archivos jar que estn dentro de la carpeta bin:

Y sin saber por cual comenzar pues empec por el primero de la lista para analizar, mencionando que revise casi el 80% de todos los jar del programa para ir viendo en que consistan todos esos archivos y principalmente conocer su estructura. (Con esto irse formando la idea del funcionamiento lgico del sistema en conjunto)

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Aqu una muestra del contenido del archivo clearview.jar con wirar:

Ntese arriba que estoy solo dentro de una subcarpeta de 7 que contiene, y en la cual existen 240 ficheros class, todo esto es un caos para analizar desde un inicio, y sin saber por dnde comenzar. Aqu les muestro el rbol del archivo clearview.jar, la imagen de arriba solo hace mencin a los archivos class de la carpeta ui, que se ve en esta imagen y que es la ultima del rbol.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Una vez ubicado la estructura de archivos y la localizacin de los mismos, fue indispensable comenzar a obtener pistas lgicas de que buscar y hacia dnde ir, esto lo hice instalando el simulador y obviamente ejecutndolo, lo prob, revise sus funciones y vi como opera, luego busque la parte o seccin que me llevara a verificar que es un demo, y encontr su seccin de activacin, en la cual pide un cdigo de 6 dgitos, que lo obtienes al registrarte en la pag. Del fabricante y que al comprar la licencia ellos te enviaran dicho cdigo para la activacin del producto. Con esto anote los nombres de las ventanas donde pide este cdigo, anote tambin los mensajes de error que muestra al introducir cdigos invlidos, todo esto para usarlo dentro del anlisis del programa con cualquier mtodo que se nos ocurra. Buenos ya despus de familiarizarme con el entorno y mundo de archivos que se tienen que analizar y teniendo ya conocimientos de que mensajes o frases buscar, comenc a pensar en que formas podra analizarlos y como podra hacerle pruebas para ir avanzando, y sin querer y mucho menos planearlos, estos mtodos en resumen a mi criterio fueron los que termin realizando. Se los describo a continuacin:

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Mtodo por Bytecode: Revisando la informacin que me proporcionaron en google groups CracksLatinos en el siguiente tema: https://groups.google.com/forum/?hl=es&fromgroups#!topic/crackslatinos/s_ZQ1Fz e9lg comenc revisando la siguiente liga http://www.colegiosma.com:8000/seguridad/?p=370, propuesta por >pekeinfo< en la cual muestran un simple y sencillo pero a mi gusto sper gran ejemplo para iniciarse, de como crackear una mini aplicacin en java, especialmente hecha para este fin. Bueno ah mencionan la explicacin con los sitios de donde bajarse la aplicacin y los nombres de las herramientas que usan para realizar el proyecto. Con esto aprend la lgica de como revisar y hacer ingeniera inversa a un programa hecho en java, involucrando sus partes (archivos JAR y CLASS) y analizando el cdigo fuente (JAD JAVA) al descompilarlo. Cabe mencionar que prob tambin el uso del programa DJ JAVA DECOMPILER que nos sirve para poder abrir y revisar los archivos JAR Y CLASS, permitindonos tambin descompilar los archivos CLASS y mostrarnos su cdigo fuente en lenguaje java. Pero por ah mencionan que para programas grandes y no s qu tan no grandes (comerciales principalmente por su ofuscacin del cdigo) es muy posible que dicha des compilacin no extraiga el cdigo fuente 100%, por lo cual se hace muy laborioso y tedioso volverlo a compilar para probarle los cambios o modificaciones efectuadas (y al final comprob que realmente es casi imposible volverlo a compilar despus de haberle hecho modificaciones). Continuando con mi investigacin sobre el aprendizaje del crackeo en java, y como se vio en la primera liga sobre la iniciacin de cracking en java, ese artculo comenz hablando sobre los Bytecode y hasta nos mostro un link para que leamos ms detalladamente su explicacin, pues a partir de aqu, y ya que nos enteramos de los Bytecode, hubo otro usuario que menciono la siguiente liga en el tema de google groups: http://www.cs.ioc.ee/~ando/jbe/, propuesto por >kryz<. El cual nos muestra y nos menciona el programa JBE, que es el JAVA BYTECODE EDITOR, y nos indica que con este programa podremos ver y editar el cdigo fuente del programa java en cuestin, haciendo uso de sus Bytecode desde los archivos CLASS. Teniendo en cuenta estas dos grandes aportaciones, se me ocurri usar el mismo crackme para java y extraerle su archivo CLASS llamado "Pruebas$1.class" y abrirlo con el JBE, e intuitivamente analice el programa (porque no se programar en Bytecode), viendo que efectivamente lo que mencionaban, que su contenido de los Bytecode es como un lenguaje pseudoensamblador, por otra parte revisando la estructura del Bytecode en la seccin "Methods" encontr la pestaa "Code Editor", la cual nos muestra el cdigo pseudoensamblador pero para modo edicin, y es aqu el importante descubrimiento, ya que en esta seccin donde se ubica la

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

"zona de chico malo", le realice una modificacin simple al cdigo, en la parte del texto que se muestra, cuando se valida el serial y nos manda el mensaje de que es errneo, y as tan fcil como modificarlo o agregarle unas palabras extras a ese texto, y luego dar clic en el botn superior que se llama "Save Method" se guarda dicha modificacin en Bytecode y este a su vez mantiene toda la relacin del archivo CLASS con los dems archivos en el archivo JAR. Cerrando luego el JBE, y corriendo la aplicacin en java que termin de modificar, conclu que efectivamente salen las palabras modificadas que le inserte con el JBE, siendo esto una prueba de que es posible por este mtodo mencionado, abrir y editar los archivos CLASS y volver a unirlos a su archivo JAR, sin la necesidad del cdigo fuente y de un descompilador y compilador. Hasta aqu pensaba que todo seria "de bajada" o muy fcil, pues segn yo, ya haba encontrado la manera de hacerle modificaciones a programas hechos en java, y pensaba usar esta tcnica en los archivos Class que analizara y en efecto comenc a abrir archivos class en buscas de cadenas con indicios de los mensajes de las ventanas que haba anotado del programa en ejecucin pero no tuve muchas suerte, ya que solo poda cambiar frases de las ventanas mas, no nada de la lgica del programa, por no saber programar en Bytecode. Posteriormente me dara cuenta que este mtodo si es factible y funciona, pero para cdigos o programas que sean chicos o medianos y que su cdigo no haya sido ofuscado, ya que debido a esto y a la gran cantidad de lneas en el cdigo de las clases en programas comerciales se torna muy complicado y tedioso analizar la lgica en Bytecode, por otro lado solo pude probar que realmente se puede modificar desde el Bytecode mas aparte habra que aprender 100% la programacin de Bytecode para entender el funcionamiento de los comandos usados en el cdigo cosa que tambin es algo muy complejo (aprender la lgica del programa pero en lenguaje ensamblador). Aqu les dejo una muestra de un pequeo cambio realizado solo en la frase de la ventana de activacin, esto realizado por medio de Bytecode usando el CCK

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Mtodo DJ Decompiler Al no haber obtenido resultados satisfactorios usando el mtodo de los Bytecode para realizarle cambios realmente sustanciales a nuestro cdigo enfocado a modificar la estructura del programa, debido a la complejidad de programar en Bytecode y escaso conocimiento de la lgica del programa. Me enfoque en una nueva idea, la mas bsica al parecer, usar un descompilador DJ JAVA DECOMPILER, para obtener el cdigo fuente de las clases y poder comenzar a entender la lgica del programa y realizarle cambios en su estructura. A continuacin muestro la clase D, descompilada en esta utilera DJJC, ntese que consta solo de 4,506 lneas de cdigo.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Y as lo hice, pero en esta ocasin la puerta cerrada que me encontr fue, que al intentar hacer la primera modificacin bsica de prueba al cdigo, es imposible volverlo a compilar ya que como el cdigo esta ofuscado, el descompilador lo traduce casi completo el cdigo fuente pero no al 100% y se obtienen por lgica muchos errores de compilacin, aunado a esto le podremos aadir que una clase est relacionada con X numero de clases mas y que a la vez estas tienen que estar su cdigo fuente activo para volver a compilarse y a su vez estas tambin llaman a 3ras clases y as sucesivamente, que en resumen se tiene que tener todas las clases prcticamente descompiladas y sin errores para poder volver a guardarle un pequeo cambio por mnimo que este sea. Razn por la cual tampoco fue factible de solucionar.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Mtodo para KeyGen Cabe mencionar, que hasta estos momentos, los dos mtodos anteriores mencionados, estn relacionados hacia la idea de Crackear o parchar (modificacin del cdigo) el cdigo del programa. Y por no haber tenido xito debido a las complejidades del cdigo ofuscado, me vi orillado a usar este tercer mtodo, en donde se cambia la lgica de las ideas. Esto es, en vez de entender el cdigo para hacerle modificaciones en la validacin o comparacin del cdigo serial para el registro, mejor se intentara entender el cdigo de las funciones de cmo opera y valida dicho serial y a partir de esto construir un cdigo que nos cree un serial compatible. Y pues a raz de esto, comenc con los mltiples programas mencionados anteriormente a revisar archivos de clases, revisando el orden en que se llaman las clases y entendiendo y haciendo pruebas de escritorio, dentro de las funciones, para comprender su funcionamiento. Esta parte es la esencial, y no hay un procedimiento a seguir para encontrar fcilmente la funcin deseada, eso se logra solo con prctica a prueba y error y obvio, de un entendimiento del funcionamiento del lenguaje en el que est programado el software. Por consiguiente para realizar este mtodo, usaba el mismo archivo class abierto en diferentes descompiladores a la vez, y hasta revisaban tambin a la vez en Bytecode, todo en paralelo con tal de comprender ampliamente cada seccin del cdigo en cuestin; as de esta forma lo revisaba en el DJ, y si no lograba comprender el cdigo en este programa, tal vez al revisarlo en CCK o Netbeans, u otro, poda hacerme de una mejor idea o razonamiento del cdigo, esto derivado de que cada entorno de estos programas, su semntica es diferente y tienen en mayor o menor grado la ayuda hacia el usuario o programador. Esto es, que tal vez un programa te muestre el cdigo como texto plano, y tal vez otro te genere colores para identificarte los distintos mtodos, funciones y palabras reservadas, u otro te ayude visualmente enfocndote donde abre y cierra cada llave de cada funcin en revisin. Son este tipo de cosas las que se deben explotar en paralelo con dos o tres programas diferentes pero que hagan lo mismo, y de esta manera lograr entender lo ms rpido posible, el cdigo que se est tratando de resolver.

A continuacin les muestro, tres imgenes donde est abierto el mismo archivo D.class en diferentes programas. En el primero es el DJDC, y como vern muestra el cdigo con visuales de colores, el segundo es el DirtyJOE para Bytecode y este muestra solo texto plano monocromo y el tercero es el Netbeans este ltimo muestra visuales de colores as como tambin, ayuda de errores, y facilidad de mostrado de aperturas y cierres de llaves.

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

Con lo explicado anteriormente, quiero dar a entender el razonamiento a seguir, para poder intentar ingeniera inversa sobre cualquier software en particular. Por ltimo, entendiendo y analizando las funciones del programa en java, localice por medio de las cadenas de texto usadas, lo lugares donde se hacen llamar, y con esto deduje la funcin que revisa el cdigo de seis dgitos. Ahora bien, aun

12 de marzo del 2012 11:43am

KeyGen para Java

By Lohez

con esto, tuve que crear un nuevo programa donde copiando un pedazo de esa funcin, lo use para que a la inversa me generara cdigos que al ser insertados en el programa original, como los creo la misma funcin con el mismo algoritmo, son compatibles y funcionan para el sistema en cuestin.

Ac dejo una imagen del aspecto final del KeyGen creado por m para este software:

Bueno cualquier duda o comentario pueden escribirlo, tratare de ayudar a orientarse lo mejor posible para que logren el conocimiento necesario en algn otro reto que tengan. Saludos - Lohez.

También podría gustarte