最近在公司项目打包过程中要求要对项目中的代码进行混淆,
使反编译之后看到的代码的类的名称,成员变量,函数名称都变成无意义的a,b,c...
造成阅读代码的障碍,这也是核心技术保护的一种方法,
java中比较常用代码混淆工具就是proguard,自己在使用过程中也遇到了一些问题,
所以将使用过程记录下来,以作备忘。
主要步骤如下:
- 将web项目中的源码导出为jar,eclipse中可以很容易做到
- 下载proguard,地址:https://www.guardsquare.com/en/products/proguard
- 打开proguard中的bin下proguardgui.bat,启动gui工具,这里使用的proguard6.0.3
- 添加需要混淆的jar,图中1表示jar的数据路径,2表示jar输出路径,3表示项目使用到的所有jar,这里讲项目lib下的所有jar都添加了进来。
- 添加不需要混淆的类,可以设置类中的成员变量及方法,web项目中尤为需要注意的controller层的代码不能够被混淆,否则前端调用时可能会出现问题,我这里测试是这样的。
- 如果混淆之后运行服务在tomcat中出现java.lang.ClassFormatError类型的错误,可以在Optimizations位置添加!code/allocation/variable设置
- 执行混淆程序,为了方便下次使用,可以保存配置Save configuration,成功的执行没有任何warning信息和错误提示,提示Processing completed successfully表示混淆执行成功
- 通过解压工具打开jar,将混淆的代码拷贝没有混淆的项目的WEB-INF/classes下,具体根据你的项目情况替换掉,如果有提示duplicate的类之类的信息,根据提示重复的jar,可以返回第4步,移除掉重复jar,在重新执行混淆
- 启动tomcat服务验证是否能够正常执行,出现问题可以搜索相关问题。