Java代码混淆

最近需要加代码混淆的功能。 研究了一下,使用开源的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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值