Avatar billede aslan Nybegynder
22. august 2003 - 08:53 Der er 27 kommentarer og
1 løsning

Beskytte min java kode?

Hvordan beskytter jeg min java kode for at blive decompileret og misbrugt?
Vi er et par, der har forsøgt at bruge open source projektet RetroGuard, men uden held. Er der nogen der kender dette program og kan guide os igennem det? Eller måske kender et andet program vi kan bruge....
Avatar billede arne_v Ekspert
22. august 2003 - 08:59 #1
Jeg har god erfaringer med programmet JMangle.

Det er ældgammelt.

Men det virker.

Og der er muligheder for at styre rimeligt præcist hvad der obfuscates
og generere en map mellem originale navne og obfuscererede navne.

Men der er så vidt jeg ved mange andre produkter.
Avatar billede arne_v Ekspert
22. august 2003 - 09:00 #2
Avatar billede arne_v Ekspert
22. august 2003 - 09:04 #3
Det er dog stadigvæk en primitiv navne erstatning d.v.s. at det
kan stadigvæk fint decompiles med de kendte decompilere, men
store Java programmer med manglede navne og uden kommentarer er
ikke specielt sjove at rette i.
Avatar billede aslan Nybegynder
22. august 2003 - 09:08 #4
Ok Arne jeg tjekker det lige ud og vender tilbage til dig..
Avatar billede aslan Nybegynder
22. august 2003 - 09:25 #5
Kan du kort forklare mig hvordan jeg gør arne, kan ikke lige få det til at virke med mine egne klasser. Jeg kan sagtens få eksemplerne til at virke?
Avatar billede arne_v Ekspert
22. august 2003 - 09:42 #6
Jeg graver lige et eksempel frem.
Avatar billede arne_v Ekspert
22. august 2003 - 09:53 #7
Her er et eksempel.

Det her er et library d.v.s. at jeg ikke obfuscater public navne.

md temp
javac -classpath noget.jar -d temp src\pakke\*.java
java -classpath temp;noget.jar;\jmangle\jmangle.jar jmangle -public +map obfu.map temp\pakke .
rd/q temp /s
jar cvf message.jar pakke\*.class
rd/q pakke /s
Avatar billede arne_v Ekspert
22. august 2003 - 10:01 #8
Groft sagt så compiler man .java -> .class og så obfuscater man
.class -> .class - man skal huske at have både sine klasser
og evt. ljar-filer og jmange.jar i sin classpath. Options angives
comamnd line. Og man skal nok lige fedte lidt med directory struktur
og pakke navne inden det virker.

Ovenstående bruger struktur:

src\pakke\*.java med source
temp\pakke\*.class med ikke-obfuscated
pakke\*.class med obfuscated

Spørg igen hvis du er i tvivl.
Avatar billede aslan Nybegynder
22. august 2003 - 11:39 #9
Jamen jeg forsøger ihærdigt.. Hvis jeg kun havde en jar fil med navnet AslanRegnskab.jar og den indeholdt en mappe struktur,class filer,en enkelt .jar fil og diverse gif filer hvordan skulle jeg så execute?
Avatar billede arne_v Ekspert
22. august 2003 - 11:54 #10
JMangle kører ikke på jar-filer.

D.v.s. at det er:
  compile
  obfuscate
  pack

Evt.:
  compiler
  pack
  unpack
  obfuscate
  pack
Avatar billede arne_v Ekspert
22. august 2003 - 12:04 #11
Jeg prøver lige at lave et fuldt eksempel !
Avatar billede arne_v Ekspert
22. august 2003 - 12:15 #12
Et simpelt eksempel uden hver pak eller udpak (det regner jeg med at du har
100% styr på).

C:\e>dir/s
Volume in drive C is ARNEPC2_C
Volume Serial Number is E09B-1D63

Directory of C:\e

22/08/2003  12:13      <DIR>          .
22/08/2003  12:13      <DIR>          ..
22/08/2003  12:09      <DIR>          build
22/08/2003  12:08                  203 build.bat
22/08/2003  12:09      <DIR>          obfu
22/08/2003  12:13                  129 obfu.map
22/08/2003  12:02      <DIR>          src
22/08/2003  12:13                  135 test.bat
              3 File(s)            467 bytes

Directory of C:\e\build

22/08/2003  12:09      <DIR>          .
22/08/2003  12:09      <DIR>          ..
22/08/2003  12:09      <DIR>          pakke
              0 File(s)              0 bytes

Directory of C:\e\build\pakke

22/08/2003  12:09      <DIR>          .
22/08/2003  12:09      <DIR>          ..
22/08/2003  12:13                  624 Klasse.class
22/08/2003  12:13                  349 Main.class
              2 File(s)            973 bytes

Directory of C:\e\obfu

22/08/2003  12:09      <DIR>          .
22/08/2003  12:09      <DIR>          ..
22/08/2003  12:09      <DIR>          pakke
              0 File(s)              0 bytes

Directory of C:\e\obfu\pakke

22/08/2003  12:09      <DIR>          .
22/08/2003  12:09      <DIR>          ..
22/08/2003  12:13                  568 Klasse.class
22/08/2003  12:13                  303 Main.class
              2 File(s)            871 bytes

Directory of C:\e\src

22/08/2003  12:02      <DIR>          .
22/08/2003  12:02      <DIR>          ..
22/08/2003  12:06      <DIR>          pakke
              0 File(s)              0 bytes

Directory of C:\e\src\pakke

22/08/2003  12:06      <DIR>          .
22/08/2003  12:06      <DIR>          ..
22/08/2003  12:06                  169 Klasse.java
22/08/2003  12:05                  132 Main.java
              2 File(s)            301 bytes

    Total Files Listed:
              9 File(s)          2,612 bytes
              20 Dir(s)  8,228,597,760 bytes free

C:\e>type build.bat
javac -classpath \SUNJava\j2sdkee1.3.1\lib\j2ee.jar -d build src\pakke\*.java
java -classpath build;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar;\JMangle\jmangle.jar jm
angle -public +map obfu.map build\pakke obfu
C:\e>type test.bat
java -classpath build;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar pakke.Main
java -classpath obfu;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar pakke.Main
Avatar billede arne_v Ekspert
22. august 2003 - 12:15 #13
C:\e>type src\pakke\Main.java
package pakke;

public class Main {
  public static void main(String[] args) throws Exception {
      Klasse.test();
  }
}

C:\e>type src\pakke\Klasse.java
package pakke;

public class Klasse {
  static void test() {
      int a = 1;
      int b = 2;
      System.out.println(a + " " + b + " = " + (a + b));
  }
}
Avatar billede arne_v Ekspert
22. august 2003 - 12:16 #14
C:\e>java -classpath build;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar;\JMangle\jmangle.j
ar jmangle -public +map obfu.map build\pakke obfu
Jmangle 1.0 for jdk1.1
Copyright 1998 Russell Leighton, all rights reserved
Please send comments to jmangle@elegant-software.com

Your class files have been modified.
Extensive testing of your program is recommended.

C:\e>test

C:\e>java -classpath build;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar pakke.Main
1 2 = 3

C:\e>java -classpath obfu;\SUNJava\j2sdkee1.3.1\lib\j2ee.jar pakke.Main
1 2 = 3
Avatar billede arne_v Ekspert
22. august 2003 - 12:17 #15
Koden er jo noget "simpel", men god nok efter min mening til at illustrere.

Jeg bruger ikke j2ee.jar men det er kun for at demo'e brug af eksterne jar-filer.
Avatar billede arne_v Ekspert
22. august 2003 - 12:20 #16
Decompile i build:

// Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov  Date: 22/08/2003 12:20:07
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name:  Main.java

package pakke;


// Referenced classes of package pakke:
//            Klasse

public class Main
{

    public Main()
    {
    }

    public static void main(String args[])
        throws Exception
    {
        Klasse.test();
    }
}

// Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov  Date: 22/08/2003 12:20:28
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name:  Klasse.java

package pakke;

import java.io.PrintStream;

public class Klasse
{

    public Klasse()
    {
    }

    static void test()
    {
        int i = 1;
        byte byte0 = 2;
        System.out.println(i + " " + byte0 + " = " + (i + byte0));
    }
}
Avatar billede arne_v Ekspert
22. august 2003 - 12:21 #17
Decompile i obfu:

// Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov  Date: 22/08/2003 12:21:15
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)

package pakke;


// Referenced classes of package pakke:
//            Klasse

public class Main
{

    public Main()
    {
    }

    public static void main(String args[])
        throws Exception
    {
        Klasse.jm0();
    }
}

// Decompiled by DJ v3.2.2.67 Copyright 2002 Atanas Neshkov  Date: 22/08/2003 12:21:00
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3)

package pakke;

import java.io.PrintStream;

public class Klasse
{

    public Klasse()
    {
    }

    static void jm0()
    {
        int i = 1;
        byte byte0 = 2;
        System.out.println(i + " " + byte0 + " = " + (i + byte0));
    }
}
Avatar billede arne_v Ekspert
22. august 2003 - 12:22 #18
Vi ser at det eneste ikke public navn test er blevet obfu'et til jm0.

obfu.map indeholder da også:

Symbol Map:
pakke.Main:
    Fields:
    Methods:

pakke.Klasse:
    Fields:
    Methods:
        pakke.Klasse.test    ->    pakke.Klasse.jm0
Avatar billede aslan Nybegynder
27. august 2003 - 23:04 #19
Jamen jeg kan ikke få den til det. Lad mig forklare nærmere. Jeg har i mappen C:\Documents and Settings\aslan1\Skrivebord\jmangle en mappe som hedder aslan med java filer. Denne mappes struktur seer sådan ud:

aslan
    bilag(mappe)
      gui(mappe)
        *.java
      model(mappe)
        *.java
      sql(mappe)
        *.java
    kartotek(mappe)
      gui(mappe)
        *.java
      model(mappe)
        *.java
      sql(mappe)
        *.java
    kontoplan(mappe)
      gui(mappe)
        *.java
      model(mappe)
        *.java
      sql(mappe)
        *.java
    profil(mappe)
      gui(mappe)
        *.java
      StartProfil.java
    vare(mappe)
      gui(mappe)
        *.java
      model(mappe)
        *.java
      sql(mappe)
        *.java
    hsqldb.jar
    SystemStart.java
 
I jmangle mappen har jeg oxo selve jmangle.jar. Hvordan gør jeg så? Hvis vi kan få det til at virke får du 100 points oveni i de 100 i forvejen..
Avatar billede arne_v Ekspert
27. august 2003 - 23:19 #20
Lad os prøve.

Jeg vil gerne at vi lige først prøver med en enkelt mappe.

Når det virker så forsøger vi at få alle mapperne til at virke.

Jeg antager at dine pakker hedder bilag.gui, bilag.model etc. (hvis
de hedder aslan.bilag.gui, aslan.bilag.model skal det være en lille
bitte smule anderledes).

Du står i jmangle directory.

Først compiler vi (fordi jmangle kører på class filer ikke på java filer).

javac -classpath aslan;hsqldb.jar aslan\bilag\gui\*.java

så skulle der gerne være både java og class filer i det directory.

Så forsøger vi at mangle:

java -classpath aslan;hsqldb.jar;jmangle.jar jmangle +map obfu.map aslan\bilag\gui obfuversion

så skulle der gerne være et directory obfuversion\bilag\gui med
obfuscatede class-filer i.

Prøv og se om du kan få det til at køre.
Avatar billede aslan Nybegynder
27. august 2003 - 23:33 #21
I første commando javac -classpath aslan;aslan\bilag\gui\*.java giver den denne fejl

C:\Documents and Settings\aslan1\Skrivebord\jmangle>javac -classpath aslan;aslan
\bilag\gui\*.java
javac: no source files
Usage: javac <options> <source files>
where possible options include:
  -g                        Generate all debugging info
  -g:none                  Generate no debugging info
  -g:{lines,vars,source}    Generate only some debugging info
  -nowarn                  Generate no warnings
  -verbose                  Output messages about what the compiler is doing
  -deprecation              Output source locations where deprecated APIs are us
ed
  -classpath <path>        Specify where to find user class files
  -sourcepath <path>        Specify where to find input source files
  -bootclasspath <path>    Override location of bootstrap class files
  -extdirs <dirs>          Override location of installed extensions
  -d <directory>            Specify where to place generated class files
  -encoding <encoding>      Specify character encoding used by source files
  -source <release>        Provide source compatibility with specified release
  -target <release>        Generate class files for specific VM version
  -help                    Print a synopsis of standard options


Jeg har ikke taget hsqldb.jar med da den ikke behøver at beskyttes....
Avatar billede arne_v Ekspert
27. august 2003 - 23:36 #22
Det er ikke:

javac -classpath aslan;aslan\bilag\gui\*.java

men:

javac -classpath aslan aslan\bilag\gui\*.java

(nu uden hsqldb.jar - som ikke er med for at blive beskyttet men
for at vi har referancerne til den OK)
Avatar billede aslan Nybegynder
27. august 2003 - 23:41 #23
Når jeg forsøger således: javac -classpath aslan aslan\bilag\gui\*.java

Får jeg denne fejl:

C:\Documents and Settings\aslan1\Skrivebord\jmangle>javac -classpath aslan aslan
\bilag\gui\*.java
aslan\kontoplan\funktion\ConnectDB.java:6: package org.hsqldb does not exist
import org.hsqldb.*;
^
1 error

C:\Documents and Settings\aslan1\Skrivebord\jmangle>

Jeg kan hurtig få netbeans til at lave alle class filerne hvis det er?
Avatar billede arne_v Ekspert
27. august 2003 - 23:43 #24
Så skal den med:

javac -classpath aslan;hsqldb.jar aslan\bilag\gui\*.java

(men hvis du builder alle class filerne med NetBeans så kan du raskt
gå videre til selve jmangle processen)
Avatar billede aslan Nybegynder
27. august 2003 - 23:52 #25
Jamen det lykkedes...den skriver:

C:\Documents and Settings\aslan1\Skrivebord\jmangle>java -classpath aslan;hsqld
.jar;jmangle.jar jmangle +map obfu.map aslan\bilag\gui obfuversion
Jmangle 1.0 for jdk1.1
Copyright 1998 Russell Leighton, all rights reserved
Please send comments to jmangle@elegant-software.com
Creating: C:\Documents and Settings\aslan1\Skrivebord\jmangle\obfuversion

Your class files have been modified.
Extensive testing of your program is recommended.

C:\Documents and Settings\aslan1\Skrivebord\jmangle>


Hvordan får jeg så det hele med?
Avatar billede arne_v Ekspert
28. august 2003 - 00:00 #26
Jeg har en gammel .bat fil som antyder at det er så simpelt som:

java -classpath aslan;hsqldb.jar;jmangle.jar jmangle +map obfu.map aslan obfuversion
Avatar billede arne_v Ekspert
28. august 2003 - 00:01 #27
Husk iøvrigt lige at teste om du er tilfreds med ofuscatingen.

(jeg formoder at du har jad eller djdec installeret)
Avatar billede aslan Nybegynder
28. august 2003 - 00:06 #28
Det gør jeg imorgen... jeg siger tak og opretter lige et nyt spørgsmål så du kan få resten af points. Du er som sædvanligt til stort hjælp arne :-) tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester