Java Netbeans混淆

Java Netbeans混淆,java,netbeans,obfuscation,Java,Netbeans,Obfuscation,我对模糊处理非常陌生,对ant没有太多经验。来吧,有人给我提供一种用ProGuard(或任何其他开源混淆器)混淆常规Java应用程序的方法。目前我使用的是NetBeans 6.5.1,只有在创建JAVA ME而不是像我这样的JAVA应用程序时才能看到模糊处理功能。我看过了,但不明白他们在说什么 感谢您的任何意见。您所指的常见问题是用于混淆NetBeans模块的。这是一个相当复杂的用例,所以我假设它不是您感兴趣的常规应用程序 非常简单:模糊处理过程会更改类、方法和字段的名称,从而使应用程序的逆向工

我对模糊处理非常陌生,对ant没有太多经验。来吧,有人给我提供一种用ProGuard(或任何其他开源混淆器)混淆常规Java应用程序的方法。目前我使用的是NetBeans 6.5.1,只有在创建JAVA ME而不是像我这样的JAVA应用程序时才能看到模糊处理功能。我看过了,但不明白他们在说什么


感谢您的任何意见。

您所指的常见问题是用于混淆NetBeans模块的。这是一个相当复杂的用例,所以我假设它不是您感兴趣的常规应用程序

非常简单:模糊处理过程会更改类、方法和字段的名称,从而使应用程序的逆向工程变得更加困难

这导致了一些问题:

  • JVM要求应用程序在公共类中具有公共静态void main(字符串args[]),因此必须告诉proguard不要更改此名称
  • 如果你使用任何形式的自省,你必须保护相关的名字不被更改
  • ,如手册中所述
此外,proguard会删除未使用的代码。如果您有任何已使用但未直接引用的类,您也必须保留它们

proguard文档包括如何混淆简单应用程序的示例。下面是解释的示例(使用一些不太容易混淆的名称):

-injars application.jar#混淆命名jar中的所有类
-outjars obfuscated.jar#将所有模糊化的类保存到命名的jar中
-libraryjars/lib/rt.jar#这些是应用程序使用的所有库
-printmapping obfuscation.map#保存一个文件,将原始名称链接到模糊的名称
#这有助于理解来自模糊化应用程序的堆栈跟踪
#我们需要保留我们的主类和应用程序入口点
-保留公共类com.mycompany.Application{
公共静态void main(java.lang.String[]);
}
除非您指定
-dontshrink
,否则proguard将删除任何未保留的代码或未从任何保留的代码中引用的代码。因此,在上述配置中,任何未被main方法(间接)引用的代码都将被删除


Proguard包含一个Ant任务,可用于与NetBeans工作流集成。不过,我建议先在没有Ant的情况下手动进行实验,因为这会消除过程中的一个复杂因素。使用NetBeans构建应用程序jar,然后尝试使用上述配置混淆(如有必要,请充实)。确保测试模糊的应用程序,因为有无数事情可能出错。一旦您有了一个工作的proguard配置,请尝试向构建文件中添加一个Ant任务,以自动化NetBeans中的模糊处理过程。

除了-dontskipnonpubliclibraryclasses之外的另一个解决方案是使用与编译JAR文件中的代码相同的JDK来运行proguard

例如,代替 java-jar../proguard3.8/lib/proguard.jar

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


雅各布

那一页的哪一部分你不明白?你了解Ant吗?谢谢你的帮助,但我得到了以下警告:javax.swing.JDialog:找不到超类或接口javax.swing.TransferHandler$HasGetTransferHandler警告:javax.swing.JWindow:找不到超类或接口javax.swing.TransferHandler$HasGetTransferHandler警告:javax.swing.JComponent:找不到超类或接口javax.swing.TransferHandler$HasGetTransferHandler警告:javax.swing.JFrame:找不到超类或接口javax.swing.TransferHandler$HasGetTransferHandler我包括了rt.jar,其中包含TransferHandler$HasGetTransferHandler.class。有什么想法吗?手册上有:
-dontskipnonpubliclibraryclasses
-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[]);
}