【问题标题】:Working maven obfuscate example工作 maven 混淆示例
【发布时间】:2014-01-22 06:38:17
【问题描述】:

我只想混淆简单的 maven java 应用程序。我使用 maven-proguard-plugin。必须对所有类 main/java 进行混淆处理。我尝试了不同的配置,但没有运气。最后是:

    <build>
    <plugins>
        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.0.6</version>
            <dependencies>
                <dependency>
                    <groupId>net.sf.proguard</groupId>
                    <artifactId>proguard-base</artifactId>
                    <version>4.10</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
            <executions>
               <execution>
                   <phase>package</phase>
                   <goals><goal>proguard</goal></goals>
               </execution>
            </executions>
            <configuration>
                <proguardVersion>4.10</proguardVersion>
                <options>
                    <option>-keep class *{*;}</option>
                </options>
                <libs>
                    <lib>${java.home}/lib/rt.jar</lib>
                </libs>
            </configuration>
        </plugin>
    </plugins>
</build>

result - 所有类都存在于目标 jar 中,但没有被混淆,jad 可以很好地反编译它。如何正确混淆? 无法理解 - 只是混淆所有来源都是非常罕见的任务?所有其他插件都像魅力一样开箱即用。为什么我必须在这个中输入一些奇怪的选项?我已经花了一天时间。我想要约定优于配置! :)

【问题讨论】:

    标签: maven obfuscation proguard


    【解决方案1】:

    Maven 真是太棒了:)。你可以做出你想要的,甚至不明白的,你想要的。在我阅读the introduction 之后,我明白这是一个愚蠢的问题。保持参数非常重要。这里传入不能更改的公共方法。当然插件不能自己理解你打算使用什么方法。正确配置:

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.6</version>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>4.10</version>
                    </dependency>
                </dependencies>
                <executions>
                   <execution>
                       <phase>package</phase>
                       <goals><goal>proguard</goal></goals>
                   </execution>
                </executions>
                <configuration>
                    <proguardVersion>4.10</proguardVersion>
                    <options>
                        <option>-keep public class myapp.Main{public static void main(java.lang.String[]);}</option>
                    </options>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    【讨论】:

    • 如果我们不希望任何内容保持不变,那么 keep 参数应该是什么?我们不能跳过选项。
    • 当我尝试运行它时出现错误(不支持的类版本号 [52.0](最大 51.0,Java 1.7)))
    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2012-09-29
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多