Java 代码混淆 - allatori
项目结构:
1
2
3
4
5
6
7
8
.
├── lib
│ ├── allatori-annotations.jar
│ ├── allatori.jar
│ └── allatori.xml
├── pom.xml
└── src
└── main...
配置 maven 以插件的形式加载 allatori.jar 对打包后的项目 jar 包进行混淆处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<!-- 执行这个插件的时候执行申明的所有 phase -->
<execution>
<id>copy-and-filter-allatori-config</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 最终 jar 包存放的位置 -->
<outputDirectory>${basedir}/target</outputDirectory>
<resources>
<resource>
<!-- 配置 allatori.jar 和 allatori.xml 所在目录 -->
<directory>${basedir}/lib</directory>
<includes>
<!-- 配置文件文件名 -->
<include>allatori.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
allatori.xml 配置内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<config>
<input>
<!-- in 表示传入的原始 jar 包位置,out 表示输出的混淆后的 jar/war 包 -->
<jar in="../target/jshERP-exploit-1.0.1-jar-with-dependencies.jar"
out="../target/jshERP-exploit-1.0.1-jar-with-dependencies-obfuscated.jar"/>
</input>
<classpath>
<jar name="/Users/hony/.m2/repository/**/*.jar"/>
</classpath>
<keep-names>
<class access="protected+">
<field access="protected+"/>
<method access="protected+"/>
</class>
</keep-names>
<property name="log-file" value="log.xml"/>
<!-- 忽略的包或类,这些文件将不被混淆 -->
<ignore-classes>
<!-- 不要混淆主类 -->
<class template="class com.hony.Main" />
<!-- 不要混淆第三方的代码,否则会运行jar包会报错java.lang.NoClassDefFoundError -->
<!-- <class template="class com.hony.util.JavassistUtils" />-->
<class template="class com.hony.template.DefinePlugin" />
<class template="class *starblues*" />
<class template="class *miglayout*" />
<class template="class *formdev*" />
<class template="class *alibaba*" />
<class template="class *org*" />
<class template="class *woodpecker*" />
<class template="class *tomcat*" />
<class template="class *springframework*" />
<class template="class *lombok*" />
</ignore-classes>
<!-- 到期时间(到期后无法启动jar) 格式:yyyy/mm/dd-->
<!--<expiry date="2021/04/03" string="SERVICE EXPIRED!"/>-->
<!-- 随机命名混淆字符-->
<!--<property name="random-seed" value="abcdef ghnljk svi"/>-->
</config>
最后,就可以使用 mvn package
打包了。
本文由作者按照 CC BY 4.0 进行授权