necesito hackear un java

Iniciado por misforos, 8 Mayo 2010, 15:34 PM

0 Miembros y 2 Visitantes están viendo este tema.

misforos

Necesito saber que necesito para hackear un programa java, lo que pasa es que se conecta online y solo me da un tiempo de uso, me gustaria saber que necesito para eliminar la restriccion

Esta en jar. trate de decomipilarlo, pero contiene muchos class adentro (que es ovbio porque es un jar verdad?)

estuve en modo snif para saber que es lo que necesita de internet y consegui esto

GET /darkorbit/50231516 HTTP/1.1
User-Agent: Java/1.6.0_18
Host: profibot.net
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

HTTP/1.1 200 OK
Date: Sat, 08 May 2010 14:58:46 GMT
Server: Apache/2.0.63 (FreeBSD) PHP/5.2.12
X-Powered-By: PHP/5.2.12
Set-Cookie: PHPSESSID=3bt8itplapppej149m5mq51hj2; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 37
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

=8:;9=9>&:89858=58A(9:B<9B<@&?@9@:888

lo que me hace pensar que la ultima cadena es lo que en verdad importa, pero al parecer esta cifrado.

estuve buscan la funcion class que se encarga de el tiempo de licencia y aparece algo como esto

package darkorbit;

import java.awt.Dimension;
import java.util.ResourceBundle;
import javax.swing.*;

// Referenced classes of package darkorbit:
//            aA


public final class av extends JPanel
{

    public av()
    {
        b = new JLabel((new StringBuilder()).append(aA.a.getString("licenceTo")).append(":").toString());
        a = new JLabel();
        setPreferredSize(new Dimension(100, 20));
        setLayout(new BoxLayout(this, 0));
        add(Box.createHorizontalGlue());
        setBorder(BorderFactory.createRaisedBevelBorder());
        add(b);
        add(Box.createHorizontalStrut(5));
        add(a);
        a();
    }

    public final void a()
    {
        a.setText("undefined");
    }

    private JLabel b;
    JLabel a;
}


package darkorbit;

import a.a;
import a.b;
import java.io.PrintStream;
import java.util.Iterator;
import java.util.List;

// Referenced classes of package darkorbit:
//            I, K, O, S,
//            aA, aB, aC, ah

public final class ap
    implements aB
{

    public ap(String s, String s1, String s2, int i, String s3, long l,
            int j, boolean flag, boolean flag1, boolean flag2)
    {
        a = new aA(this);
        s2 = (s2 = new a(s2, 1)).a();
        String s4 = null;
        s2 = s2.iterator();
        do
        {
            if(!s2.hasNext())
                break;
            Object obj;
            if(((b)(obj = s2.next())).a() != i)
                continue;
            s4 = ((b)obj).c();
            break;
        } while(true);
        a.i.c(s4);
        a.i.c(8080);
        a.i.a(s);
        a.i.b(s1);
        a.i.a();
        a.j.start();
        a.n.start();
        a.q.start();
        System.out.println((new StringBuilder()).append("License: ").append(s3).toString());
        switch(j)
        {
        case 1: // '\001'
            long l1 = 0L;
            s = a.l;
            a.l.b = l1;
            break;

        case 2: // '\002'
            long l2 = l;
            s = a.l;
            a.l.b = l2;
            break;
        }
        a.l.start();
        if(j == 0)
            break MISSING_BLOCK_LABEL_373;
        System.out.println("Waiting to connect...");
_L3:
        if(a.i.a != null) goto _L2; else goto _L1
_L1:
        Thread.sleep(100L);
          goto _L3
        JVM INSTR dup ;
        s2;
        printStackTrace();
          goto _L3
_L2:
        System.out.println("Started");
        a.k.f = flag;
        a.k.d = flag1;
        a.k.e = flag2;
        a.k.start();
    }

    public final void a(int i)
    {
        switch(i)
        {
        case 1: // '\001'
            System.out.println("Error : no hitpoints");
            break;

        case 8: // '\b'
            System.out.println("Error : invalid map");
            break;

        case 3: // '\003'
            System.out.println("Error : double logged in");
            break;

        case 4: // '\004'
            System.out.println("Error : invalid session");
            break;

        case 2: // '\002'
        case 5: // '\005'
        case 6: // '\006'
        case 7: // '\007'
        default:
            System.out.println("Error");
            break;
        }
        ((ap) (i = this)).a.a();
    }

    private aA a;
}



es con el decompilador... :S necesesito saber por donde empezar

toxeek


Amigo no das info suficiente. No das code, esta en .jar ?? No das nada.
Ademas, si las restricciones estan en el server side, vete olvidando de que sea tan facil.

Tienes solo el .class??

Quizas te muevan el post a otro sitio. Yo, aun pensando si borrarlo, prefiero dejarlo a ver si se pone la tematica mas interesante.

Aporta mas info.

Saludos.
"La envidia es una declaración de inferioridad"
Napoleón.

toxeek

Bueno como veo "50231516" es tu ID.

La cadena devuelta por http://profibot.net/darkorbit/50231516 es siempre la misma la primera parte, cambia solo la ultima. Prueba con otros IDs desde la app on el navegador (e.g: http://profibot.net/darkorbit/80.

El control del SID no lo entiendo, parece que es un valor poco validado.

No creo que el control del tiempo dependa de esa cadena encodeada, mas bien estara en el server side. La funcion de esa cadena pues no se, para ver el estado de cierto ID/user ? (caducado, activo..)


Saludos.

"La envidia es una declaración de inferioridad"
Napoleón.

misforos

bueno ya entendi el codigo, ahora que ya caduco la licencia sale este codigo

= 8 : ; 9 = 9 > & m " x q z m

que si le restamos 8 a cada signo y vemos que signo es nos dara
50231516 & expire

& no se si restarlo pues otro signo saldria quizas solo sea de conjuncion, pero eso es lo que dice entonces en el codigo anterior diria

=8:;9=9>&:89858=58A(9:B<9B<@&?@9@:888
50231516&2010/05/09 12:41:48&78182000

que es la fecha en la que me decia que expiraba

ahora como encontrar quien valida esta funcion :S o como suplantar la direccion para que yo pueda hostear el codigo y esto no cambie y siempre sea util y no me diga expire

ahora ese es el problema

toxeek

Citarque si le restamos 8 a cada signo y vemos que signo es nos dara
50231516 & expire
;-)

El caracter "&" parece un simple separador de campos.

Como te sugeri, creo que la validacion se hara en el server side.
Pero a mi lo que no me suena es la falta de autenticacion y lo que se manda en el GET. Es decir, si pruebas con otro ID te devolvera una cadena sin ningun tipo de AAA (Authentication, Authorization, Access control).. El SID, pues parece ser que se valida muy pobremente, o al menos eso parece.

QUe tal si introduces otro ID, con SID valido ? (es facil dar con uno que no suelte error) Puedes jugar ??

De todos modos si pones un link al .jar mejor. Asi podriamos descomprimirlo (un .jar es practicamente un .zip) y ver todo lo que contiene.

Debe de haber un metodo (a parte de a()) que se encargue de procesar la cadena eso si. Hay que ver si lo encontramos y asi poder examinar bien que pasa.


Saludos.
"La envidia es una declaración de inferioridad"
Napoleón.

misforos

#5
http://www.megaupload.com/?d=291O8LD2

ahi esta el archivo

ya intente probar con otro id, y no funciona el programa


a por cierto muchas gracias por la ayuda que me estas brindando


Debci

No se pero este tema quizás deberia ir en ingenieria Inversa...
Pero weno...
Nunca he debuggeado nada en java, pero podrias revisar eventos y metodos que se conecten a internet, busca si puedes referencias por Socket de java.net.

Es lo mas que te puedo decir.

Saludos

misforos

bueno despues de un tiempo me di con que esta ofuscado los class y cuando lo descompilo sale muchos errores, existe una forma de desofuscarlo?

me salen errores como

found   : java.util.Properties
required: java.lang.String[]

symbol  : method load(java.io.FileInputStream)
location: class java.lang.String[]

y asi asi .... :(

algun programa para desofuscarlo, alguien conoce?

P.D: intente hacer ingenieria inversa a un class pero la verdad no entiendo mucho  :(