如何快速混淆Java代码?

2022-09-02 02:22:37

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

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

问题 1.所以任何人都可以告诉我,请一些简单的混淆器或一些简单的步骤来使用proguard,这样我就可以输入“abc.jar”,然后输出“obfuscate_abc.jar”或类似的东西。

问题 2.还有一件事,因为我的Java程序使用外部库,那么我是否应该也对这些库进行模糊处理?

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

我还听说,我们应该保留映射表文件,以便将来我们可以调试或编辑混淆代码,方法是首先借助在混淆时创建的映射表进行去模糊处理。

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


答案 1

问题 1.所以任何人都可以告诉我,请一些简单的混淆器或一些简单的步骤来使用proguard,这样我就可以输入“abc.jar”,然后输出“obfuscate_abc.jar”或类似的东西。

只要去ProGuard,它绝对是一个很好的工具(推荐在SO上的许多答案中,比如这个这个这个)。

问题 2.还有一件事,因为我的java程序使用外部库,所以我也应该对这些库进行模糊处理吗?

恕我直言,不需要(甚至没有提到你可能不这样做)。

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

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

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

是的,要“翻译”堆栈跟踪。


答案 2

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

使用此代码:

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);
        }
    }

}

我创建了一个示例.jar。我从ProGuard lib目录中复制了proguard.jar,并运行了此命令行

java -jar proguard.jar @myconfig.pro

其中 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[]);
}

这将生成 ExampleOut.jar其中包含相同的功能,并且经过模糊处理(使用 JAD 验证)。请注意,我没有使用清单,因此为了测试功能,我取消了对类的测试。jar 中的执行入口点留给读者。

“用法”部分列出了更多保留选项。


推荐