Reverse engineering e Java

9

Il java class file o jar file è facile da decodificare? Perché java genera un file di classe dopo la compilazione e non i file exe. I file jar e di classe sono facili da decompilare rispetto a c # e C ++? Se è facile, allora come possiamo proteggere il codice java in modo che sia difficile da decodificare?

    
posta sujeesh 29.01.2013 - 13:24
fonte

3 risposte

13

Sì, i file di classe Java sono facili da decodificare. Il formato è molto regolare e molto limitato: la VM deve essere in grado di verificare che il codice sia conforme alle forti regole di digitazione del codice Java. Questo è come l'output di un compilatore C con tutte le ottimizzazioni disattivate: la struttura del programma è chiaramente visibile. (Nel modello Java, l'ottimizzazione avviene nella VM stessa, quando viene eseguito il compilatore JIT.)

Le persone cercano comunque l'offuscamento; per esempio. con ProGuard (ci sono molti strumenti su quel mercato, questo è gratuito e opensource). Ad esempio, tutte le classi e i metodi sono rinominati con stringhe che non hanno senso per un umano (ma l'offuscamento produce anche un file di traduzione che lo sviluppatore tiene per sé, in modo che possa interpretare le tracce dello stack in caso di segnalazioni di bug). / p>

In alternativa, potresti elaborare il tuo codice Java in un compilatore Ahead-of-Time , come JET . Questo ha alcune restrizioni (in particolare, il risultato non è più "portatile" dal momento che è un codice nativo), ma rende la decompilazione più difficile (vicino alla complessità del reverse engineering compilato C o C ++).

Di norma, il reverse engineering tende a funzionare, e per Java ancora di più, anche dopo l'offuscamento. Faresti meglio a non usare l'offuscamento come fondamento della tua sicurezza.

Vale anche la pena notare che questo è molto simile ai problemi di lettura del codice in qualsiasi linguaggio .Net come C #. È ugualmente banale generare codice Java, VB.Net o C # dai file distribuiti e le tecniche di offuscamento che cercano di rendere più difficile la lettura sono simili per entrambi.

    
risposta data 29.01.2013 - 13:37
fonte
7

Esistono numerosi strumenti che consentono la decompilazione dei programmi java e sono abbastanza semplici da usare.

Ad esempio JD-GUI presenta una vista grafica di un file JAR caricato e rende la navigazione del codice ragionevolmente facile.

Se qualcuno vuole modificare il codice in un'applicazione a cui hanno accesso, questo è relativamente semplice e ben documentato, ad esempio questo McAfee carta descrive il processo di decompilazione di un programma, modifica di una classe Java e quindi ricompilazione del programma.

come ha detto @ThomasPornin, affidarsi all'offuscamento è una cattiva idea per questo tipo di problema. Se si consente a qualcuno di scaricare una copia di un programma, è necessario presumere che un utente malintenzionato possa accedere a qualsiasi informazione all'interno del programma e ignorare qualsiasi controllo di sicurezza disponibile solo sul lato client.

    
risposta data 29.01.2013 - 14:26
fonte
2

un piccolo numero di file di classe o file JAR è facile da decodificare (vedi risposta da @Thomas). Tuttavia, applicazioni java più grandi, ad es. J2EE che utilizza molte centinaia di file JAR e ha script di compilazione estremamente complessi può essere difficile da decodificare solo a causa della complessità del codice.

Esistono strumenti open source e commerciali per organizzare il tuo codice e dare un senso a tutto, incluso un interessante plugin di Eclise chiamato VERA .

Se stai solo cercando di conoscere la struttura del codice, allora ci sono strumenti di introspezione che possono aiutarti - così come strumenti di modellazione come Rational Suite / Enterprise Architect che possono succhiare java java e fornire modelli UML.

    
risposta data 29.01.2013 - 14:24
fonte

Leggi altre domande sui tag