2009-06-10 2 views
3

Ich bin sehr neu zu Verschleierung und habe nicht viel Erfahrung mit Ameisen. Komm, jemand bietet mir eine Möglichkeit, eine normale Java-Anwendung mit ProGuard (oder einem anderen Open-Source-Obfuscator) zu verschleiern. Zurzeit verwende ich NetBeans 6.5.1 und sehe nur die Verschleierung, wenn ich eine JAVA ME erstelle, und nicht eine Java-Anwendung wie ich. Ich habe mir http://wiki.netbeans.org/DevFaqModuleObfuscation angesehen, aber verstehe nicht, was sie sagen.Netbeans Obfuscation

Danke für jede Eingabe.

+0

Welches Stück dieser Seite verstehst du nicht? Verstehst du Ant? –

Antwort

9

Die FAQ, auf die Sie verweisen, dient zum Verschleiern von NetBeans-Modulen. Dies ist ein recht komplizierter Anwendungsfall, so nehme ich an, dass es nicht die regelmäßige Anwendung ist Sie interessiert sind

Ganz kurz:. Der Verschleierungsprozess die Namen von Klassen, Methoden und Feldern wechselt zu erschweren um Ihre Anwendung zurückzuentwickeln.

Dies verursacht einige Probleme:

  • die JVM Ihre Anwendung erfordert eine public static void main (String args []) in einer öffentlichen Klasse haben, so müssen Sie proguard sagen nicht, diesen Namen zu ändern
  • , wenn Sie irgendeine Art von Selbstprüfung verwenden, müssen Sie die entsprechenden Namen schützen
  • other cases geändert wird, wie im Handbuch
erklärt

Additionall y, proguard entfernt unbenutzten Code. Wenn Sie Klassen verwenden, die nicht direkt referenziert werden, müssen Sie auch -keep.

Die Proguard-Dokumentation enthält eine example zur Verschleierung einer einfachen Anwendung. Hier ist das Beispiel erläuterte (mit einigen weniger verwirrenden Namen):

-injars  application.jar  # obfuscate all the classes in the named jars 
-outjars  obfuscated.jar   # save all the obfuscated classes to the named jar 
-libraryjars <java.home>/lib/rt.jar # these are all the libraries that the application uses 
-printmapping obfuscation.map  # save a file linking the original names to the obfuscated ones 
            # this helps understanding stack traces from the obfuscated application 

# we need to keep our main class and the application entry point 
-keep public class com.mycompany.Application { 
    public static void main(java.lang.String[]); 
} 

Sofern Sie -dontshrink angeben, proguard entfernen wird jeder Code nicht eingehalten oder nicht referenziert von jedem Code gehalten. In der obigen Konfiguration wird also jeder Code entfernt, der nicht (indirekt) von der Hauptmethode referenziert wird.

Proguard enthält eine Ant-Task, die zur Integration in den NetBeans-Workflow verwendet werden kann. Ich würde vorschlagen, zuerst manuell, ohne Ant zu experimentieren, da dies einen der komplizierenden Faktoren aus dem Prozess nimmt. Erstellen Sie Ihr Application-Jar mit NetBeans und versuchen Sie dann, mit der obigen Konfiguration zu verschleiern (falls nötig, ausgearbeitet). Stellen Sie sicher, die verschleierte Anwendung zu testen, da unzählige Dinge schief gehen können. Sobald Sie eine funktionierende Proguard-Konfiguration haben, versuchen Sie, eine Ant-Task zu Ihrer Build-Datei hinzuzufügen, um den Verschleierungsprozess in NetBeans zu automatisieren.

+0

Danke für die Hilfe, aber ich erhalte die folgende Warnung: javax.swing.JDialog: nicht geordnete Klasse oder Schnittstelle javax.swing.TransferHandler $ HasGetTransferHandler Warnung finden: javax.swing.JWindow: nicht Super finden oder Schnittstelle javax.swing.TransferHandler $ HasGetTransferHandler Warnung: javax.swing.JComponent: kann keine Oberklasse oder Schnittstelle finden javax.swing.TransferHandler $ HasGetTransferHandler Warnung: javax.swing.JFrame: kann keine Oberklasse oder Schnittstelle javax finden. swing.TransferHandler $ HasGetTransferHandler Ich habe rt.jar eingeschlossen, das TransferHandler $ HasGetTransferHandler.class hat. Irgendwelche Ideen? – Jon

+0

Es ist in der Anleitung: '-dontskipnonpubliclibraryclasses': http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass – jackrabbit

2

Eine andere Lösung als -dontskipnonpubliclibraryclasses ist die Verwendung des gleichen JDK zum Ausführen von Proguard, das Sie zum Kompilieren des Codes in der JAR-Datei verwendet haben.

Zum Beispiel statt java -jar

Verwendung /usr/local/jdk1.5.0/bin/java -jar ../proguard3 ../proguard3.8/lib/proguard.jar. 8/lib/proguard.jar

Jacob