xhood是一款maven混淆插件,能够对项目源代码提供防护,避免遭受知识产权的侵害
🍊 【功能完善】 支持包名/类名/类成员名/方法名/方法参数名/局部变量名/临时变量名/常量混淆操作
🍒 【配置灵活】 不同信息的混淆均可独立使用互不影响,可指定混淆部分/忽略部分
🍓 【适配全面】 基于asm对class文件进行修改,普通项目/springboot项目/jar包/war包均可使用
🍅 【使用便捷】 直接配置maven插件,混淆无感知,对开发部署无额外侵入
🧀 混淆插件测试示例请见demo文件夹项目
🌮 springboot项目的混淆测试使用了自己写的一个后台管理系统,已配置完成
混淆插件需要配置在原有编译插件(如果有)之前
<plugin>
<groupId>com.code2roc</groupId>
<artifactId>xhood</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>obscure</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<packageName>com.code2roc.obscure.demo</packageName>
<obscureIgnoreClasss>com.code2roc.obscure.demo.Application</obscureIgnoreClasss>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.code2roc</groupId>
<artifactId>xhood</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>obscure</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
</plugin>
<configuration>
<!--global-->
<packageName>xxxxx</packageName>
<obscurePackages></obscurePackages>
<obscureIgnorePackages></obscureIgnorePackages>
<obscureIgnoreClasss></obscureIgnoreClasss>
<!--package -->
<obscurePackage>true</obscurePackage>
<obscurePackageIgnorePackages></obscurePackageIgnorePackages>
<!--class -->
<obscureClass>true</obscureClass>
<obscureClassPackages></obscureClassPackages>
<obscureClassIgnorePackages></obscureClassIgnorePackages>
<obscureClassIgnoreClasss></obscureClassIgnoreClasss>
<!--method -->
<obscureMethod>true</obscureMethod>
<obscureMethodPackages></obscureMethodPackages>
<obscureMethodIgnorePackages></obscureMethodIgnorePackages>
<obscureMethodIgnoreClasss></obscureMethodIgnoreClasss>
<!--field -->
<obscureField>true</obscureField>
<obscureFieldPackages></obscureFieldPackages>
<obscureFieldIgnorePackages></obscureFieldIgnorePackages>
<obscureFieldIgnoreClasss></obscureFieldIgnoreClasss>
<!--local -->
<obscureLocal>true</obscureLocal>
<obscureLocalPackages></obscureLocalPackages>
<obscureLocalIgnorePackages></obscureLocalIgnorePackages>
<obscureLocalIgnoreClasss></obscureLocalIgnoreClasss>
<!--paramter -->
<obscureParamter>true</obscureParamter>
<obscureParamterPackages></obscureParamterPackages>
<obscureParamterIgnorePackages></obscureParamterIgnorePackages>
<obscureParamterIgnoreClasss></obscureParamterIgnoreClasss>
<!--constant -->
<obscureConstant>true</obscureConstant>
<obscureConstantPackages></obscureConstantPackages>
<obscureConstantIgnorePackages></obscureConstantIgnorePackages>
<obscureConstantIgnoreClasss></obscureConstantIgnoreClasss>
</configuration>
配置项 | 配置参数 | 参数类型 | 备注 |
---|---|---|---|
全局配置 | packageName | string | 项目根包名,例如com.code2roc.obscure |
obscurePackages | list | 执行混淆操作的包名列表,默认根包名 | |
obscureIgnorePackages | list | 忽略执行混淆操作的包名列表,默认空 | |
obscureIgnoreClasss | list | 忽略执行混淆操作的类列表,默认空 | |
包名混淆 | obscurePackage | bool | 是否混淆包名,默认true |
obscurePackageIgnorePackages | list | 忽略混淆包名列表,默认根包名 | |
类名混淆 | obscureClass | bool | 是否混淆类名,默认true |
obscureClassPackages | list | 混淆类名包列表,默认空 | |
obscureClassIgnorePackages | list | 忽略混淆类名包列表,默认空 | |
obscureClassIgnoreClasss | list | 忽略混淆类名类列表,默认空 | |
方法名混淆 | obscureMethod | bool | 是否混淆方法名,默认true |
obscureMethodPackages | list | 混淆方法名包列表,默认空 | |
obscureMethodIgnorePackages | list | 忽略混淆方法名包列表,默认空 | |
obscureMethodIgnoreClasss | list | 忽略混淆方法名类列表,默认空 | |
成员变量名混淆 | obscureField | bool | 是否混淆成员变量名,默认true |
obscureFieldPackages | list | 混淆成员名包列表,默认空 | |
obscureFieldIgnorePackages | list | 忽略混淆成员变量名包列表,默认空 | |
obscureFieldIgnoreClasss | list | 忽略混淆成员变量名类列表,默认空 | |
局部变量名混淆 | obscureLocal | bool | 是否混淆局部变量名,默认true |
obscureLocalPackages | list | 混淆局部变量名包列表,默认空 | |
obscureLocalIgnorePackages | list | 忽略混淆局部变量名包列表,默认空 | |
obscureLocalIgnoreClasss | list | 忽略混淆局部变量名类列表,默认空 | |
方法参数名混淆 | obscureParamter | bool | 是否混淆方法参数名,默认true |
obscureParamterPackages | list | 混淆方法参数名包列表,默认空 | |
obscureParamterIgnorePackages | list | 忽略混淆方法参数名包列表,默认空 | |
obscureParamterIgnoreClasss | list | 忽略混淆方法参数名类列表,默认空 | |
常量混淆 | obscureConstant | bool | 是否混淆常量,默认true |
obscureConstantPackages | list | 混淆常量包列表,默认空 | |
obscureConstantIgnorePackages | list | 忽略混淆常量包列表,默认空 | |
obscureConstantIgnoreClasss | list | 忽略混淆常量类列表,默认空 |
🐯根包名packageName必填,其余可以为空,obscurePackages默认为packageName
🐮如果执行类名混淆,obscureIgnoreClasss必填,需要排除启动类,否则无法运行
🐵list类型配置示例如下,将父级配置标签名(obscureClassIgnoreClasss)末尾s去掉,就是列表中item的配置项标签名称(obscureClassIgnoreClass)
<obscureClassIgnoreClasss>
<obscureClassIgnoreClass>com.code2roc.demo.xxx</obscureClassIgnoreClass>
</obscureClassIgnoreClasss>
🐷如果子项的混淆包名列表配置了,以子项为准,否则使用全局配置,示例如下
📒全局混淆包配置为
<obscurePackages>com.code2roc.obscure</obscurePackages>
📒方法名混淆包配置为
<obscurePackages>com.code2roc.obscure.demo</obscurePackages>
📒则最后执行方法名混淆时,只会混淆com.code2roc.obscure.demo包下的方法
🐹子项的忽略包名列表/忽略类名列表配置 = 全局配置和子项配置的交集,示例如下
📙全局混淆忽略class配置为
<obscureIgnoreClasss>
<obscureIgnoreClass>com.code2roc.demo.test1<<obscureIgnoreClass>/>
<obscureIgnoreClass>com.code2roc.demo.test2<<obscureIgnoreClass>/>
</obscureIgnoreClasss>
📙方法名混淆忽略class配置为
<obscureParamterIgnoreClasss>
<obscureParamterIgnoreClass>com.code2roc.demo.test1<<obscureParamterIgnoreClass>/>
</obscureParamterIgnoreClasss>
📙则最后执行方法名混淆时,只会忽略com.code2roc.demo.test1这个类
🐪忽略配置支持通配符操作(包括全局配置和子项配置),示例如下
📘忽略所有名为model的包下类的混淆操作
<obscureIgnorePackages>
<obscureIgnorePackage>*/model</obscureIgnorePackage>
</obscureIgnorePackages>
📘忽略所有以Util结尾的类的混淆操作
<obscureIgnoreClasss>
<obscureIgnoreClass>*Util</obscureIgnoreClass>
</obscureIgnoreClasss>
🌵 在springboot项目中,我们需要进行一些配置避免导致项目无法运行或运行错误
🍁所有需要通过接口返回的实体类需要忽略,例如数据库实体DO
🍂通过ConfigurationProperties映射的yml文件配置项类需要忽略
🍄通过类名/字段名反射调用的类需要忽略
🌴针对@Aspect注解切面进行了兼容,参照如下写法则混淆无影响
PointCut注解/类需要指定全名,Around注解指定方法名
@Aspect
@Component
public class RepeatSubmitAspect {
/**
* 切面点 指定注解
*/
@Pointcut("@annotation(com.code2roc.fastboot.framework.submitlock.SubmitLock) " +
"|| @within(com.code2roc.fastboot.framework.submitlock.SubmitLock)")
public void repeatSubmitAspect() {
}
/**
* 拦截方法指定为 repeatSubmitAspect
*/
@Around("repeatSubmitAspect()")
public Object around(ProceedingJoinPoint point) throws Throwable {
return point.proceed();
}
}
👳♂️ 源代码
👲 混淆代码
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。