我对混淆非常陌生,也没有太多使用ant的经验。请给我提供一种用ProGuard (或任何其他开放源码混淆器)混淆常规Java应用程序的方法。目前我使用的是NetBeans 6.5.1,只有当我创建一个JAVA,而不是像我这样的Java应用程序时,才能看到模糊处理能力。我看过http://wiki.netbeans.org/DevFaqModuleObfuscation,但不明白他们在说什么。
感谢您的任何意见。
发布于 2009-06-10 20:55:28
您指出的常见问题是为了混淆NetBeans模块。这是一个相当复杂的用例,所以我假设它不是您感兴趣的常规应用程序。
简而言之:混淆过程改变了类、方法和字段的名称,使得反向工程应用程序变得更加困难。
这会导致一些问题:
中的说明保护相关名称不会被禁用。
此外,proguard还剥离了未使用的代码。如果您有任何使用但未直接引用的类,则还必须对它们执行-keep操作。
proguard文档包含了一个如何混淆简单应用程序的example。以下是解释的示例(使用一些不太容易混淆的名称):
-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[]);
}除非您指定-dontshrink,否则proguard将从任何保留的代码中删除任何未保留或未引用的代码。因此,在上面的配置中,任何未被main方法(间接)引用的代码都将被删除。
Proguard包含一个可用于与NetBeans工作流集成的Ant任务。我建议先在没有Ant的情况下手动进行实验,因为这会消除这个过程中的一个复杂因素。使用NetBeans构建您的应用程序jar,然后尝试使用上面的配置进行模糊处理(如有必要,请进行补充)。确保测试模糊的应用程序,因为无数的事情可能会出错。一旦拥有了有效的proguard配置,就可以尝试将Ant任务添加到构建文件中,以在NetBeans中自动执行混淆过程。
发布于 2009-09-23 12:10:58
-dontskipnonpubliclibraryclasses之外的另一种解决方案是使用与编译JAR文件中的代码相同的JDK来运行proguard。
例如,而不是java -jar ../proguard3.8/lib/proguard.jar
使用/usr/local/jdk1.5.0/bin/java -jar ../proguard3.8/lib/proguard.jar
雅各布
https://stackoverflow.com/questions/977144
复制相似问题