Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di gatto012
    Registrato dal
    Sep 2002
    Messaggi
    1,726

    smanettare con il decomp java

    salve,

    sto smanettando un po' di class java nel tentativo di comprendere un po' il linguaggio....

    mi capita spesso questo problema:
    1) prelevo una qualsiasi class java ( FUNZIONANTE )
    2) la decompilo ( io ho provato dj java decompiler e cavaj che sono quelli gratuiti più diffusi su google, e non sono classi coperte da copyright o offuscate quindi non ci dovrebbero essere problemi e decompilarle )

    il sorgente che ottengo, se in teoria è funzionante la class, dovrebbe essere un sorgente funzionante e ricompilabile....
    almeno a quanto pensavo, perchè invece capita spesso che ricompilando il codice dia degli errori....

    per curiosità , avete idea del perchè succede questo?
    sapreste aiutarmi a correggere il sorgente per poterlo ricompilare correttamente dati i seguenti errori?


  2. #2
    se non posti la classe o il sorgente da te ottenuto creda che sarà un po' difficile aiutarti...

  3. #3
    Utente di HTML.it L'avatar di gatto012
    Registrato dal
    Sep 2002
    Messaggi
    1,726
    lì immagine si riferisce a questo sorgente della class, che di preciso non so cosa compia ma che avevo scelto arbitrariamente per provare a decompilare con quei due programmi ( è un po' lungo percui ho tagliato la parte in cui cascano gli errori... ma mi ha dato solo 8 errori, avvolte con poche stringhe fatte da me per prova me ne ha dati pure di più XD ):

    codice:
    .....
    
        public void addMessageListener(MessageListener listener)
        {
            this.listener = listener;
        }
    
        public Protocol getProtocol()
        {
            return protocol;
        }
    
        public void go(int x, int y)
        {
            protocol.go(x, y);
        }
    
        protected Object doInBackground()
        {
            boolean result;
            Socket skt;
            InputStream in;
            OutputStream out;
            result = true;
            skt = null;
            in = null;
            out = null;
            byte msg[];
            setMessage("Connecting...");
            skt = new Socket("XXX.YYY.ZZZ.KKK", 843);
            in = skt.getInputStream();
            System.out.println("Listening...");
            out = skt.getOutputStream();
            byte msgString[] = "<policy-file-request/>".getBytes();
            msg = new byte[msgString.length + 1];
            for(int i = 0; i < msgString.length; i++)
            {
                msg[i] = msgString[i];
            }
    
            msg[msgString.length] = 0;
            out.write(msg);
            System.out.println((new StringBuilder()).append("->").append(new String(msg)).toString());
            System.out.println((new StringBuilder()).append("Bytes ready: ").append(in.available()).toString());
            for(; in.available() == 0 && !cancelled; Thread.sleep(100L)) { }
            msg = new byte[in.available()];
            System.out.println((new StringBuilder()).append("Bytes read: ").append(in.read(msg)).toString());
            System.out.println((new StringBuilder()).append("<-").append(new String(msg)).toString());
            out.close();
            in.close();
            skt.close();
            skt = new Socket("XXX.YYY.ZZZ.KKK", 8084);
            in = skt.getInputStream();
            setMessage("Listening...");
            out = skt.getOutputStream();
            msg = null;
    _L1:
            Vector msgs;
            if(cancelled)
            {
                break MISSING_BLOCK_LABEL_577;
            }
            msgs = protocol.processInput(msg);
            if(protocol.isClosed())
            {
                return Boolean.valueOf(true);
            }
            if(msgs == null)
            {
                GregorianCalendar gc = new GregorianCalendar();
                gc.add(13, -30);
                if(lastMsg.before(gc.getTime()))
                {
                    lastMsg = new Date();
                    msgs = Protocol.getAntiTimeoutMsg();
                }
            }
            if(msgs != null)
            {
                String msgToDisplay = "";
                for(Iterator i$ = msgs.iterator(); i$.hasNext();)
                {
                    byte msgo[] = (byte[])i$.next();
                    out.write(msgo);
                    msgToDisplay = (new StringBuilder()).append(msgToDisplay).append((new String(msgo)).trim()).toString();
                }
    
                listener.messageSent(msgToDisplay);
            }
            for(; in.available() == 0 && !cancelled; Thread.sleep(100L)) { }
            if(in.available() > 0)
            {
                msg = new byte[in.available()];
                in.read(msg);
                listener.messageArrived(new String(msg));
            }
              goto _L1
            InterruptedException e;
            e;
            result = false;
            break MISSING_BLOCK_LABEL_577;
            e;
            e.printStackTrace();
            setMessage(e.getMessage());
            result = false;
            try
            {
                if(out != null)
                {
                    out.close();
                }
                if(in != null)
                {
                    in.close();
                }
                if(skt != null)
                {
                    skt.close();
                }
                if(result)
                {
                    setMessage("Disconnected");
                }
            }
            // Misplaced declaration of an exception variable
            catch(InterruptedException e)
            {
                e.printStackTrace();
            }
            return Boolean.valueOf(result);
        }
    
        protected void succeeded(Object obj)
        {
        }
    
        protected void cancelled()
        {
            super.cancelled();
            cancelled = true;
            setMessage("Cancelled");
        }
    
        protected void interrupted(InterruptedException arg0)
        {
            super.cancelled();
            cancelled = true;
            setMessage((new StringBuilder()).append("Interrupted: ").append(arg0.getMessage()).toString());
        }
    }

  4. #4
    Utente di HTML.it L'avatar di gatto012
    Registrato dal
    Sep 2002
    Messaggi
    1,726
    ci sono alcune cose che proprio non capisco....

    ad esempio mi restituisce alla stringa " goto _L1 "

    un messaggio: Illegal start of expression

    come se il decompilatore avesse creato un comando che nemmeno esiste....
    però non conosco gli errori di debug forniti dal compilatore java percui potrei sbagliare io interpretazione..... sono abituato a cosette più semplici ma devo farci il callo anche in questa

  5. #5
    una classe scelta "arbitrariamente" (per non dire a caso) in un package è molto probabile che dia errore in quanto richiederà quasi sicuramente un'altra classe dello stesso package...
    prova a compilare e decompilare la classe helloworld.

    ps: leggi il regolamento del forum.

  6. #6
    Utente di HTML.it L'avatar di gatto012
    Registrato dal
    Sep 2002
    Messaggi
    1,726
    Originariamente inviato da darksoullight88
    una classe scelta "arbitrariamente" (per non dire a caso) in un package è molto probabile che dia errore in quanto richiederà quasi sicuramente un'altra classe dello stesso package...
    prova a compilare e decompilare la classe helloworld.

    ps: leggi il regolamento del forum.
    ho risolto tutte le dipendenze ed infatti non mi restituisce errori di quel tipo ( almeno credo )

  7. #7
    con solo quel codice non so cosa dirti..comunque prova a postare le classi java...magari come allegato.
    o i file che hai ottenuto.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Rimane il fatto che, indipendentemente dallo scopo, è vietato parlare di decompilazione in questo forum....

    PS: quello che ottieni è il sorgente "ottimizzato" dal compilatore... che ovviamente non sempre è compilabile: il linguaggio non mette a disposizione "tutte le feature" della JVM, che solo il compilatore conosce e solo lui può usare (vedi l'istruzione GOTO).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.