Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    dal bytecode al sorgente: è possibile!

    Chissà quanti di voi già lo sapranno.. io sinceramente mi sono avvicinato da poco a java, ma dopo questa triste scoperta penso di allontanarmi nuovamente.

    E' possibile tramite JCavaj (ed altri programmini simili), decompilare il bytecode e riottenere il sorgente.

    In pratica se voi state offrendo un sistema di upload in java sul vostro sito web, che magari sfrutta una connessione ftp (voi pensate di essere sicuri tenendo le pwd nel bytecode...)... vi posso assicurare che con un decompilatore non è più tanto sicura come cosa.

    Sto scoprendo proprio ora che TUTTI i files .class di java possono essere decompilati.

    Sto provando con una marea di progetti (anche roba che in giro si trova a pagamento... ed anche a fior di quattrini..): e tutti fino ad ora sono riuscito a decompilarli.

    E' assurda come cosa: mi ha molto scosso.

    Ho riscontrato solo un piccolo problema (ma potrebbe derivare dal decompilatore che uso [JCavaj]): ci sono problemi con le variabile intere utilizzate come contatori/indici.

    Ho cercato su Internet, quasi incredulo della scoperta (per me nuova... ed anche tragica!) ed ho scoperto che esiste qualche chicca per far perdere tempo (tipo offuscare il codice con variabili prive di senso ed altre cose simili): ma non serve a nulla di concreto.

    Tutta la vostra fatica, tutti i vostri sudori... nelle mani di tutti.


    Mi auguro che i guru di java presenti su questo forum mi diano una smentita: non ci credo che il linguaggio più vantato al mondo abbia una falla simile.

    Non mi tirate fuori la discussione che da tutti gli eseguibili si può arrivare al sorgente perché anche se fosse possibile, ci vorrebbe molto più tempo... qui si tratta di avviare un programma, dare il path dei files .class ed ottenere in meno di 5 secondi i sorgenti: un'operazione da ragazzi in pratica.


    Vi prego: datemi prova plausibile che sto sbagliando e che esiste un modo per rendere impossibili tutto ciò: fatemi capire che ho scritto cavolate.



    P.S.: avevo cercato sul forum ma non ho trovato discussioni simili, forse perché avevano usato oggetti del thread particolari... se tante volte, ci fossero già discussioni, vi chiedo scusa: ma sono sconvolto.
    ... :master: riconosco l'esistenza di un limite a tutto , ma non l'accetto ...

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prova a ricompilare qualsiasi cosa di più serio di HelloWorld... e poi è proprio vero, l'hai detto anche tu stesso che si può decompilare di tutto... non a caso in giro si trovano i crack di qualsiasi programma, anche non scritto in java. Il fatto è questo comunque: se tu speri di fare i soldi con i programmi venduti al privato che li utilizza per scopi "ludici", cambia mestiere, nemmeno con i sistemi operativi accade ciò (a meno di chiamarsi Bill Gates o Steve Jobs). L'industria del software vive (o vivacchia) principalmente grazie alle spese sostenute dai professionisti che non possono esimersi dal comprare la licenza di quel che utilizzano nella gestione del loro business. Onestamente non mi preoccuperei del sedicenne foruncoloso che spende i pomeriggi a decompilare programmi altrui invece di trombare con la ragazza o dedicarsi a qualche attività sportiva più salutare dello stare seduto di fronte a un computer...in una certa misura, penso che quasi tutti su questo forum siano passati per quel periodo...

    Altra piccola considerazione, java è molto valido dal punto di vista della portabilità: ciò che hai compilato su Windows girerà su Linux, Mac-OS e quant'altro. Ci sono delle limitazioni che ogni tanto fanno optare per qualche linguaggio diverso (a che livello bisogna interfacciarsi con la macchina su cui l'applicazione gira, in Java normalmente tale livello è medio-alto, in C anche bassissimo) o a soluzioni miste. Dove java invece è decisamente più potente delle controparti è il settore dei web-services e lì valgono tutte le considerazioni valide per asp, aspx e php in fatto di sicurezza (a meno di macro falle o misconfigurazioni del web server, non è possibile risalire al sorgente).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: dal bytecode al sorgente: è possibile!

    Originariamente inviato da masterix21
    Chissà quanti di voi già lo sapranno.. io sinceramente mi sono avvicinato da poco a java, ma dopo questa triste scoperta penso di allontanarmi nuovamente.
    E fai male.

    Originariamente inviato da masterix21
    E' possibile tramite JCavaj (ed altri programmini simili), decompilare il bytecode e riottenere il sorgente.
    Certo .... però è assolutamente senza commenti/documentazione e se è stato "offuscato" certi nomi di classi o variabili sono "a palla".

    Originariamente inviato da masterix21
    In pratica se voi state offrendo un sistema di upload in java sul vostro sito web, che magari sfrutta una connessione ftp (voi pensate di essere sicuri tenendo le pwd nel bytecode...)... vi posso assicurare che con un decompilatore non è più tanto sicura come cosa.
    Infatti una cosa del genere non è da gestire in questo modo. Se tu avessi sviluppato la stessa cosa in un altro linguaggio come C, C++, ecc... mettendo sempre le pwd in chiaro, non credi che basterebbe un semplice editor esadecimale per scoprire la password all'interno del tuo .exe???

    Originariamente inviato da masterix21
    Sto scoprendo proprio ora che TUTTI i files .class di java possono essere decompilati.

    Sto provando con una marea di progetti (anche roba che in giro si trova a pagamento... ed anche a fior di quattrini..): e tutti fino ad ora sono riuscito a decompilarli.

    E' assurda come cosa: mi ha molto scosso.
    Primo: non è assurda. Secondo: se sei scosso per questo .....

    Originariamente inviato da masterix21
    Ho cercato su Internet, quasi incredulo della scoperta (per me nuova... ed anche tragica!) ed ho scoperto che esiste qualche chicca per far perdere tempo (tipo offuscare il codice con variabili prive di senso ed altre cose simili): ma non serve a nulla di concreto.
    Certo, esistono tool come ad esempio ProGuard che permettono di offuscare il codice. E non sono certo inutili!!

    Originariamente inviato da masterix21
    Mi auguro che i guru di java presenti su questo forum mi diano una smentita: non ci credo che il linguaggio più vantato al mondo abbia una falla simile.
    Ripeto: non è un falla o un bug!

    Originariamente inviato da masterix21
    Non mi tirate fuori la discussione che da tutti gli eseguibili si può arrivare al sorgente perché anche se fosse possibile, ci vorrebbe molto più tempo... qui si tratta di avviare un programma, dare il path dei files .class ed ottenere in meno di 5 secondi i sorgenti: un'operazione da ragazzi in pratica.
    Per terminare, una considerazione un po' "filosofica". Tu hai un software commerciale Java (di cui non hai i sorgenti, ovviamente) composto da un migliaio di classi. Lo decompili e ottieni tutti i sorgenti che, come ho detto all'inizio, sono senza commenti/documentazione e magari "offuscati".
    Cosa ne fai??? Provi a capire come funziona??? Se sicuro di riuscire a capire un migliaio di classi senza commenti/documentazione???

    Se una persona ha le competenze tali da poter capire completamente un progetto complesso senza avere alcuna documentazione ..... allora avrebbe le competenze necessarie per sviluppare da zero un progetto simile e magari migliore!!

    Non mi ricordo più dove l'ho letto (sicuramente su qualche rivista o libro) ma invece di tentare di "copiare" un software bisognerebbe, in linea teorica, tentare di "copiare" la mente e le conoscenze del programmatore che ha sviluppato il progetto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    In pratica se voi state offrendo un sistema di upload in java sul vostro sito web, che magari sfrutta una connessione ftp (voi pensate di essere sicuri tenendo le pwd nel bytecode...)... vi posso assicurare che con un decompilatore non è più tanto sicura come cosa.
    Salvare una password in chiaro all'interno di un sorgente (compilato o no) è un approccio estremamente errato. Anche se avessi un eseguibile compilato sarebbe possibile risalire alla password ugualmente. L'approccio migliore è salvare la password sotto forma di hash o nel file sorgente oppure, meglio ancora, all'interno di un altro file.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Benvenuto nel mondo dei linguaggi interpretati.


    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

  6. #6
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    ai più esperti di me:

    Potete dire la vostra e consigliare dei programmi che impediscano (si spera)o rallentino il processo di decompilazione?Decompilare un jar è più difficile?non ho mai provato....ho provato solo coi class.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da energie
    Potete dire la vostra e consigliare dei programmi che impediscano (si spera)o rallentino il processo di decompilazione?Decompilare un jar è più difficile?non ho mai provato....ho provato solo coi class.
    L'ho detto nel post precedente: si possono usare degli offuscatori di codice come ad esempio ProGuard. Che nota bene, non impediscono o rallentano la decompilazione ma rendono solo più difficile la comprensione del sorgente ottenuto, da parte di altre persone.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Oltretutto un JAR è solamente un file ZIP con l'estensione cambiata... quel file contiente dei CLASS. Quindi un JAR non si può decompilare, ma solo decomprimere.


    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

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    ho letto in giro che ci sono anche dei programmi che tentano di mandare in crash i decompilatori (ad esempio, aggiungendo codice dopo un return, break ecc...). l'inconveniente e' che possono mandare in crash anche la jvm....
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.