欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java代码混淆

程序员文章站 2024-01-09 23:05:40
最近需要加代码混淆的功能。 研究了一下,使用开源的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

相关标签: Java