[转]java代码混淆以及及IDEA中springboot使用Allatori进行混淆
1. 原因
由于看到很多的java项目通过反编译jar包能够看到代码的具体实现,相当于将所有的逻辑都暴露在外,会造成很大的危险,因此,本次主要学习一下关于如何预防此类问题的方法,本文主要讨论通过代码混淆的方式来对打包出来的jar包进行处理
2. 代码混淆(取自百度百科)
百度百科对于代码混淆的解释:代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序的源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。
主要是首先将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个的字符,或者简短的无意义字母组合,甚至改写成"__"这样的符号,使得阅读的人无法通过名字猜测其用途;其次,重写代码的逻辑,使其变为功能上等价,但是更困难的理解形式。例如将for循环改成while循环,将循环改成递归,精简中间的变量等(视具体的混淆器功能而定);最后,打乱代码的格式,比如删除空格,将多行代码挤到一行等
java的代码混淆就是对java的字节码(.class)文件进行混淆
混淆代码带来的问题:
被混淆的代码难于理解,因此,调试和除错也变得困难起来
对于支持反射的语言,代码混淆有可能与反射发生冲突
代码混淆并不能真正的组织反向工程,只能增大其难度,因此对于安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码安全
3. Allatori混淆技术(https://github.com/Lovnx/confusion)
Allatori是一个java的混淆器,它属于第二代混淆器,因此能够全方位的保护只是产权
Allatori主要保护方式:1.命名混淆、2.流混淆、3.调试信息混淆、4.字符串混淆以及水印技术
支持war和jar文件格式
此外使用Allatori打包的大小会小一点
4. 使用方法(https://github.com/Lovnx/confusion)
具体使用方法参照标题中的网址,此处根据git上的项目将步骤简化一下,已测试,可以使用在Springboot项目中
项目目录:
1) pom文件需要添加内容:
<!-- Allatori plugin start -->
<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>${basedir}/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>${basedir}/lib/allatori.jar</argument>
<argument>${basedir}/target/allatori.xml</argument>
</arguments>
</configuration>
</plugin>
<!-- Allatori plugin end -->
主要需要关注的两个配置,一个是allatori的jar包地址,一个是指定混淆策略的xml文件
<argument>${basedir}/lib/allatori.jar</argument>
<argument>${basedir}/target/allatori.xml</argument>
2) allatori.xml文件
<config>
<input>
<jar in="confusion-0.0.1-SNAPSHOT.jar" out="confusion-0.0.1-SNAPSHOT-obfuscated.jar"/>
</input>
<keep-names>
<class access="protected+">
<field access="protected+"/>
<method access="protected+"/>
</class>
</keep-names>
<property name="log-file" value="log.xml"/>
</config>
为配置策略的文件,后续会具体解释各个标签以及属性的名称allatori.xml配置文件,此处只介绍具体使用方法,其中的jar标签中的in为未混淆时打出的包名,可以在target目录下获取到,out为输出的混淆jar包的名称,可以与未混淆的jar包打出的包名一样
3) 打包步骤
(1)在控制台中执行mvn clean install (会报错,不用关心报错信息,此处执行主要是为了删除原有的target文件夹而后生成一个新的target文件夹)
(2)将allatori.xml移动到target目录下面(在pom中配置了allatori的路径在target下,具体移动到其他目录下是否可行没试过,感兴趣的话可以尝试一下)
(3)前两步执行完毕后执行mvn install(千万不要执行mvn clean install或其他带clean的操作,否则需要重新将allatori.xml文件移动到target下)
4) 成功后工程目录
5. 混淆遇到的问题
1)混淆主要是对java进行混淆,像是xml文件等一些配置文件不会被混淆
2)例如数据库连接mybatis这些需要和配置文件交互或者Autowired的不建议进行混淆,可以通过ignore-classes进行屏蔽
3)对于混淆来说,最好只混淆主要的逻辑,类似一些无脑的查库取库等一些简单的实现类不建议混淆
4)在进行mvn install时可能会出来单测失败的问题,这属于Spring启动问题,使用 mvn install -DskipTests
[转]java代码混淆以及及IDEA中springboot使用Allatori进行混淆相关推荐
- java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半
下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示: 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散 ...
- java weka命令行_使用自己的Java代码和模型获取WEKA中的预测百分比
概观 我知道可以通过GUI和命令行选项在训练有素的WEKA模型中获得每个预测的百分比,如文档文章"Making predictions"中所方便解释和演示的那样. 预测 我知道有三 ...
- amd cpu不能在cmd环境下运行java代码_如何在Windows10中配置java的JDK环境
今天给大家分享一下如何配置java的JDK环境.操作步骤如下: 1.下载好 jdk 的安装文件,我下载的是 jdk-10.0.1_windows-x64_bin.exe 这个版本的安装文件: 2.使用 ...
- java代码获取项路径_Java中获取各种路径的方法盘点
Java代码中获取路径 假设当前项目路径为:D:/wunian/workspace/JavaProject,现在来分别获取此项目中的各种路径. 1.获取资源文件(.class文件)所在路径(四种方式) ...
- 各种存储分配算法java代码实现_Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF...
1 概述 本文是利用Java实现操作系统中的四种动态内存分配方式 ,分别是:BF NF WF FF 分两部分,第一部分是介绍四种分配方式的概念以及例子,第二部分是代码实现以及讲解. 2 四种分配方式 ...
- java代码二进制转为十六进制_Java 中二进制转换成十六进制的两种实现方法
Java 中二进制转换成十六进制的两种实现方法 每个字节转成16进制,方法1 /** * 每个字节转成16进制,方法1 * * @param result */ private static Stri ...
- java代码的运行顺序_java中的代码块执行顺序
输入代码 blic static void main(String[] args) { { int x = 10;//限定变量的声明周期 System.out.println(x); } Studen ...
- java代码加载_java类中代码加载顺序
package org.senssic; /** * 一般顺序:静态块-->静态变量-->成员变量-->构造方法-->静态方法(或非静态方法,需要调用) * 1.静态代码块(只 ...
- 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图
51单片机 普中51 打地鼠游戏 仿真 程序 流程图 51单片机 普中51 打地鼠游戏 仿真 程序 流程图 普中51-单核-A3&A4开发板原理图 用到数码管.LED.矩阵按键 描述: (1) ...
- Java代码实现三维立体空间中两点距离的求解
资源下载地址:https://download.csdn.net/download/sheziqiong/86763912 资源下载地址:https://download.csdn.net/downl ...
最新文章
- 自动化监控--zabbix中的邮件报警通知详解
- Python关于中文字符前面的u(转载)
- kodi资源_kodi 展示播放 NAS 电影
- C#驱动级模拟按键操作
- kafka性能高的影响因素
- 开源GIS(十五)——openlayers通过geoserver中WFS删除要素
- 在哪里学python-深圳学python人工智能培训去哪里
- 批量实现 cv2.cvtColor(images, cv2.COLOR_GRAY2RGB)
- Visual studio code清除终端数据
- 天涯明月刀大地的服务器位置,天涯明月刀东海玉涡位置坐标指南[图]
- 三菱Q系列ST、结构化编程、QD77定位以及转矩模式切换案例
- 实战OpenPose项目1:开篇使用文档
- 基于arduino的WiFi无线传输
- 已解决:[emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forb
- 请不要再轻视Git —— 我在工作中是如何使用 Git 的
- pdf编辑软件哪个好?编辑pdf的软件分享一款,像word一样好用!
- BLE MESH组网(七)真机配置
- 利用telnet连接远程服务器端
- c语言自动贩卖机设计报告,自动贩卖机课程设计.doc
- 介绍python库的书籍_【介】 介怎么读|组词|读音|拼音|多音字|意思 - 辞海之家