精华内容
下载资源
问答
  • 目录1 从官网下载allatori文件2 Eclipse 下进行代码混淆2.1 config.xml 详解3 单个jar文件进行混淆4 注意事项 1 从官网下载allatori文件 http://www.allatori.com/,也可以从以下链接获取 有时候处于某种原因,我们...


    1 从官网下载allatori文件

    http://www.allatori.com/,也可以从以下链接获取

    有时候处于某种原因,我们需要将自己的代码做一些“处理”,保护一下自己小小的辛苦成果。至于allatori的技术原理以及其他的混淆技术这里不做解释,只是做一些简单记录
    解压后文件:

    img

    其中lib下是执行混淆用到的jar包allatori.jar和allatori-annotations.jar

    tutorial 各种案例

    其实打开readme.html 里面就已经有比较完成的操作步骤

    2 Eclipse 下进行代码混淆

    将上文lib下的allator.jar复制到eclipse安装目录
    eclipse/dropins下(可以通过右键开发工具图标获取地址)

    右键要混淆的项目选择Configure–>add Allatori

    clean项目,生成的class文件就是混淆后的代码了。

    这里需要补充一点,在点击混淆前还有一个配置文件需要简单处理一下

    可以去Allatori-7.0-Demo\tutorial\step01\files 路径下复制config.xml文件到你的项目主路径下,混淆的时候根根据config.xml的内容进行处理

    img

    关于config.xml文件中的配置项可以去官网查阅。

    反编译其中一个文件,内容已经不好阅读img

    2.1 config.xml 详解

    混淆的成功与否在于次配置的对与错。官方默认对除了 public 修饰的类、方法、区域放开,其余的都会混淆处理

    <config>
        <input>
            <jar in="test.jar" out="obf-test.jar"/>
            <jar in="mousegestures-1.2.jar" out="obf-mousegestures-1.2.jar"/>
        </input>
    
        <keep-names>
            <class access="protected+">
                <field access="protected+"/>
                <method access="protected+"/>
            </class>
        </keep-names>
    
        <property name="log-file" value="log.xml"/>
    </config>
    <jar in="你的 jar 包名称.jar" out="混淆后的 jar 包名称.jar"/>
    

    3 单个jar文件进行混淆

    上面的方式一般都是整个项目进行混淆,如果只想混淆几个关键的核心代码,只需要把需要混淆代码打个jar包,然后单独混淆此jar包即可

    复制对应的class文件,打成jar包(通过 jar cvf 包名.jar * )

    img

    cmd 下进入F://down/bb目录下 执行命令 jar cvf core3.jar *

    3.2 将core3.jar复制到目录Allatori-2.3-Demo\Allatori-7.0-Demo\tutorial\step01\files下

    img

    3.3 修改config.xml文件

    img

    运行RunAllatori.bat 得到corem.jar

    反编译查看结果

    img

    4 注意事项

    如果代码里请求静态资源的方法,注意请求路径的写法。因为如果是第三步将混淆后的jar包导入项目,获取文件的相对路径可能会不一样
    如果方法中有重定向等写法,主要不要将此内容进行混淆

    展开全文
  • 大家常见的java代码混淆工具应该是Progaurd,它通过修改掉class文件中的变量名、方法名、类名的方式使反编译出来的代码可读性降低来起到保护作者知识产权的作用。但是Progaurd只能对class文件进行混淆,也就是必须先...

    大家常见的java代码混淆工具应该是Progaurd,它通过修改掉class文件中的变量名、方法名、类名的方式使反编译出来的代码可读性降低来起到保护作者知识产权的作用。但是Progaurd只能对class文件进行混淆,也就是必须先把java源码编译为class文件,然后再进行混淆,此时混淆的效果是不太令人满意的,反编译之后还是很容易整理成具有可读性的代码的。

    今天给大家介绍的jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码进行混淆,混淆后的代码中包含很多JVM

    指令,大家知道JVM指令是面向机器的,人类一般很难看懂!。

    Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC)。原本是方便Apusic 应用服务器的开发,现在开放出来,供大家自由使用 ... Jocky提供了对IDE Eclipse的支持,同时,也支持在Ant中使用(事实上,在Eclipse中,也是先生成一个ant文件,然后再编译).

    是挺好用, 编译后的代码大部分反编译出来只有 JVM 指令! 的确是保护系统核心的利器! 支持 JDK 1.5. 可是 Jocky 竟然不开源... 领袖啊!

    以下是官方IDE(Apusic IDE)中的详细说明:

    Jocky

    Java Obfuscate Compiler Kit for You

    一、前言

    我们知道,Java是一种跨平台的于是就出现了Java混淆编译器,它的作用是打乱class文件中的符号信息,从而使反向工程变得非常困难。Jocky就是这样一款优秀的Java混淆编译器。

    目前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在一些这样或者那样的问题。一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,但如果程序较大时,配置工作将变得很复杂,而程序一旦修改,配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运行出错的情况。而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。

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

    如前文所述,混淆编译是Jocky的首要用途。我们举一个最简单的例子,下面的SimpleBean是未经混淆的class文件通过Jad反编译以后获得的源文件:1

    1fa987a29c6482f53d401256f96355eb.pngpublic class SimpleBean implements Serializable {

    2

    d18c02628675d0a2c816449d98bda930.png  

    3

    d18c02628675d0a2c816449d98bda930.png  private String name = "myname";

    4

    d18c02628675d0a2c816449d98bda930.png  

    5

    d18c02628675d0a2c816449d98bda930.png  private List myList = null;

    6

    d18c02628675d0a2c816449d98bda930.png  

    7

    97e794c86028c5f5b5461ae5ef440a4c.png  public void SimpleBean() {

    8

    d18c02628675d0a2c816449d98bda930.png    myList = new ArrayList(10);

    9

    ecedf933ec37d714bd4c2545da43add2.png  }

    10

    d18c02628675d0a2c816449d98bda930.png

    11

    97e794c86028c5f5b5461ae5ef440a4c.png  public void foo1() {

    12

    d18c02628675d0a2c816449d98bda930.png    myList.add("name");

    13

    ecedf933ec37d714bd4c2545da43add2.png  }

    14

    d18c02628675d0a2c816449d98bda930.png  

    15

    97e794c86028c5f5b5461ae5ef440a4c.png  private void foo2() {    

    16

    ecedf933ec37d714bd4c2545da43add2.png  }

    17

    d18c02628675d0a2c816449d98bda930.png  

    18

    d18c02628675d0a2c816449d98bda930.png  private void writeObject(java.io.ObjectOutputStream out)

    19

    97e794c86028c5f5b5461ae5ef440a4c.png      throws IOException {

    20

    d18c02628675d0a2c816449d98bda930.png    

    21

    ecedf933ec37d714bd4c2545da43add2.png  }

    22

    d18c02628675d0a2c816449d98bda930.png

    23

    8f1ba5b45633e9678d1db480c16cae3f.png}

    下面是经Jocky混淆过的类文件,通过Jad反编译后产生的源文件:1

    1fa987a29c6482f53d401256f96355eb.pngpublic class SimpleBean implements Serializable {

    2

    d18c02628675d0a2c816449d98bda930.png

    3

    d18c02628675d0a2c816449d98bda930.png  private String _$2;

    4

    d18c02628675d0a2c816449d98bda930.png

    5

    d18c02628675d0a2c816449d98bda930.png  private List _$1;

    6

    d18c02628675d0a2c816449d98bda930.png

    7

    97e794c86028c5f5b5461ae5ef440a4c.png  public SimpleBean()     {

    8

    d18c02628675d0a2c816449d98bda930.png        _$2 = "myname";

    9

    d18c02628675d0a2c816449d98bda930.png        this;

    10

    d18c02628675d0a2c816449d98bda930.png        JVM INSTR new #4   ;

    11

    d18c02628675d0a2c816449d98bda930.png        JVM INSTR dup ;

    12

    d18c02628675d0a2c816449d98bda930.png        JVM INSTR swap ;

    13

    d18c02628675d0a2c816449d98bda930.png        10;

    14

    d18c02628675d0a2c816449d98bda930.png        ArrayList();

    15

    d18c02628675d0a2c816449d98bda930.png        _$1;

    16

    ecedf933ec37d714bd4c2545da43add2.png    }  

    17

    97e794c86028c5f5b5461ae5ef440a4c.png  public void foo1() {

    18

    d18c02628675d0a2c816449d98bda930.png    _$1.add("name");

    19

    ecedf933ec37d714bd4c2545da43add2.png  }

    20

    d18c02628675d0a2c816449d98bda930.png

    21

    97e794c86028c5f5b5461ae5ef440a4c.png  private void _$1() {

    22

    ecedf933ec37d714bd4c2545da43add2.png  }

    23

    d18c02628675d0a2c816449d98bda930.png

    24

    97e794c86028c5f5b5461ae5ef440a4c.png  private void writeObject(ObjectOutputStream objectoutputstream){

    25

    97e794c86028c5f5b5461ae5ef440a4c.png      throws IOException {

    26

    ecedf933ec37d714bd4c2545da43add2.png  }

    27

    ecedf933ec37d714bd4c2545da43add2.png}

    JDK 5.0在语法层面上有许多新增特色,能够为简化应用的开发带来一些便利。譬如Generics、Enhanced for Loop以及 Autoboxing/Unboxing等。但另人遗憾的是,倘若利用这些新的语法开发应用,就意味着不能够在JDK

    1.4上运行,而JDK 1.4毕竟是目前最为普及的VM版本。幸运是,Jocky的另一个特色就是:通过参数配置,能够把用JDK 5.0语法编写的应用编译成JDK 1.4上的类文件版本。我们可以把经过 Jocky编译的类文件以UltraEdit打开,可以发现在第8个字节上(类文件的major version)的数值是0x30,即十进制的48,这是JDK 1.4所能够理解的类文件版本(JDK 5.0默认编译的类文件版本是49)。前提是:应用中不能够使用JDK 1.4中所没有的一些API。

    使用Jocky非常简单,获得jocky.jar以后,只需要运行java -jar jocky.jar就可以启动Jocky混淆编译器,jocky的命令行参数和javac完全相同,但增加了一个新的参数-scramble,它的用法如下:

    4f1150b881333f12a311ae9ef34da474.png-scramble          混淆所有package private或private符号

    4f1150b881333f12a311ae9ef34da474.png-scrambleall       混淆所有符号

    4f1150b881333f12a311ae9ef34da474.png-scramble:混淆相应级别的符号

    4f1150b881333f12a311ae9ef34da474.png其中指定混淆级别,可以是以下几种级别:

    4f1150b881333f12a311ae9ef34da474.png-scramble:none        不进行混淆

    4f1150b881333f12a311ae9ef34da474.png-scramble:private     对所有private访问级别的元素进行混淆

    4f1150b881333f12a311ae9ef34da474.png-scramble:package     对所有private或package private元素进行混淆

    4f1150b881333f12a311ae9ef34da474.png-scramble:protected   对所有private, package private, protected元素进行混淆

    4f1150b881333f12a311ae9ef34da474.png-scramble:public      对所有的元素都进行混淆

    4f1150b881333f12a311ae9ef34da474.png-scramble:all         相当于-scramble:public

    4f1150b881333f12a311ae9ef34da474.png如果使用-scramble不带级别参数,则相当于-scramble:package

    4f1150b881333f12a311ae9ef34da474.png

    近年来,Ant已经成为Java应用开发中打包工具的事实上的标准。在应用的开发过程中,我们往往都会有一个Ant脚本,通过该脚本,能够对应用进行编译、打包、发布等一系列过程。因此,Jocky的最佳切入点便是对Ant的支持。在Ant中使用Jocky非常简单:1. 将lib\jocky-ant.jar copy至ANT_HOME\lib目录下。2. 在ant脚本中加入这样一行代码,以引入Jocky Task

    4f1150b881333f12a311ae9ef34da474.png

    3. 设置Jocky的一些基本属性,包括: jocky.jar包的位置,以及混淆级别,如下所示:

    4f1150b881333f12a311ae9ef34da474.png

    4. 当设置jocky的enable属性为true时,此时,Ant脚本中的javac编译命令,便会被自动替换成Jocky编译器;当设置enable属性为false时,javac编译命令将恢复成正常设置,示例脚本如下:1

    4f1150b881333f12a311ae9ef34da474.png 

    2

    4f1150b881333f12a311ae9ef34da474.png

    3

    4f1150b881333f12a311ae9ef34da474.png 

    4

    4f1150b881333f12a311ae9ef34da474.png 

    5

    4f1150b881333f12a311ae9ef34da474.png

    6

    4f1150b881333f12a311ae9ef34da474.png  

    7

    4f1150b881333f12a311ae9ef34da474.png

    8

    4f1150b881333f12a311ae9ef34da474.png 

    9

    4f1150b881333f12a311ae9ef34da474.png

    10

    4f1150b881333f12a311ae9ef34da474.png

    11

    4f1150b881333f12a311ae9ef34da474.png

    12

    4f1150b881333f12a311ae9ef34da474.png

    13

    4f1150b881333f12a311ae9ef34da474.png

    14

    4f1150b881333f12a311ae9ef34da474.png 

    15

    4f1150b881333f12a311ae9ef34da474.png

    16

    4f1150b881333f12a311ae9ef34da474.png

    17

    4f1150b881333f12a311ae9ef34da474.png

    18

    4f1150b881333f12a311ae9ef34da474.png

    注意: Jocky for Ant在Ant 1.6.5上开发,推荐使用该版本。

    2. 在Eclipse中使用Jocky:

    在Eclipse中使用Jocky也非常简单,任何一个Java工程,选中工程通过右键菜单,都可以出现Jocky的快捷菜单:

    7cde786de53302985909d65ee77b9417.png

    e4acc0115d593f68e1a604fcfda16c2d.png

    事实上,在Eclipse中使用Jocky时,Jocky也是首先针对所选工程生成Ant的Build文件(默认名称jocky_build.xml),然后再通过Ant完成混淆编译。

    以下是Jocky在Eclipse中自动生成的Ant Build 文件示例:

    1

    4f1150b881333f12a311ae9ef34da474.png 

    2

    4f1150b881333f12a311ae9ef34da474.png

    3

    4f1150b881333f12a311ae9ef34da474.png

    4

    4f1150b881333f12a311ae9ef34da474.png

    5

    4f1150b881333f12a311ae9ef34da474.png

    6

    4f1150b881333f12a311ae9ef34da474.png 

    7

    4f1150b881333f12a311ae9ef34da474.png

    8

    4f1150b881333f12a311ae9ef34da474.png

    9

    4f1150b881333f12a311ae9ef34da474.png 

    10

    4f1150b881333f12a311ae9ef34da474.png

    11

    4f1150b881333f12a311ae9ef34da474.png

    12

    4f1150b881333f12a311ae9ef34da474.png

    13

    4f1150b881333f12a311ae9ef34da474.png

    14

    4f1150b881333f12a311ae9ef34da474.png 

    15

    4f1150b881333f12a311ae9ef34da474.png

    16

    4f1150b881333f12a311ae9ef34da474.png

    17

    4f1150b881333f12a311ae9ef34da474.png

    18

    4f1150b881333f12a311ae9ef34da474.png 

    19

    4f1150b881333f12a311ae9ef34da474.png

    20

    4f1150b881333f12a311ae9ef34da474.png

    21

    4f1150b881333f12a311ae9ef34da474.png 

    22

    4f1150b881333f12a311ae9ef34da474.png

    23

    4f1150b881333f12a311ae9ef34da474.png

    24

    4f1150b881333f12a311ae9ef34da474.png

    25

    4f1150b881333f12a311ae9ef34da474.png

    26

    4f1150b881333f12a311ae9ef34da474.png

    注1:只支持Eclipse 3.1.1及以上版本。

    注2:如果在Eclipse中找不到Jocky插件,请删除 Eclipse安装目录/configuration/org.eclipse.update 文件夹 (Maybe an eclipse bug?)。

    除了在命令行用 -scramble 参数控制符号混淆级别外,还可以在源代码中使用符号保留指令来控制那些符号需要保留。符号保留指令是一个Java文档注释指令,可以插入在类和类成员的文档注释中,例如:1

    4f1150b881333f12a311ae9ef34da474.png/**

    2

    4f1150b881333f12a311ae9ef34da474.png * This class should preserve.

    3

    4f1150b881333f12a311ae9ef34da474.png * @preserve

    4

    4f1150b881333f12a311ae9ef34da474.png */

    5

    4f1150b881333f12a311ae9ef34da474.pngpublic class Foo {

    6

    4f1150b881333f12a311ae9ef34da474.png    /**

    7

    4f1150b881333f12a311ae9ef34da474.png     * You can specify which field should be preserved.

    8

    4f1150b881333f12a311ae9ef34da474.png     * @preserve

    9

    4f1150b881333f12a311ae9ef34da474.png     */

    10

    4f1150b881333f12a311ae9ef34da474.png    private int x;

    11

    4f1150b881333f12a311ae9ef34da474.png

    12

    4f1150b881333f12a311ae9ef34da474.png    /**

    13

    4f1150b881333f12a311ae9ef34da474.png     * This field is not preserved.

    14

    4f1150b881333f12a311ae9ef34da474.png     */

    15

    4f1150b881333f12a311ae9ef34da474.png    private int y;

    16

    4f1150b881333f12a311ae9ef34da474.png

    17

    4f1150b881333f12a311ae9ef34da474.png    /**

    18

    4f1150b881333f12a311ae9ef34da474.png     * You can also preserve methods.

    19

    4f1150b881333f12a311ae9ef34da474.png     * @preserve

    20

    4f1150b881333f12a311ae9ef34da474.png     */

    21

    4f1150b881333f12a311ae9ef34da474.png    public void hello() {}

    22

    4f1150b881333f12a311ae9ef34da474.png

    23

    4f1150b881333f12a311ae9ef34da474.png    /**

    24

    4f1150b881333f12a311ae9ef34da474.png     * This method is not preserved.

    25

    4f1150b881333f12a311ae9ef34da474.png     */

    26

    4f1150b881333f12a311ae9ef34da474.png    private void collect() {}

    27

    4f1150b881333f12a311ae9ef34da474.png}

    如果没有@preserve指令,则根据混淆级别及成员的访问级别来确定符号是否保留。对于类的符号保留指令可以附带一个保留级别参数,来控制类成员的符号保留,包括:4f1150b881333f12a311ae9ef34da474.png@preserve            仅对类名进行保留,类成员的保留根据-scramble命令行参数决定

    4f1150b881333f12a311ae9ef34da474.png@preserve public     保留所有public成员

    4f1150b881333f12a311ae9ef34da474.png@preserve protected  保留所有public和protected成员

    4f1150b881333f12a311ae9ef34da474.png@preserve package    保留所有public, protected, package private成员

    4f1150b881333f12a311ae9ef34da474.png@preserve private    保留所有成员

    4f1150b881333f12a311ae9ef34da474.png@preserve all        相当于@preserve private

    4f1150b881333f12a311ae9ef34da474.png

    事实上,即便不加@preserve指令,Jocky对Java语言特有的一些private级别的方法不进行混淆,譬如,在序列化时有特殊作用的writeObject及readObject方法等。但笔者强烈建议: 针对这些有特殊含义不能够被混淆的

    private级别的方法或者字段,请以@preserve指令予以保护。注1:建议通过IDE的JavaDoc设置,来辅助@preserve指令的书写。

    正如前文所说,Jocky是基于源代码的混淆编译器,因此,Jocky不支持分别编译,必须对所有的源文件同时进行混淆编译。但事实上,倘若混淆级别控制在private级别上,该限制便不复存在。

    展开全文
  • Allatori是第二代java代码混淆工具,为你的产品知识产权提供全方位的保护。通过代码混淆,让代码逆向工程几乎变得不可能。 除了代码混淆作用,Allatori还可以最小化应用代码大小,提高应用启动速度。 使用案例 创建...

    Allatori 是什么

    Allatori是第二代java代码混淆工具,为你的产品知识产权提供全方位的保护。通过代码混淆,让代码逆向工程几乎变得不可能。

    除了代码混淆作用,Allatori还可以最小化应用代码大小,提高应用启动速度。

    使用案例

    创建一个mixup的maven工程如下图

    在这里插入图片描述

    如上图 在根目录下创建allatori文件夹,放入配置文件allatori.xml,创建lib文件夹,在其下面放入allatori.jar和allatori-annotations.jar。

    <config>
        <input>
             <!--混淆后直接覆盖原文件,out指向的路劲为混淆后的jar -->
            <jar in="mixup-0.0.1-SNAPSHOT.jar"  out="mixup-0.0.1-SNAPSHOT-obfuscated.jar" /> 
        </input>
      
        <keep-names>
            <!-- protected/public的都保留名称 -->  
            <class access="protected+">        
                <field access="protected+" />  
                <method access="protected+" />
            </class>
        </keep-names>
        <ignore-classes>
            <!-- 注意:spring的框架相关的文件需要排除,避免启动报错 -->
            <class template="class *springframework*"/>
        </ignore-classes>
    
    </config>
    

    allatori.xml配置详细可见注释。

    pom.xml中加入编译时需要用到的插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
            <execution>
                <id>copy-and-filter-allatori-config</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>${basedir}/target</outputDirectory>
                    <resources>
                        <resource>
                            <directory>allatori</directory>
                            <includes>
                                <include>allatori.xml</include>
                            </includes>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>run-allatori</id>
                <phase>package</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <executable>java</executable>
            <arguments>
                <argument>-Xms128m</argument>
                <argument>-Xmx512m</argument>
                <argument>-jar</argument>
                <argument>allatori/lib/allatori.jar</argument>
                <argument>${basedir}/target/allatori.xml</argument>
            </arguments>
        </configuration>
    </plugin>
    

    通过maven package命令进行打包,在taget目录下生成了mixup-0.0.1-SNAPSHOT.jar和mixup-0.0.1-SNAPSHOT-obfuscated.jar(混淆后)文件。

    在这里插入图片描述

    通过反编译工具查看mixup-0.0.1-SNAPSHOT-obfuscated.jar。

    混淆前代码

    package com.example.mixup.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    public class HelloController {
    
        private Person person;
    
        @RequestMapping("/hello")
        public String sayHello(String name){
            return "hello "+ name;
        }
    }
    

    混淆后通过反编译工具查看

    package BOOT-INF.classes.com.example.mixup.controller;
    
    import com.example.mixup.controller.Person;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
      private Person h;
      
      @RequestMapping({"/hello"})
      public String sayHello(String name) {
        return (new StringBuilder()).insert(0, a("D@@IC\005")).append(name).toString();
      }
      
      public static String a(Object s) {
        // Byte code:
        //   0: iconst_4
        //   1: iconst_3
        //   2: ishl
        //   3: iconst_5
        //   4: ixor
        //   5: iconst_4
        //   6: iconst_3
        //   7: ishl
        //   8: iconst_5
        //   9: iconst_3
        //   10: ishl
        //   11: iconst_4
        //   12: ixor
        //   13: aload_0
        //   14: checkcast java/lang/String
        //   17: dup
        //   18: astore_0
        //   19: invokevirtual length : ()I
        //   22: dup
        //   23: newarray char
        //   25: iconst_1
        //   26: dup
        //   27: pop2
        //   28: swap
        //   29: iconst_1
        //   30: isub
        //   31: dup_x2
        //   32: istore_3
        //   33: astore_1
        //   34: istore #4
        //   36: dup_x2
        //   37: pop2
        //   38: istore_2
        //   39: iflt -> 79
        //   42: aload_1
        //   43: aload_0
        //   44: iload_3
        //   45: dup_x1
        //   46: invokevirtual charAt : (I)C
        //   49: iinc #3, -1
        //   52: iload_2
        //   53: ixor
        //   54: i2c
        //   55: castore
        //   56: iload_3
        //   57: iflt -> 79
        //   60: aload_1
        //   61: aload_0
        //   62: iload_3
        //   63: iinc #3, -1
        //   66: dup_x1
        //   67: invokevirtual charAt : (I)C
        //   70: iload #4
        //   72: ixor
        //   73: i2c
        //   74: castore
        //   75: iload_3
        //   76: goto -> 39
        //   79: new java/lang/String
        //   82: dup
        //   83: aload_1
        //   84: invokespecial <init> : ([C)V
        //   87: areturn
        // Local variable table:
        //   start	length	slot	name	descriptor
        //   0	88	0	s	Ljava/lang/Object;
      }
    }
    

    混淆后代码难以阅读,通过java -jar mixup-0.0.1-SNAPSHOT-obfuscated.jar命令,混淆后的代码能够正常运行。

    PS:allatori.xml中要加入一下代码,不要混淆spring框架中的代码,不然会影响springboot项目启动,出现ClassNotFoundException错误。

    <ignore-classes>
    	<!-- 注意:spring的框架相关的文件需要排除,避免启动报错 -->
    	<class template="class *springframework*"/>
    </ignore-classes>
    

    参考

    allatori官网

    展开全文
  • 有时候,需要将Java代码混淆,以增加部分意料之外的人对代码进行反编译后查看其中的内容。那么,如何进行代码混淆呢?可以使用Allatori工具来进行代码混淆。问题有时候,需要将Java代码混淆,以增加部分意料之外的人...

    有时候,需要将Java代码混淆,以增加部分意料之外的人对代码进行反编译后查看其中的内容。那么,如何进行代码混淆呢?可以使用Allatori工具来进行代码混淆。问题

    有时候,需要将Java代码混淆,以增加部分意料之外的人对代码进行反编译后查看其中的内容。那么,如何进行代码混淆呢?

    解决

    可以使用Allatori工具来进行代码混淆。

    下载Allatori

    通过搜索Allatori,进入其官网,可下载最新版本的Allatori。目前最新版本为7.7。

    629e44ab29f4cc316ae28fa72aad143a.png

    混淆

    下载完成后,解压,进入其中的 .\tutorial\step01\files 目录,Allatori提供了一个test.jar,我们可以用它来进行简单的测试。

    先反编译看下test.jar中的内容,如下:

    a40e2b583041d1a7e9f811f48a7ff80f.png

    执行RunAllatori.bat,得到safe.jar。

    反编译safe.jar中的内容,如下:

    af5f945bf1caf992b9f32b237096a59f.png

    混淆后的代码很难阅读。

    可以自行尝试其它step中的内容,目标都是混淆,只是混淆的方式或程序有所不同。

    配置

    config.xml为混淆配置文件,如下:

    18ab96bd332cd3a8a47756eaedd67952.png

    比如说我们可以配置,只混淆非 public方式,这样,可以在混淆后不影响调用引入该jar包的其它项目。

    展开全文
  • Java代码混淆工具ProGuard由于Java 代码的 class类很容易被反编译,为了保证知识产权有时候需要将代码进行混淆。而ProGuard就提供了混淆Java代码的方法。简介描述ProGuard是Java字节码最受欢迎的优化程序。它能够让...
  • java代码混淆器下载

    2021-03-15 12:40:19
    java代码混淆器注意事项:1、注意版本,如果不是项目需要,最好使用最新稳定版本,这样出错的机会小一些,学习曲线会明显缩短。2、最好以源码的同编译版本的jvm来启动,不要直接用默认的jvm打开。3、注意启动后默认...
  • 参考文章:bashProGuard简介ProGuard 是一个压缩(shrink)、优化(optimize)和混淆(obfuscate) Java 字节码文件的免费的工具。它能够删除无用的类、字段、方法和属性,能够删除没用的注释,最大限度地优化字节码文件。...
  • 【CSDN 7月23日消息】从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD。因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用Java Obfuscator...
  • Java代码混淆器下载

    2021-02-28 18:38:28
    ProGuard是Java字节码最受欢迎的优化器。它使您的Java和Android应用程序的升级速度降低了90%,...ProGuard代码本身受版权保护,并根据GNU通用公共许可证(GPL)第2版的规定进行分发。用户手册也受版权保护,只能以未...
  • java代码可以反编译,因此有时候要保护自己的知识产权还真得费点心思,一般来说有三个思路:  1、将class文件加密,这个是最安全... 我们项目中用到的即为代码混淆工具ProGuard,相关文章参考:  http://blog.csd.
  • DashO-Pro是第三代的Java混淆器(obfuscator)、压缩机(compactor)、优化工具和水印工具(watermarker)。它能有效保护和防止Java程序被反编译和篡改,是Java代码保护的理想选择。DashO-Pro除了为Java代码提供领先...
  • { if (name.equals("toCharArray") && owner.equals("java/lang/String")) { if (!values.get(0).isKnown()) { // invocation target is not known, we can't compute the return return null; } return ((String) ...
  • Java开发工具中,有一种是Java混淆器,Java Obfuscator是其中之一,此工具会打乱 Java代码,使其非常难以理解或逆向工程(示例)。这为必须交付给客户的源代码知识产权提供了重要的保护,并防止对 Java 类文件...
  • 在JavaScript 中可以通过压缩代码,代码混淆来避免.Java 里也有类似的工具.allatori用于将已有代码混淆,防止反编译.工作原理:读取 jar 文件,对其代码按照XML 中的配置进行重写.如:字符串替换,代码改写为内部...
  • Java 代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的 Java .class 文件可以非常轻易地被反编译。通常情况下,反编译可以利用现有...
  • I am curious enough to considering not evening writing certain code in Java because of how easy it is to decompile. Is there a way that I can write in Java and not have to worry about decompilers? I u...
  • DashO-Pro是第三代的Java混淆器(obfuscator)、压缩机(compactor)、优化工具和水印工具(watermarker)。它能有效保护和防止Java程序被反编译和篡改,是Java代码保护的理想选择。DashO-Pro除了为Java代码提供领先...
  • 分层混淆,加密,水印,自动失效,反调试,反篡改,反仿真器,反挂钩,反根设备解决方案,为世界各地的应用程序提供保护。 CTO Bill Leach在关于Preashtive的Android和Java保护产品DashO 11发布的最新演讲中说:“更...
  • 4 常见问题 4.1 war包怎么加密? War包因软件的复杂性,已经包括第三方jar包,配置文件等...4.1.4将zip包进行混淆操作,右键打开混淆后的zip后发现已经混淆成功了 4.1.5 将zip包中的class文件 拷贝回原来war的...
  • maven混淆Java代码

    2021-02-27 22:43:09
    Maven 环境下使用 proguard-maven-plugin 插件混淆你的源码一、场景介绍两个工程 Project1,Project2(将被混淆的工程)。Project1 将通过 Maven 依赖配置的方式引用混淆后的 Project2。后面我会详细介绍 pom.xml 的...
  • 下载并解压 http://www.allatori.com/ 配置文件 运行 D:\Allatori-7.8-Demo\lib>java -jar allatori.jar config.xml ################################################ # # # ## # # ## ### ### ## ### # # # # # ...
  • OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。OLLVM是基于LLVM实现的,LLVM是一个编译器框架,...
  • 工具准备工具名称:proguard V7.0.1下载地址:https://github.com/Guardsquare/proguard工具作用对jar包进行混淆,主要防止软件发布后被二次开发。jar包中函数及参数被混淆后,在通过JD-GUI、JAD进行jar反编译时,...
  • Allatori Java obfuscator是第二代Java代码混淆器,为您的知识产权提供全方位的保护。大部分第二代混淆器都具有保护功能。Allatori除了保护功能之外,还附加了一系列的功能,几乎可以抵御一切的代码攻击。同时,...
  • 需求:对java打包编辑进行混淆防止反编译实现:...
  • 而我以前的工作主要是编写公共底层库,需要做一些源代码保护,最后用的是apusic提供的joc.jar混淆编译器,可直接针对源代码进行混淆编译。目前joc下载链接已经失效,而且不支持jdk1.5以上版本了。无奈只能重新对Java...
  • 常用的5款java混淆

    2020-12-20 11:48:16
    从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD。因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用Java Obfuscator(Java混淆器)保护Java的...
  • 使用 IntelliJ IDEA 开发一般 Java 应用程序时通过 Allatori 进行代码混淆非常容易配置,下面总结一下本人经验,介绍一下配置方法。首先在 IDEA 的 Module 所在硬盘目录内创建一个名为 allatori 的子目录,将 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,142
精华内容 20,456
关键字:

java代码混淆工具

java 订阅