[转]java代码混淆以及及IDEA中springboot使⽤Allatori进⾏混
1. 原因
由于看到很多的java项⽬通过反编译jar包能够看到代码的具体实现,相当于将所有的逻辑都暴露在外,会造成很⼤的危险,因此,本次主要学习⼀下关于如何预防此类问题的⽅法,本⽂主要讨论通过代码混淆的⽅式来对打包出来的jar包进⾏处理
2. 代码混淆(取⾃百度百科)
百度百科对于代码混淆的解释:代码混淆亦称花指令,是将计算机程序的代码,转换成⼀种功能上等价,但是难于阅读和理解的形式的⾏为。代码混淆可以⽤于程序的源代码,也可以⽤于程序编译⽽成的中间代码。执⾏代码混淆的程序被称作代码混淆器。
主要是⾸先将代码中的各种元素,如变量,函数,类的名字改写成⽆意义的名字。⽐如改写成单个的字符,或者简短的⽆意义字母组合,甚⾄改写成"__"这样的符号,使得阅读的⼈⽆法通过名字猜测其⽤途;其次,重写代码的逻辑,使其变为功能上等价,但是更困难的理解形式。例如将for循环改成while循环,将循环改成递归,精简中间的变量等(视具体的混淆器功能⽽定);最后,打乱代码的格式,⽐如
删除空格,将多⾏代码挤到⼀⾏等
java的代码混淆就是对java的字节码(.class)⽂件进⾏混淆
混淆代码带来的问题:
Allatori主要保护⽅式:1.命名混淆、2.流混淆、3.调试信息混淆、4.字符串混淆以及⽔印技术
⽀持war和jar⽂件格式
此外使⽤Allatori打包的⼤⼩会⼩⼀点
项⽬⽬录:
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>
java技术介绍百度百科<resource>
<directory>${basedir}/allatori</directory>
<includes>
<include&l</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId&jo</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}/l</argument>
</arguments>
</configuration>
</plugin>
<!-- Allatori plugin end -->
主要需要关注的两个配置,⼀个是allatori的jar包地址,⼀个是指定混淆策略的xml⽂件
<argument>${basedir}/lib/allatori.jar</argument>
<argument>${basedir}/l</argument>
2) l⽂件
<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="l"/>
</config>
为配置策略的⽂件,后续会具体解释各个标签以及属性的名称l配置⽂件,此处只介绍具体
使⽤⽅法,其中的jar标签中的in为未混淆时打出的包名,可以在target⽬录下获取到,out为输出的混淆jar包的名称,可以与未混淆的jar包打出的包名⼀样
3) 打包步骤
(1)在控制台中执⾏mvn clean install (会报错,不⽤关⼼报错信息,此处执⾏主要是为了删除原有的target⽂件夹⽽后⽣成⼀个新的target⽂件夹)
(2)将l移动到target⽬录下⾯(在pom中配置了allatori的路径在target下,具体移动到其他⽬录下是否可⾏没试过,感兴趣的话可以尝试⼀下)
(3)前两步执⾏完毕后执⾏mvn install(千万不要执⾏mvn clean install或其他带clean的操作,否则需要重新将l⽂件移动到target下)
4) 成功后⼯程⽬录
5. 混淆遇到的问题
1)混淆主要是对java进⾏混淆,像是xml⽂件等⼀些配置⽂件不会被混淆
2)例如数据库连接mybatis这些需要和配置⽂件交互或者Autowired的不建议进⾏混淆,可以通过ignore-classes进⾏屏蔽
3)对于混淆来说,最好只混淆主要的逻辑,类似⼀些⽆脑的查库取库等⼀些简单的实现类不建议混淆
4)在进⾏mvn install时可能会出来单测失败的问题,这属于Spring启动问题,使⽤ mvn install -DskipTests

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。