如何快速混淆Java代码?

Yat*_*oel 18 java obfuscation proguard

如何快速混淆代码.我有一个非常小的Java应用程序,我想将混淆的代码传递给我的客户端.我听说过很多关于ProGuard混淆代码并已下载但却不知道如何混淆我的"abc.jar"文件.

我查看了它的网站,但它包含了很多要阅读的资料.我不需要沉重的混淆.我只需要一个混淆,只需将变量,方法和类的名称更改为一些不可读的名称.我知道ProGuard也提供了所有这些功能.

Q1.所以任何人都可以告诉我一些简单的混淆器或一些简单的步骤来使用proguard,这样我就可以输入"abc.jar"并输出"obfuscate_abc.jar"或类似的东西.

Q2.还有一件事,因为我的Java程序使用外部库,所以我是否还需要对这些库进行模糊处理?

Q3.是否有任何Eclipse或NetBeans插件可用于此混淆?

我还听说我们应该保留映射表文件,以便将来我们可以通过在混淆时创建的映射表的帮助下首先进行去混淆来调试或编辑混淆的代码.

Q4.那么,还有一个问题是为什么我们需要与我们保持映射表?我们可以简单地保留未混淆的应用程序的副本,以便对其进行更改(如果将来需要).有没有理由保留我们的映射表文件?

Pas*_*ent 34

Q1.所以任何人都可以告诉我一些简单的混淆器或一些简单的步骤来使用proguard,这样我就可以输入"abc.jar"并输出"obfuscate_abc.jar"或类似的东西.

只是去ProGuard,它绝对是一个很好的工具(在这里推荐很多答案就像这个,这一个这个).

Q2.还有一件事,因为我的java程序使用外部库,所以我是否还需要对这些库进行模糊处理?

不需要恕我直言(甚至没有提到你可能没有).

Q3.是否有任何eclipse或netbeans插件可用于此混淆?

我宁愿建议使用Ant Taskproguard-maven-plugin.如果需要,请参阅有关maven插件的此问题.

Q4.所以,还有一个问题是为什么我们需要与我们保持映射表.我们可以简单地保留未混淆的应用程序的副本,以便对其进行更改(如果将来需要).有没有理由保留我们的映射表文件?

是的,要"翻译"堆栈跟踪.

  • 轻微的拼写错误,但是'ProGard`让我浪费我不知道看枪架多久.您的回答可能还有利他林的处方. (4认同)

Mic*_*ter 13

我从头开始尝试这个.它应该让你开始.我认为关键是要了解配置文件中的"保留选项".

使用此代码:

import java.util.*;

public class Example {

    public static void main(String... args) {
        Example ex = new Example();
        ex.go();
    }

    public void go() {
        String[] strings = { "abc", "def", "ijk" };
        for (String s : strings) {
            System.out.println(s);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我创建了一个Example.jar.我从ProGuard lib目录复制了proguard.jar,并运行了这个命令行

java -jar proguard.jar @myconfig.pro
Run Code Online (Sandbox Code Playgroud)

myconfig.pro包含的位置:

-injars Example.jar
-outjars ExampleOut.jar
-libraryjars <java.home>/lib/rt.jar

-keep public class Example {
    public static void main(java.lang.String[]);
}
Run Code Online (Sandbox Code Playgroud)

这将生成ExampleOut.jar,它包含相同的功能并进行模糊处理(使用JAD验证).请注意,我没有使用清单,因此为了测试功能,我解开并测试了该类.罐子中的执行入口点留给读者.

"使用"部分列出了更多保留选项.