Java代码混淆
程序员文章站
2022-04-01 20:46:35
最近需要加代码混淆的功能。 研究了一下,使用开源的Proguard, 参考文档能成功的进行混淆,但是运行的时候还是报错哦。 提示Bean重复定义了。原因是Proguard简单的将名字改为a-z的字符。spring工程初始化bean检测到重复了,就报错。后来的解决方法是修改bean的命名策略。@SpringBootApplicationpublic class MvcDemoApplication { public static class CustomGenerator implements B...
最近需要加代码混淆的功能。 研究了一下,使用开源的Proguard, 参考文档能成功的进行混淆,但是运行的时候还是报错哦。 提示Bean重复定义了。
原因是Proguard简单的将名字改为a-z的字符。spring工程初始化bean检测到重复了,就报错。后来的解决方法是修改bean的命名策略。
@SpringBootApplication
public class MvcDemoApplication {
public static class CustomGenerator implements BeanNameGenerator {
// 为了配合proguard使用,需要自定义bean的命名策略为结合包名的,
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
return definition.getBeanClassName();
}
}
public static void main(String[] args) {
new SpringApplicationBuilder(MvcDemoApplication.class)
.beanNameGenerator(new CustomGenerator())
.run(args);
}
}
接下来运行,还是报错,因为项目中用了Mybatis, Mapper混淆后,xml中却没有混淆,所以对应不上。我的解决方案是不混淆Mybatis生成的代码:
所以在proguard.cfg中加一行
-keep class com.xxx.xxx.xxx.mybatis.** { *; }
结果就可以了。Proguard混淆的效果不是太好,类成员变量没有改变。不知道是不是我没有配置对,有做过的小伙伴可以告知一下。
后面我又尝试了第二代混淆器Allatori,官网http://www.allatori.com, 官网下载demo来尝试了一下,效果还不错。混淆后代码基本看不懂。 注意,也需要修改bean的命名策略,否则也是重复定义bean,如果用了mybatis的xml,那么entity与mapper也不能混淆哦。
需要在配置文件中配置一下
<ignore-classes>
<class template="class *springframework*" />
<class template="class *shardingjdbc*" />
<class template="class *jni*" />
<!-- 排除如mybatis生成的entity与mapper -->
<class template="class com.xxx.xxx.mybatis.*" />
</ignore-classes>
Allatori与Maven结合的例子可以参考大神的博客
https://www.freesion.com/article/3922411457/
本文地址:https://blog.csdn.net/favormm/article/details/110231094
上一篇: 中国第一条机器人焊接生产线