[转]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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值