GNU/Linux >> Znalost Linux >  >> Linux

Chraňte svůj kód Java před zpětným inženýrstvím

Pokud vyvíjíte java aplikaci, je důležité pochopit, že soubory třídy Java lze snadno zpětně zpracovat pomocí dekompilátorů java. V tomto článku se podíváme na to, jak je soubor třídy Java reverzně analyzován a jak chránit váš zdrojový kód před reverzním inženýrstvím.

Zdrojový kód java je zkompilován do souboru třídy, který obsahuje bajtový kód. Java Virtual Machine potřebuje ke spuštění pouze soubor třídy. Problém je v tom, že soubor třídy lze snadno dekompilovat do původního zdrojového kódu pomocí nástrojů dekompilátoru java. Nejlepším řešením, jak zabránit zpětnému inženýrství, je zatemnit soubor třídy, takže bude velmi těžké zpětné inženýrství. Podle slovníku Obfuscate znamená „učinit nejasné nebo nejasné“. To je přesně to, co udělá mnoho java obfuscator tool, jak je vysvětleno níže.

I. Dekompilujte soubor třídy Java.

Než pochopíme, jak zatemnit kód java, pokusme se nejprve pochopit, jak někdo může provést zpětnou analýzu vaší java aplikace. Následující 3 kroky vysvětlují, jak je soubor třídy zpětně analyzován na původní zdrojový kód Java.

1. Vytvořte HelloWorld.java jak je uvedeno níže.

public class HelloWorld {
    public static void main (String args[]) {
        String userMessage = "Hello World!";
        int userCount = 100;
        userCount = userCount + 1;
        System.out.println(userMessage);
        System.out.println(userCount);
    }
}

2. Zkompilujte HelloWorld.java program a spusťte jej, abyste se ujistili, že funguje správně.

$ javac HelloWorld.java
$ java HelloWorld
Hello World!
101

Soubor třídy Java obsahuje pouze bajtový kód. Pokud se pokusíte zobrazit soubor třídy, nebude čitelný, jak je uvedeno níže.

$ vi HelloWorld.class
Ãþº¾^@^@^@2^@
^@^G^@^P^H^@^Q  ^@^R^@^S
^@^T^@^V^G^@^W^G^@^X^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable
^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@^OHelloWorld.java^L^@^H^@ ^A^@^LHello World!^G^@^Y^L^@^Z^@^[^G^@^\^L^@^]^@^^^L^@^]^@^_^A^@
HelloWorld^A^@^Pjava/lang/Object^A^@^Pjava/lang/System^A^@^Cout^A^@^ULjava/io/PrintStream;^A
^@^Sjava/io/PrintStream^A^@^Gprintln^A^@^U(Ljava/lang/String;)V^A^@^D(I)V^@!^@^F^@^G^@^@^@^@^@^B^@^A^@^H^@  ^@^A^@

3. Dekompilujte HelloWorld.class soubor a zobrazit původní zdroj.

Pro tuto ukázku použijte dekompilátor Jad, který je zdarma pro nekomerční použití. Stáhněte si vhodný jad pro vaši platformu. Použijte jad k reverzní analýze souboru HelloWorld.class, abyste získali původní zdroj, jak je znázorněno níže.

$ unzip jadls158.zip
$ ./jad HelloWorld.class
Parsing HelloWorld.class...
Generating HelloWorld.jad
$ vi HelloWorld.jad <This will show the reverse engineered original source code>

II. Zaměňte svou Java aplikaci

Pojďme se podívat, jak zatemnit a ochránit váš zdrojový kód před reverzním inženýrstvím pomocí ProGuard, bezplatného softwaru s licencí GPL.

1. Stáhněte a nainstalujte ProGuard

$ cd /home/jsmith
$ unzip proguard4.2.zip

2. Vytvořte konfigurační soubor proguard

Vytvořte soubor myconfig.pro, který obsahuje všechny informace o vaší java aplikaci.

  • -injar :Zadejte umístění souboru jar. tj. kompilovaná java aplikace, která obsahuje soubory třídy
  • -outjar:Toto je soubor jar, který proguard vytvoří po zmatku. Pokud se někdo pokusí o zpětné inženýrství, bude to obsahovat všechny poškozené, nejasné konvence pojmenování metod a proměnných v souboru třídy.
  • -printmapping:ProGurad vypíše všechny informace o mapování v tomto souboru pro vaši referenci.
  • -keep:Označte soubory tříd nebo metody, které nechcete, aby ProGuard zatemňoval. Pro např. mypkg.MainAppFrame obsahuje vstupní bod pro aplikaci s hlavní třídou, která v tomto příkladu nebude zatemněna.
$ cat myconfig.pro
-injars /home/jsmith/myapp.jar
-outjars /home/jsmith/myapp-obfuscated.jar This is the obfuscated jar file
-libraryjars /usr/java/jdk1.5.0_14/jre/lib/rt.jar
-printmapping proguard.map
-verbose
-keep public class mypkg.MainAppFrame

3. Spusťte ProGuard.

$ cd /home/jsmith/proguard4.2/lib
$ java -jar proguard.jar @myconfig.pro

Tím se vytvoří následující dva soubory:

  • myapp-obfuscated.jar:Obsahuje obfuskované soubory tříd vaší aplikace. Můžete to distribuovat, aniž byste se museli starat o to, že někdo snadno provede zpětnou analýzu vaší aplikace.
  • proguard.map:Tento soubor obsahuje informace o mapování pro vaši referenci.

4. Ukázkový soubor proguard.map

Toto je ukázkový soubor proguard.map, který udává původní název zdrojových objektů java (soubor třídy, metody, proměnná atd.) a nový obfuskovaný název.

myapp.AppToolBar -> myapp.ae:
javax.swing.JButton btnNew -> d
javax.swing.JButton btnOpen -> e

5. Ukázka zdrojového kódu java (myapp.AppToolBar) před zmatením.

btnNew = changeButtonLabel(btnNew, language.getText("new"));
btnOpen = changeButtonLabel(btnOpen, language.getText("open"));

6. Ukázka zdrojového kódu java, který byl po zmatku dekompilován ze souboru třídy (myapp.ae).

d = a(d, n.a("new"));
e = a(e, n.a("open"));

Můžete vidět, že řádek „btnNew =changeButtonLabel(btnNew, language.getText(“new”)); “ bylo přeloženo na „d =a(d, n.a(“nové”));“, od ProGuard, což nebude dávat žádný smysl někomu, kdo používá dekompilační nástroje java k reverzní analýze souboru třídy.

Pomozte mi šířit novinky o The Geek Stuff.

Zanechte prosím své komentáře a zpětnou vazbu k tomuto článku. Pokud se vám tento příspěvek líbí, opravdu bych ocenil, kdybyste mohli šířit informace o blogu „The Geek Stuff“ jeho přidáním na del.icio.us nebo Digg prostřednictvím odkazu níže.


Linux
  1. Volání funkce C z kódu C++

  2. Jak odstraním kód VS a nastavení z Ubuntu?

  3. Vyvolání systémových volání z Javy

  1. Nainstalujte Javu z repozitářů vaší distribuce Linuxu

  2. Převod kódu Python 2 na Python 3

  3. 12 jednoduchých nástrojů na ochranu vašeho soukromí

  1. Najděte počet řádků kódu z úložiště GitHub

  2. Obsluhujte svou doménu z cloudového serveru Rackspace

  3. Import modulu Python z Bash