java - 在 Eclipse 中使用 yGuard 混淆库

标签 java eclipse ant obfuscation yguard

我目前正在开发自己的 Java 库以用于我办公室的其他应用程序,并且我正在探索混淆库本身的方法。

我正在使用 Eclipse Indigo,并使用 yGuard v2.3.0.1。

首先,我的 Java 代码:

package com.test.ObfuscateTest;

public class MainClass {

    private String secretClassVariable;

    public static void main(String[] args) {

    }

    protected void SecretMethod(String secretParameter) {

        secretClassVariable = secretParameter;
    }
}

将 yGuard 与以下 ANT 脚本结合使用,为我生成一个空的 JAR 文件:

<?xml version="1.0" encoding="UTF-8"?>

<project name="project" default="yguard" basedir=".">

    <target name="init">
        <property name="project_name" value="ObfuscateTest"/>
        <property name="srcDir" value="."/>
        <property name="classDir" value="classes"/>
        <property name="jar" value="${project_name}.jar"/>
        <property name="obfjar" value="${project_name}_obf.jar"/>
        <property name="renamelog" value="${project_name}_renamelog.xml"/>
        <property name="shrinklog" value="${project_name}_shrinklog.xml"/>
        <property name="mainclass" value="com.test.ObfuscateTest"/>
        <mkdir dir="${classDir}" />
    </target>


    <target depends="jar" name="yguard">
        <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="/Users/foo/Desktop/yguard-2.3.0.1/lib/yguard.jar"/>
        <!-- the following can be adjusted to your needs -->
        <yguard>

            <inoutpair in="${jar}" out="${obfjar}"/>

            <!-- don't let the obfuscator remove the "Deprecated" -->
            <!-- attributes from the .class file entries -->
            <attribute name="Deprecated"/>

            <shrink logfile="${shrinklog}">
                <keep>
                    <class classes="none" methods="protected" fields="none">
                            <patternset>
                              <include name="com.test.ObfuscateTest.*"/>
                            </patternset>
                          </class>
                </keep>
            </shrink>

            <rename mainclass="${mainclass}" logfile="${renamelog}">
                <keep>
                    <class classes="none" methods="protected" fields="none">
                            <patternset>
                              <include name="com.test.ObfuscateTest.*"/>
                            </patternset>
                          </class>
                </keep>
            </rename>

        </yguard>

    </target>

    <!-- compile -->
    <target name="compile" depends="init">
        <javac srcdir="${srcDir}" includes="com/test/ObfuscateTest/*.java" destdir="${classDir}">
        </javac>
    </target>

    <!-- create .jar -->
    <target name="jar" depends="compile">
        <jar jarfile="${jar}" basedir="${classDir}" includes="com/test/ObfuscateTest/*"/>
    </target>

    <!-- run project -->
    <target name="run" depends="yguard">
        <java classname="${mainclass}" fork="true">
            <classpath>
                <pathelement location="${obfjar}"/>
            </classpath>
        </java>
    </target>

    <!-- removes all that has been built -->
    <target name="clean" depends="init">
        <delete dir="${classDir}" includeEmptyDirs="true" />
    </target>
</project>

我可以请教一些关于我做错了什么的建议吗?

提前致谢!

最佳答案

收缩元素的用途不同。它指定 yguard 开始寻找依赖类的入口点。所有无法访问的类都将被删除。通常你只提供像这样的主要方法:

<shrink logfile="${shrinklog}">
  <keep>
    <method name="void main(java.lang.String[])" class="${mainclass}" />
  </keep>
</shrink>

关于java - 在 Eclipse 中使用 yGuard 混淆库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160938/

相关文章:

java - 使用 Java EE 开发 Web 应用程序可能会遇到哪些困难(如果有)?

java - 将引用的变量插入RequestMapping

java - 在 Android 模拟器 LibGDX 中运行应用程序时分辨率不正确

eclipse - 阻止 Eclipse 换行?

eclipse - 从 Eclipse 导出 WAR 文件时忽略 SVN 文件?

运行 java -jar 时出现 java.lang.ClassNotFoundException

java - 可序列化类错误

c - 无论如何,我不能在我的 Eclipse 中使用 fflush 来获得正确的控制台?

php - 使用 ant 脚本构建 PHP

java - 有人将 Ant4Eclipse 与 Project Lombok 一起使用过吗?