fai in modo che il tuo Jar non venga decompilato

Come posso impacchettare la mia applicazione Java in un jar eseguibile che non può essere decompilato (ad esempio, da Jadclipse)?

Non puoi Se JRE può eseguirlo, un’applicazione può decompilarlo.

Il meglio che puoi sperare è rendere molto difficile la lettura (sostituisci tutti i simboli con combinazioni di ‘l’ e ‘1’ e ‘O’ e ‘0’, inserisci un sacco di codice inutile e così via). Saresti sorpreso di quanto sia illeggibile la possibilità di creare codice, anche con uno strumento di traduzione relativamente stupido. Questo è chiamato offuscamento e, sebbene non perfetto, a volte è adeguato.

Ricorda, non puoi fermare l’hacker determinato più del ladro determinato. Quello che stai cercando di fare è rendere le cose molto difficili per l’aggressore casuale. Quando vengono presentati i simboli O001l1ll10O , O001llll10O , OO01l1ll10O , O0Ol11ll10O e O001l1ll1OO , e il codice che non sembra fare nulla di utile, la maggior parte delle persone si arrenderà.

Per prima cosa non puoi evitare che la gente decodifichi il tuo codice. Il bytecode JVM deve essere semplice per essere eseguito e ci sono diversi programmi per decodificarlo (lo stesso vale per .NET CLR). Puoi solo rendere sempre più difficile alzare la barriera (cioè il costo) per vedere e capire il tuo codice.

Il modo usuale è quello di offuscare la fonte con qualche strumento. Classi, metodi e campi sono rinominati in tutto il codebase, anche con identificatori non validi se lo si sceglie, rendendo il codice quasi imansible da comprendere. Ho avuto buoni risultati con JODE in passato. Dopo aver offuscato, usa un decompilatore per vedere come appare il tuo codice …

Accanto all’offuscamento è ansible crittografare i propri file di class (tutti tranne una piccola class di avviamento) con un metodo e utilizzare un programma di caricamento classi personalizzato per decrittografarli. Sfortunatamente la class del programma di caricamento classi non può essere crittografata, quindi le persone potrebbero capire l’algoritmo di decrittografia leggendo il codice decompilato del programma di caricamento classi. Ma la finestra per attaccare il tuo codice si è ridotta. Ancora una volta questo non impedisce alle persone di vedere il tuo codice, rende solo più difficile per l’aggressore casuale.

Si potrebbe anche provare a convertire l’applicazione Java in un file EXE di Windows che potrebbe hide l’idea che sia Java (in una certa misura) o realmente compilare il codice macchina, a seconda delle necessità delle funzionalità JVM. (Non ho provato questo.)

GCJ è uno strumento gratuito che può essere compilato in bytecode o in codice nativo. Tenendo presente, questo ha in qualche modo vanificato lo scopo di Java.

Un po ‘tardi lo so, ma la risposta è no.

Anche se si scrive in C e si compila in codice nativo, ci sono dissasemblatori / debugger che permetteranno alle persone di scorrere il codice. Concesso – il debug di un codice ottimizzato senza informazioni simboliche è un problema – ma può essere fatto, ho dovuto farlo occasionalmente.

Ci sono dei passi che puoi compiere per renderlo più difficile – per esempio su Windows puoi chiamare l’API IsDebuggerPresent in un ciclo per vedere se qualcuno sta eseguendo il debug del tuo processo, e se sì ed è una build di rilascio – termina il processo. Naturalmente un aggressore sufficientemente determinato potrebbe intercettare la tua chiamata a IsDebuggerPresent e restituire sempre false.

Ci sono una varietà di tecniche che sono venute fuori: persone che vogliono proteggere qualcosa e persone che sono fuori per aprirla, è una vera e propria corsa agli armamenti! Una volta che percorri questa strada, dovrai costantemente aggiornare / aggiornare le tue difese, non c’è sosta.

Questa non è la mia soluzione pratica ma, qui penso una buona raccolta o risorse e tutorial per farlo accadere al più alto livello di soddisfazione.

Un suggerimento da questo sito web (oracle community)

(modo pulito), Obfuscate il vostro codice, ci sono molti strumenti di open source e di offuscamento gratuiti, ecco una semplice lista di questi: [Open source obfuscators lis t]. Questi strumenti rendono il tuo codice illeggibile (sebbene sia ancora ansible decompilarlo) cambiando i nomi. questo è il modo più comune per proteggere il tuo codice.

2. (Non così pulito) Se hai una piattaforma di destinazione specifica (come Windows) o puoi avere versioni diverse per piattaforms diverse, puoi scrivere una parte sofisticata dei tuoi algoritmi in un linguaggio di basso livello come C (che è molto difficile decompilare e comprendere) e usarlo come libreria nativa nella tua applicazione java. non è pulito, perché molti di noi usano java per le sue abilità multipiattaforma, e questo metodo sfuma quell’abilità.

e questo qui sotto segue passo passo: ProtectYourJavaCode

Godere! Tieni le tue soluzioni aggiunte, ne abbiamo bisogno di più.