Cracking en Java

Iniciado por ANTRAX, Octubre 01, 2014, 08:46:15 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Como muchos sabemos, un programa creado en java no es lo mismo que un ejecutable PE, esto radica en que los programitas compilados en java son un conjunto de bytecodes los cuales son interpretados por la JVM (Java Virtual Machine) que es la maquina virtual de java que interpreta estos bytescodes y realiza la función especifica, es por este motivo que java es un lenguaje multiplataforma, ya que es tan solo tener en el SO la JVM instalada para poder correr estos programas y listo. Pues bien, para entrarle a un programa creado en java, ya que como no es un ejecutable PE, no se usa el querido Olly sino un decompilador para java que lo que hará es mostrarnos el fuente real del programa, ya que como es un lenguaje interpretado es mas fácil la decompilación de su code a menos que el code no este ofuscado.

Java por medio del JDK (conjunto de herramientas para poder programar en este lenguaje), toma el código fuente creado por el programador con extensión .java y genera un archivo compilado con extensión .class, que es el código fuente compilado y que a su vez contiene los bytescodes que serán interpretados por la JVM.

Pues bien, los ejecutables de java poseen una extensión .jar que es tan solo un archivo que contiene todas las clases del programa (.class), y otros recursos del mismo y que a su vez puede ser descomprimido con winrar u otro descompresor de archivos rar ;) para obtener estos files.

Ahora, para poder entrarle a este programa debemos analizar primero como es su protección, así que lo ejecutamos y vemos el pantallazo del mismo:


No tiene ningun sitio donde ingresar serial ni nada de eso, así que adelantemos la fecha por un mes y cuando lo volvemos a ejecutar tenemos esto:


Como ven es un trial que pasados 30 dias de uso deja de funcionar y nos muestra este cartelito. Entonces ahora lo que haremos es descomprimir el archivo kotoba.jar en una carpeta aparte y así buscar la clase sospechosa de esta protección:


Aqui vemos una clase muy sospechosa de nombre LicenseChecker.class, entonces traemos nuestro decompilador de java, en este caso uso el Dj Java Decompiler, lo abrimos con el y obtenemos el fuente.


Y el código fuente completo de la clase es este:
Código: java

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;0

public class LicenseChecker
{

    public LicenseChecker()
    {
        Properties licenseFrase = new Properties();
        try
        {
            FileInputStream LIstream = new FileInputStream("license.doc");
            licenseFrase.load(LIstream);
        }
        catch(IOException e)
        {
            isLicensed = false;
        }

        String s;
        for(Enumeration enum = licenseFrase.propertyNames(); enum.hasMoreElements();)
            s = (String)enum.nextElement();

        String license_key = new String(licenseFrase.getProperty("KEY", "non"));

        if(license_key.equals("exoir4K34SCHRVekf0y63gr"))
            isLicensed = true;
        else
            isLicensed = false;
    }

    public static boolean isLicensed;
}


Allí vemos primero que abre un file "license.doc" y en caso de no existir, como genera una excepción, el programa asigna a la variable isLicensed el valor false; pero si el file existe, ejecuta un ciclo for que obtiene los elementos del file y enseguida de este la variable license_key toma el valor que se le asigna a la propiedad KEY escrita en el file, que finalmente es comparada con el valor "exoir4K34SCHRVekf0y63gr" y si son correctas asigna a isLicensed el valor true, de lo contrario flase.

Como vemos todo el embrollo se puede sanar asignando a la variable isLicensed el valor true que es cuando la KEY del file es la correcta, pues bien, tenemos dos opciones, cambiar el code de la clase o generar el file key para que quede registrado.

La primera opción seria modificar todo este code de la siguiente forma para que isLicensed tenga siempre el valor de true:

Código: java
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;0

public class LicenseChecker
{

    public LicenseChecker()
    {
            isLicensed = true;
    }

    public static boolean isLicensed;
}


Con esto conseguiremos que el programa al comprobar la lisencia siempre este correcta xD. Ahora para guardar los cambios debemos seleccionar File/Save y guardar el código fuente con el mismo nombre de la clase es decir "LicenseChecker.java", luego de esto nos vamos al sitio donde la guardamos a traves de la consola de win y compilamos el archivo fuente de la siguiente manera:


Si estamos en la misma carpeta donde esta el archivo "LicenseChecker.class", este será reemplazado por el nuevo que acabamos de crear. Ahora para probar nuestra clase modificada debemos insertarsela al prgrama "kotoba.jar", pero antes realicemos una copia de este para evitar problemas :), luego lo abrimos con winrar y le añadimos la clase que acabamos de generar arrastrandola sobre el mismo.



Le damos aceptar a esta ventana de winrar y añadirá la nueva clase que compilamos ;), luego ejecutamos el programa y vemos que aun con la fecha adelantada no nos muestra la nag


Bien, ahora el segundo método será crear el key file para que quede registrado limpiamente, pues bien, es tan solo crear un nuevo archivo "license.doc", con el bloc de notas ya que debe ser en texto plano y le añadimos la siguiente linea:

KEY exoir4K34SCHRVekf0y63gr


Guardamos los cambios y el archivo lo colocamos en la misma carpeta que el programa "kotoba.jar" pero el original, no el que acabamos de parchear, ya que no tendria sentido, y con esto lograremos registrarlo.



¡EUREKA!, estamos registrados!!

Autor: AmeRiK@nO


Excelente :D muy útil, gracias por compartir.
Si nos imponemos limites, no seremos más.

Octubre 01, 2014, 06:25:09 PM #2 Ultima modificación: Octubre 01, 2014, 09:16:16 PM por fermino
Me ha encantado el Tutorial, jefe, es mi lenguaje preferido, y veo lo simple que es crackear una aplicación de Java.

Ya le he puesto una chincheta a este post in my brain, y te pido disculpas porque no habia visto el mp, que me mandaste, gracias hermano.


Un abrazo marik, en el buen sentido de la palabra,jajaja
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ayssss, cada día me cautiva más este universo.

Gracias por tu permanente trabajo solidario.

G,
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

Maldito(con todo el respeto de la palabra como dice Hu3c0) que has estudiado xD
Antrax mis respetos para ti paso de vez en cuando por aca y veo siempre algo nuevo de ti sigue asi men.

Gracias por compartir!....parece bastante sencillo hacer craking con java.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Maldito(con todo el respeto de la palabra como dice Hu3c0) que has estudiado xD
Antrax mis respetos para ti paso de vez en cuando por aca y veo siempre algo nuevo de ti sigue asi men.

Algo que resaltar no es de Antrax el tutorial como cita en la fuente es  AmeRiK@nO el que lo realizo, si no ando mal esto anda en la lista de CLS.

Regards,
Snifer
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Llaman traidor a la persona que evito que caiga el foro, gente bruta!



Muy buen aporte y antes que nada Gracias ! :D

Estoy empezando a programar en este lenguaje y al ver que es tan facil de crackear se me ocurre la pregunta, hay alguna manera que despues de compilado el programa no se pueda "descompilar" para que no se pueda cambiar las clases y demas ?




Con la fuerza del mar, con la paz del rio