当前位置:  技术问答>java相关

请介绍一下java 的混淆器的用法,如jade,joc等

    来源: 互联网  发布时间:2015-07-14

    本文导语:  谢谢了 | Java混淆编译器 最近试用了几个Java混淆器(Java Obfuscator),感觉没有一个完全另人满意的,于是想干脆自己写一个得了。翻了几页Java虚拟机规范之后突发奇想,别的混淆器都是在编译...

谢谢了

|
Java混淆编译器

最近试用了几个Java混淆器(Java Obfuscator),感觉没有一个完全另人满意的,于是想干脆自己写一个得了。翻了几页Java虚拟机规范之后突发奇想,别的混淆器都是在编译好的byte code上做文章,能不能从源码直接编译成经过混淆的class文件呢?就这样花了一个多星期的时间写了一个Java混淆编译器(Java Obfuscator Compiler)。

Q: 什么是混淆器?
A: 由于Java程序运行时是动态连接的,因此编译成的目标文件中包含有符号表,使得Java程序很容易被反编译,混淆器可以打乱class文件中的符号信息,使反向工程变得非常困难。

Q: 现有的混淆器有什么问题?
A: 现有的混淆器都是对编译好的class文件进行混淆,这样就需要编译和混淆两个步骤。并不是所有的符号都需要混淆,如果你开发的是一个类库,或者某些类需要动态装载,那些公共API就必须保留符号不变,这样别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,如果程序较大时配置工作变得很复杂,而程序一旦修改配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但我经历过混淆之后的程序运行出错的情况。

Q: Java混淆编译器是如何工作的?
A: Java混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留,不需要单独的配置。

Q: 如何安装和运行JOC?
A: 下载joc.jar (http://www.apusic.com/product/cpsy.htm),运行java -jar joc.jar就可以启动Java混淆编译器,joc的命令行参数和javac完全相同,但增加了一个新的参数-Xobfuscate,它的用法如下:
       -Xobfuscate:
其中指定混淆级别,可以是以下几种级别:
       -Xobfuscate:none        不进行混淆
       -Xobfuscate:private     对所有private访问级别的元素进行混淆
       -Xobfuscate:package     对所有private或package private元素进行混淆
       -Xobfuscate:protected   对所有private, package private, protected元素进行混淆
       -Xobfuscate:public      对所有的元素都进行混淆
       -Xobfuscate:all         相当于-Xobfuscate:public
如果使用-Xobfuscate不带级别参数,则相当于-Xobfuscate:package

Q: 如何使用符号保留指令?
A: 除了在命令行用-Xobfuscate参数控制符号混淆级别外,还可以在源代码中使用符号保留指令来控制那些符号需要保留,符号保留指令是一个Java文档注释指令,可以插入在类和类成员的文档注释中,例如:
       /**
        * This class should preserve.
        * @preserve
        */
       public class Foo {
           /**
            * You can specify which field should be preserved.
            * @preserve
            */
           private int x;

           /**
            * This field is not preserved.
            */
           private int y;

           /**
            * You can also preserve methods.
            * @preserve
            */
           public void hello() {}

           /**
            * This method is not preserved.
            */
           private void collect() {}
       }
如果没有@preserve指令,则根据混淆级别及成员的访问级别来确定符号是否保留。

对于类的符号保留指令可以附带一个保留级别参数,来控制类成员的符号保留,包括:
       @preserve            仅对类名进行保留,类成员的保留根据-Xobfuscate命令行参数决定
       @preserve public     保留所有public成员
       @preserve protected  保留所有public和protected成员
       @preserve package    保留所有public, protected, package private成员
       @preserve private    保留所有成员
       @preserve all        相当于@preserve private

Q: JOC有哪些限制?
A: 不支持分别编译,必须对所有的源文件进行混淆编译。


    
 
 

您可能感兴趣的文章:

  • Linux下chmod命令详细介绍及用法举例
  • 请问:哪里有java所有类包的介绍,用法,及所有类的用途,用法,例子等的书或帮助的下载?
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 谁能介绍一下Runtime.exec()的参数的的用法?
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • 忽然对emacs产生兴趣,求介绍用法及网址(中文)?
  • HTML 5 的<!--...--> 注释标签用法详细介绍
  • 大家能不能给我介绍点关于Linux内路由过程及route指令的详细用法的好文章。
  • html form标签用法(js操作form)介绍及代码示例
  • 哪位能详细介绍一下poll的用法,感觉man poll说得不够清晰
  • c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  • jQuery setTimeout()函数的用法介绍
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • 请介绍一下那里有讲native 方法的详细文档!或者那位同志给提示一下它的用法
  • c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
  • ASP.NET Dictionary 的基本用法示例介绍
  • linux ramfs和tmpfs区别及用法介绍
  • Thinkphp中import的几个用法详细介绍
  • C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
  • php pdo mysql query用法介绍
  • c++ stl栈容器stack的pop(),push()等用法介绍及头文件
  • linux下access函数的用法介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 怎么没有讨论XML的?哪位高手介绍介绍在JAVA中怎么使用XML?
  • java命名空间java.beans接口propertyeditor的类成员方法: getvalue定义及介绍
  • 急!!谁了解macintosh?能不能给我介绍介绍?是不是跟linux差不多?使用开发工具JDK,这是不是不JAVA?
  • java命名空间java.awt类container的类成员方法: getlayout定义及介绍
  • 各位高手,我初学java,以前是学VB的,请介绍一下学习java的经验
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请大家介绍一下java BEAN的入门读物吧
  • java命名空间java.beans类defaultpersistencedelegate的类成员方法: defaultpersistencedelegate定义及介绍
  • 能否介绍几本Java的好书
  • java命名空间java.text类decimalformat的类成员方法: topattern定义及介绍
  • 介绍本学 JAVA的好书怎么样?请注明出版社
  • java命名空间java.sql类types的类成员方法: null定义及介绍
  • 介绍一些学习JAVA SWING 方面的好书.
  • java命名空间java.awt类awtevent的类成员方法: id定义及介绍
  • 哪里有Java 2D Graphics方面的介绍?
  • java命名空间java.text类choiceformat的类成员方法: choiceformat定义及介绍
  • 谁能告诉我哪里能找到java包内部类及方法使用介绍
  • java命名空间java.sql类driverpropertyinfo的类成员方法: value定义及介绍
  • 请问那里有java控制图形的介绍和代码?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: isrepresentationclassinputstream定义及介绍
  • 介绍一本Java好书
  • java.applet类applet的类成员方法: getcodebase定义及介绍
  • 我觉得介绍InstallAnyWhere的文档,太少了,请大家介绍一下,英文也可以◎◎◎◎◎◎◎◎
  • java命名空间java.awt类event的类成员方法: arg定义及介绍
  • 请大家介绍几个关于嵌入式Linux开发的站点!最好介绍几个国外的!
  • java命名空间java.awt类flowlayout的类成员方法: center定义及介绍
  • javacc,有研究过的朋友给介绍介绍,谢了
  • java命名空间java.awt类flowlayout的类成员方法: right定义及介绍
  • 那里有关于jmf的开发资料和介绍,请那位仁兄帮忙(最好介绍一些好的资料)急!!
  • java命名空间java.awt类gridbagconstraints的类成员方法: remainder定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3