yguard是一个很好用的java类文件模糊器(obfuscation)。它和ant配合使用,需要修改ant的build.xml文件,把它们集成到一起。需要把生成的class文件打包成jar文件,然后对jar文件进行模糊化。
yguard可以完成以下模糊化工作:
-模糊化方法(函数)中的变量名
-模糊化类的成员变量名
-模糊化方法名
-模糊化类名
-模糊化包路径
-去除class文件的调试信息等等
其中,对模糊化类的成员变量名、方法名、类名,可以分别设置保护级别。设置的修饰符和java的修饰(访问控制)符一致,包括:
-public
-protected
-private
-none:表示对名称不进行模糊化。注意,本修饰符是yguard特有的,java中没有
以保护方法名为例
-public表示除了public的方法名不需要混淆外,模糊化其他所有的方法名(即:模糊化protected和private修饰的方法名);
-protected表示除了public和protected的方法名不进行混淆,其余的方法名都要进行模糊化(即:模糊化private修饰的方法名);
-private表示对方法名不进行混淆
-none表示对所有方法名均进行模糊化,包括public的方法名
保护级别在obfuscate部分通过如下参数设置(示例):
<expose>
<class classes="public" methods="public" fields="public">
</class>
</expose>
其中的参数说明如下:
-classes:设置类名保护级别
-methods:设置方法名保护级别
-fields:设置类的成员变量保护级别
最新版本及详情请访问<a href="http://www.yworks.com/en/products_yguard_about.htm" target="_blank">yGuard官方网站</a>
以下是一个配置样例:
<?xml version="1.0"?>
<project name="ee2ee" default="obfuscate" basedir=".">
<target name="init">
<!-- The root directory of the workspace -->
<property name="ee2ee.home" value="."/>
<!-- The destination directory for the build -->
<property name="ee2ee.build" value="${ee2ee.home}/build"/>
<!-- The source directory for the build -->
<property name="ee2ee.src" value="../"/>
<!-- The destination directory for all the compiled classes. -->
<property name="ee2ee.bin_dir" value="${ee2ee.build}/classes"/>
<!-- The classpath used for building the workspace. -->
<property name="ee2ee.classpath" value="../libs/j2ee.jar;${ee2ee.home}/libs/log4j-1.2.6.jar"/>
<!-- The classpath used for building the workspace. -->
<property name="jar" value="test.jar"/>
<!-- The classpath used for building the workspace. -->
<property name="obfjar" value="test_obf.jar"/>
<!-- The classpath used for building the workspace. -->
<property name="obflog" value="test_obflog.xml"/>
<!-- The root directory of web server context -->
<property name="webserver.home" value="D:\projects\exam\website\WEB-INF\classes"/>
</target>
<target name="compile" depends="init">
<mkdir dir="${ee2ee.bin_dir}"/>
<javac srcdir="${ee2ee.src}"
destdir="${ee2ee.bin_dir}"
classpath="${ee2ee.classpath}"
includes="com/ee2ee/*.java"
debug="on"
encoding="gb2312"
failonerror="true"/>
</target>
<target name="components" depends="init">
</target>
<target depends="jar" name="obfuscate">
<taskdef name="obfuscate" classname="com.yworks.yguard.ObfuscatorTask"
classpath="yguard.jar"/>
<!-- the following can be adjusted to your needs -->
<obfuscate mainclass="com.ee2ee.Obtest" logfile="${obflog}"
replaceclassnamestrings="true">
<property name="error-checking" value="pedantic"/>
<inoutpair in="${jar}" out="${obfjar}"/>
<expose>
<class classes="none" methods="none" fields="none">
</class>
</expose>
</obfuscate>
</target>
<!-- create .jar -->
<target name="jar" depends="compile">
<jar jarfile="${jar}"
basedir="${ee2ee.bin_dir}"
includes="com/ee2ee/*">
<fileset dir="${ee2ee.src}">
<include name="com/ee2ee/**/*.properties"/>
</fileset>
</jar>
</target>
<!-- run project -->
<target name="run" depends="obfuscate">
<java fork="true">
<classpath>
<pathelement location="${obfjar}"/>
</classpath>
</java>
</target>
<target name="clean" depends="init">
<delete dir="${ee2ee.build}"/>
</target>
<target name="copy" depends="init">
<copy todir="${webserver.home}">
<fileset dir="${ee2ee.bin_dir}">
<include name="com/**/*.class"/>
</fileset>
</copy>
</target>
<!--<target name="core" depends="compile, components"/>-->
<target name="core" depends="compile"/>
</project>