allatori混淆技术总结

Allatori混淆技术

一、 混淆器介绍
1、混淆出现的背景
Java是一种跨平台的、解释型语言,Java源代码编译成中间“字节码”存储于class文件中。由于跨平台的需要,Java字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成Java源代码。为了防止这种现象,我们可以使用Java混淆器对Java字节码进行混淆。 

2、混淆器的优势
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。
混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因, 编译后jar文件体积大约能减少25% ,这对当前费用较贵的无线网络传输是有一定意义的。


二、Allatori混淆技术介绍
Allatori是一个Java 混淆器,它属于第二代的混淆器,因此它能够全方位的保护你的知识产权。 Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串混淆,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。新版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。


三、Allatori使用和操作

从官网下载完成并解压后,会出现一个allatori.jar文件,那么它的混淆技术就是依靠这个包去实现的
1、 文件结构

解压后的目录
[img]http://dl2.iteye.com/upload/attachment/0089/6457/ccdb3a11-133f-35dd-8ba6-22176f6ef442.png[/img]


混淆时依赖的jar包
[img]http://dl2.iteye.com/upload/attachment/0089/6459/c9d17d63-2b35-355d-b4ed-71755f3b7ee4.png[/img]


下面是官方带的例子,里面有配置文件(config.xml)、运行混淆的命令文件(RunAllatori.bat)、清除产生的新文件的命令文件(Clean.bat)、将要被混淆的jar文件(test.jar、mousegestures-1.2.jar)
[img]http://dl2.iteye.com/upload/attachment/0089/6461/8ffec2a3-d34d-3c4a-9a81-1749c998182c.png[/img]
示例图

2、文件详细说明
图中各个文件的内容可以从下图中看到:

1、 Clean.bat
就是删除生成的被混淆的文件和log文件
[img]http://dl2.iteye.com/upload/attachment/0089/6463/f42f3c2d-a183-3d1b-a868-c8089e2fa9ea.png[/img]
Clean.bat文件内容

2、 RunAllatori
调用Java命令运行allatori.jar文件,并且加载config.xml配置文件
[img]http://dl2.iteye.com/upload/attachment/0089/6465/3307a5fd-4e54-3394-ab61-aeea21464eab.png[/img]
RunAllatori文件内容

3、 config.xml
配置文件,是混淆过程中最重要的文件,需要用户根据实际情况来配置
[img]http://dl2.iteye.com/upload/attachment/0089/6467/56631f44-cca7-350a-afea-4327d10e40de.png[/img]
Config.xml文件内容

4、 配置文件
config标签:这个是配置的根标签。
Jars标签:用来设置将要被混淆的jar(war,ear)文件。应该至少包含一个嵌套的jar标签和dir标签来设置输入和输出文件。我们的例子中可以看到包含了两个jar标签

Jar标签:有两个属性—in、out,分别表示将要被混淆的jar文件和混淆后输出的文件

Keep-names标签:用来设置那些在混淆过程中不需要被重命名的类、方法、变量。如果被混淆的应用是个公共库,那么应该保留所有的公共接口名字不被重命令;如果是个独立的应用程序,那么将至少保留主类的名字不被重命名;当使用到反射的时候,也要保持类名和方法名字不被重命名
Property标签:用来设置不同的混淆特性的,它有两个必备的属性:name和value。Name可以设置为----log文件、字符串加密、控制混淆流程、重命名方式等

详细的配置说明参见http://www.allatori.com/doc.html

2、 混淆效果
混淆前
[img]http://dl2.iteye.com/upload/attachment/0089/6469/defc4e43-2b3f-318a-8084-08534168e587.png[/img]
混淆前的代码


混淆后的反编译效果:
[img]http://dl2.iteye.com/upload/attachment/0089/6471/5c104423-7f0d-3b65-869e-acf726bd2b8a.png[/img]
混淆后反编译效果


四、在项目中实际应用
我们拿定位服务器来进行演示。
1、导出应用为war包
[img]http://dl2.iteye.com/upload/attachment/0089/6473/d239b1df-1782-30ec-8bdf-59d6d5aeb607.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0089/6475/05731181-ba0f-3b5e-9a29-e149ea12effa.png[/img]
选择war file
[img]http://dl2.iteye.com/upload/attachment/0089/6478/e4ab764d-43af-38b1-9778-d29acbb59556.png[/img]
选择保存的路径
[img]http://dl2.iteye.com/upload/attachment/0089/6480/24368b34-c117-3043-b949-ba4b7fcdc926.png[/img]
点击Finish


2、准备lib包和编写配置文件
[img]http://dl2.iteye.com/upload/attachment/0089/6482/81378c72-4e32-3776-b3f9-48fc0b54b77b.png[/img]
准备的文件
Lib目录里面是gmlc运行所需要的jar包
[img]http://dl2.iteye.com/upload/attachment/0089/6484/a01a5f1b-7a1f-346c-b3f8-0da0852aaa94.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0089/6486/1357a191-7879-3b28-8297-9bc682e465d0.png[/img]
配置文件

[img]http://dl2.iteye.com/upload/attachment/0089/6488/7df9128e-c470-3abf-8892-79a368020417.png[/img]
运行文件

3、运行开始命令
双击RunAllatori.bat文件
[img]http://dl2.iteye.com/upload/attachment/0089/6490/6834e7ab-fd58-3d80-8ec0-1be603a63139.png[/img]
运行窗口


运行完成后会生成两个文件:gmlc.allobf.war、log.xml文件
[img]http://dl2.iteye.com/upload/attachment/0089/6492/94e53605-e660-3993-ba58-8584ae136533.png[/img]
混淆完成后

Log.xml文件内容:
[img]http://dl2.iteye.com/upload/attachment/0089/6494/f7dbb2dc-2fc9-3502-a523-82515c29b85c.png[/img]

通过log.xml文件可以查看哪些类、方法、变量被混淆后重命名成什么样的名字

而gmlc.allobf.war就是混淆后的工件了,可以直接发布部署到tomcat的webapps目录下,启动tomcat就可以访问了(当然启动之前修改一下名字,改为gmlc.war)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值