`
hanjiangit
  • 浏览: 185360 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

与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的混淆功能强大的很,混淆规则也很多能满足多种业务,这里完全是一时之需,希望哪位能把官方文档翻译过来,这样学习起来也轻松些。 

分享到:
评论
2 楼 masuweng 2018-02-26  
好好 
1 楼 dongbiying 2011-01-24  
  好!

相关推荐

    yGuard---java代码混淆工具

    你需要将yGuard.jar放置到与Ant构建文件`build.xml`相同的目录下,因为yGuard通常与Ant集成使用,通过Ant任务来执行混淆过程。 使用yGuard时,你需要在`build.xml`中添加相应的Ant任务,配置输入、输出路径以及混淆...

    yGuard支持库与ant使用样例

    在"yGuard支持库与ant使用样例"中,我们将探讨如何将yGuard与Apache Ant构建工具集成,以自动化混淆过程。Ant是一个基于Java的构建工具,它可以读取XML格式的构建文件(通常命名为build.xml),然后执行编译、测试、...

    Xdocle与Ant结合使用指南

    本文将深入探讨如何将Xdocle与Ant结合使用,以实现Java项目中的元数据注解处理和自动构建过程。Xdocle是一款强大的元数据驱动文档生成工具,而Ant则是一款广泛应用的开源构建工具。了解这两者并掌握它们的结合使用,...

    findbugs与ant结合

    要将 FindBugs 与 Ant 结合,首先确保你已经安装了 FindBugs 和 Ant。接下来,你需要在你的 Ant 构建脚本(通常为 build.xml)中添加 FindBugs 相关的任务。这通常包括以下几个步骤: 1. 引入 FindBugs 的 Ant 任务...

    yGuard:yWorks与Ant和Gradle一起使用的开源Java模糊处理工具-绘图专家

    警卫队 yGuard是一个开放源代码Java混淆工具。 有了yGuard它就像馅饼一样容易( :shortcake: ),以通过广泛的ant... 如果您的产品也使用yGuard ,并且您想将其添加到此列表中,请与我们联系。 发展 建造 要构建yG

    使用Java混淆工具yguard

    4. **Ant集成**:为了方便在项目中使用yguard,可以将其与Ant任务集成。具体操作是在Ant的构建脚本中添加yguard的任务定义,示例如下: ```xml &lt;taskdef name="yguard" classname="com.yworks.yguard.YGuardTask"&gt; ...

    Ant与Junit结合

    标题“Ant与JUnit结合”指的是在Java开发中如何利用Apache Ant构建工具与JUnit测试框架进行集成,以便自动化地运行单元测试。Apache Ant是一种基于XML的构建工具,它替代了传统的Makefile,为Java项目提供了构建、...

    ant工具使用指南ant工具使用指南

    本指南将深入探讨Ant工具的使用,帮助开发者高效地管理项目构建。 一、Ant概述 Ant是一个开源的Java构建工具,其设计灵感来源于Unix的Make工具。它通过XML配置文件(通常名为build.xml)来定义任务和目标,使得构建...

    ant1.7使用手册指南

    10. **Ant与持续集成**:Ant可以与各种持续集成工具(如Jenkins、Hudson、CruiseControl等)配合使用,实现自动化构建和测试。 11. **Ant与Maven的比较**:虽然两者都是Java构建工具,但它们的理念和应用场景有所...

    ANT安装与使用教程

    ANT安装与使用教程 ANT(Another Neat Tool)是一款基于Java的自动化构建工具,广泛应用于软件开发、测试和部署过程中。以下是ANT安装与使用教程,旨在帮助项目部署人员快速掌握ANT的安装和基本使用。 硬件环境 ...

    yguard(一款集成了ant的Java混淆器)

    * http://blog.163.com/eye_ziye/blog/static/2144710512013431035733/

    网络上搜集的Findbugs在Ant下的配置方法

    **Findbugs在Ant下的配置...总之,通过Ant与FindBugs的结合,开发者可以在构建过程中自动检测代码问题,提高代码质量和项目的稳定性。正确配置和使用FindBugs,能帮助你尽早发现并修复潜在的错误,减少后期维护的成本。

    yguard-2.6和yguard-2.3.0.1的jar包

    本文将深入探讨yguard的两个不同版本——2.6和2.3.0.1,并分析它们与不同JDK版本的兼容性。 首先,yguard-2.6版本是针对JDK 1.7设计的,这意味着它可以充分利用Java 7引入的新特性,如多线程改进、try-with-...

    Ant构建中使用JS脚本方法

    总结来说,Ant结合JavaScript脚本提供了一种强大的方式来定制和扩展构建过程,尤其适合处理项目中的特殊需求。通过熟练掌握这一技巧,开发者能够更有效地管理和自动化他们的Java项目,提高开发效率,减少手动操作...

    yguard-2.3.0.1

    在实际应用中,yGuard通常与Java的JAR打包工具结合使用。开发者首先将源代码编译成字节码,然后用yGuard进行混淆处理,最后再将混淆后的类文件打包成JAR或WAR文件,供部署和分发。这样,即使有人获取到这些打包文件...

    ant 使用指南-ant入门

    - Ant可以轻松地与JUnit等测试框架集成,也可以与其他构建工具(如Maven)协同工作。 9. **命令行使用和IDE集成** - Ant可以通过命令行调用,也可以集成到Eclipse、IntelliJ IDEA等IDE中,提供图形化的构建界面。...

    Junit+Jacoco+ant集成使用

    本文将详细介绍如何将JUnit和JaCoCo与Ant构建工具进行集成,以便在项目中实现自动化测试和覆盖率报告。 1. JUnit简介 JUnit是Java编程语言的一个开源测试框架,主要用于编写和运行基于JUnit注解的单元测试。它提供...

    Ant基本使用指南(入门教程)

    执行特定的目标可以使用目标名称,如`ant compile`来只执行名为`compile`的目标。如果未指定目标,Ant会执行默认目标。 Ant命令行有多种选项,例如: - `-help`显示帮助信息。 - `-quiet`降低输出信息量,保持安静...

    Ant参考教程,Ant使用指南,Ant全攻略

    "Ant全攻略.doc"可能涵盖了Ant与第三方工具的集成,比如Maven、Ivy等依赖管理工具,以及Eclipse、IntelliJ IDEA等IDE的集成。此外,它还可能讨论如何处理复杂的构建场景,如多模块项目、远程构建、持续集成等。 ...

Global site tag (gtag.js) - Google Analytics