与ant结合使用yguard

昨天老大要我搞个代码混淆器,发了yguard的官网我http://www.yworks.com/en/products_yguard_about.htm (主页)http://www.yworks.com/products/yguard/yguard_ant_howto.html#field (文档),一看全E文凉了半截,google一下还是出来了不少示例:http://blog.csdn.net/jiulong/archive/2006/02/07/593426.aspx (中文写的示例)写的很清楚,yguard要结合ant使用我从未用过ant 下载,安装,配置,调试搞了一上午 没劲 一整天也就把 网页上的教程调试成功....... 我太笨了 今天上午又研究他的脚本 终于把他搞定了

 

ant的使用请关注另一篇文章

 

你可以把yguard.jar放在ant的lib目录下,也可以放在build.xml文件同目录下,这样ant就能使用到yguard

 

第一种情况:当需要混淆的代码的包占少数的时候(意思是少量包下的对象需要深度混淆),用下面的脚本比较简单;

 

脚本如下:

 

 

 

 

yguard示例脚本:

<!--auth:zhaohanjiang


date:2009-04-16


-->


<?xml version="1.0" encoding="UTF-8"?>
<!--这里比较重要的定义了ant的缺省任务default="yguard"-->


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


    <target name="init">
<!--这里定义了要混淆的jar的名字--->


    <property name="project_name" value="wherever"/>
<!-- 源码目录好像没什么用--->


    <property name="srcDir" value="."/>
<!-- 这里是编译后的class文件文件夹位置但是我使用的是编译好的jar所以没用--->


    <!-- 


 <property name="classDir" value="classes"/>
<!-- 这里是新建一个文件夹如上理由无用--->


 <mkdir dir="${classDir}"/>


 -->
<!-- 这里是定义混淆jar-->
    <property name="jar" value="${project_name}.jar"/>
<!--混淆完成jar-->
    <property name="obfjar" value="${project_name}_obf.jar"/>
<!-- 重命名日志renamelog-->


    <property name="renamelog" value="${project_name}_renamelog.xml"/>
<!-- 压缩日志shrinklog-->


    <property name="shrinklog" value="${project_name}_shrinklog.xml"/>
<!-- 混淆jar的启动类,意思不能混淆-->


    <property name="mainclass" value="wherever.sysframe.bootup.SicsControl"/>


    
<!-- 混淆任务--->


    </target>
<!-- depends="init"意思是运行本任务时候要先运行init任务--->


    <target name="yguard" depends="init">
<!-- 这里是启动yguard进行混淆--->


      <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="yguard.jar"/>


   <yguard>


<!-- 这里是定义要混淆的jar要用的类库--->


  <externalclasses>


    <pathelement location="lib/j2ee1.4.jar"/>


    <pathelement location="lib/oracle9i12.zip"/>


    <pathelement location="lib/sicsaux.jar"/>


    <pathelement location="lib/tools.jar"/>


  </externalclasses>
<!-- 定义混淆输入输出jar指向命名变量-->


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


<!-- 压缩功能;定义日志-->


        <shrink logfile="${shrinklog}">


          <keep>
<!-- 压缩规则 表示所有的>=protected访问修饰符的class,method,field 不压缩-->


            <class classes="protected"


            methods="protected" fields="protected">


     <patternset>
<!-- 这里一定要注意:在定义范围的时候 你用了include 就一定要用exclude 反之用了exclude 也一定要用include 意思包含和不包含一定要写的清清楚楚 否则会出现稀奇古怪的事情-->
<!-- 压缩范围 include="**.*"意思是不包含所有包下面的类-->    
   <include name="**.*"/>
<!-- exclude 意思是包含命名中的包下的类 在定义包范围时有很多种规则这里不一一列明-->


    <exclude name="wherever.lightrpc.engine.*"/>


       <exclude name="wherever.minihttp.engine.*"/>


    <exclude name="wherever.postfile.engine.*"/>


    <exclude name="wherever.proxydts.engine.*"/>


    <exclude name="wherever.sysframe.engine.*"/>


    <exclude name="wherever.xmessage.engine.*"/>


     </patternset>


   </class>


          </keep>


        </shrink>


 
<!-- 混淆功能;这里是说混淆jar的main类不需要重命名既混淆-->


   <rename mainclass="${mainclass}" logfile="${renamelog}"> 


        <rename logfile="${renamelog}">
<!-- 这个不知道什么意思 其他同上-->


          <property name="error-checking" value="pedantic"/>


          <keep>


            <class classes="protected"


            methods="protected" fields="protected">


     <patternset>


    <include name="**.*"/>


    <exclude name="wherever.lightrpc.engine.*"/>


       <exclude name="wherever.minihttp.engine.*"/>


    <exclude name="wherever.postfile.engine.*"/>


    <exclude name="wherever.proxydts.engine.*"/>


    <exclude name="wherever.sysframe.engine.*"/>


    <exclude name="wherever.xmessage.engine.*"/>


     </patternset>


   </class>


          </keep>


        </rename>


      </yguard>


    </target>


  </project>


  <!-- end file build.xml -->








第二种情况:当需要混淆的代码占大多数时候(意思是多数包下的对象需要深度混淆),用下面的脚本比较简单;





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


  <!-- file build.xml in your project root directory -->


  <!-- Ant build script for yfiles -->


  <!-- The java based Ant tool is available from -->


  <!-- http://jakarta.apache.org/ant -->


  <!-- This file demonstrates the use of the yGuard byte -->


  <!-- code obfuscator from yWorks Gmbh -->


  <!-- yGuard can be downloaded from -->


  <!--- http://www.yworks.com/products/yguard -->


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


    <!-- edit the following lines to your needs -->


    <target name="init">


    <property name="project_name" value="wherever3.0"/>


    <property name="srcDir" value="."/>


    <!-- 


	<property name="classDir" value="classes"/>


	<mkdir dir="${classDir}"/>


	-->


    <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="wherever.sysframe.bootup.SicsControl"/>


    


    </target>





    <target name="yguard" depends="init">


      <taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="yguard.jar"/>


	  <yguard>


		<externalclasses>


		  <pathelement location="lib/j2ee1.4.jar"/>


		  <pathelement location="lib/oracle9i12.zip"/>


		  <pathelement location="lib/sicsaux.jar"/>


		  <pathelement location="lib/tools.jar"/>


		</externalclasses>


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





        <shrink logfile="${shrinklog}">


          <keep>


            <class classes="protected" methods="protected" fields="protected">


			  <patternset>


				<include name="**.*"/>


			  </patternset>


			</class>


          </keep>


        </shrink>


	


		<!--  <rename mainclass="${mainclass}" logfile="${renamelog}"> -->


        <rename logfile="${renamelog}" mainclass="${mainclass}">


          <property name="error-checking" value="pedantic"/>


          <keep>


           <class classes="protected" methods="protected" fields="protected">


			  <patternset>


				<include name="wherever.sysframe.concept.*"/>


			    <include name="wherever.sysframe.provider.*"/>


				<include name="wherever.sysframe.system.*"/>


				<include name="wherever.sysframe.bootup.SicsControl"/>


			  </patternset>


			</class>


          </keep>


        </rename>


      </yguard>


    </target>


  </project>


  <!-- end file build.xml --> 


 

yguard有一个特殊性,是针对jar进行混淆的jar包里的文件名是区分大小写的,所以当你把jar包解压的时候在window系统下会有文件覆盖的现象,所以最好是不要解压jar包。

 

脚本中带的注释应该够详细了,要说的就是自学真的很费劲,但是只要你够仔细,够毅力,可以无视之,呵呵

 还有就是关于泛型 告诉你yguard是支持泛型的 也支持反射 但是我在测试的时候有点问题 官方文档也解决方法 要说的是yguard的混淆功能强大的很,混淆规则也很多能满足多种业务,这里完全是一时之需,希望哪位能把官方文档翻译过来,这样学习起来也轻松些。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值