近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献。
于是,公司写的一大堆WEB项目也想做保护。但几大问题随之而来:
针对以上问题,本人花费一个月研究了WEB+Maven项目的混淆,终于收获果实,解决了这一大空缺难题。
就如之前所述,我们要混淆的项目绝不是一个简单的WEB DEMO,必须要包含了大量第三方框架。
本文中介绍的项目使用了主流的一些框架:
该项目是典型的Maven WEB项目,对于Maven WEB项目的结构不再赘述,这里对各种包做一下解释:
主要混淆对象 对类的名称、属性、方法名都进行混淆
次要混淆对象 对类的名称不混淆,类的属性、方法名选择性混淆
非混淆对象 不进行混淆,混淆后可能出现异常
本文的重头戏,使用Maven集成的ProGuard插件,混淆配置不用单独建立文件
4.0.0
war
...
zhukun.shiro-spring
1.0-SNAPSHOT
UTF-8
4.12
1.2
3.1.0
1.2.17
1.7.10
1.6.12
1.1.3
3.2.1
1.3.1
1.2.3
1.0.15
5.1.30
3.3.0
1.2.3
1.2.16
1.3.2
4.1.1.RELEASE
2.5.0
1.0.0
9.2.7.v20150116
2.3.2
junit
junit
${junit.version}
javax.servlet
jstl
${jstl.version}
log4j
log4j
${log4j.version}
org.aspectj
aspectjweaver
${aspectj.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
commons-logging
commons-logging
${commons-logging.version}
org.apache.shiro
shiro-core
${shiro.version}
org.apache.shiro
shiro-web
${shiro.version}
org.apache.shiro
shiro-spring
${shiro.version}
org.apache.shiro
shiro-ehcache
${shiro.version}
org.apache.shiro
shiro-quartz
${shiro.version}
commons-collections
commons-collections
${commons-collections.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
javax.servlet
javax.servlet-api
${servlet.version}
commons-fileupload
commons-fileupload
${commons-fileupload.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
com.github.miemiedev
mybatis-paginator
${mybatis-paginator.version}
com.fasterxml.jackson.core
jackson-core
${jackson.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
com.fasterxml.jackson.core
jackson-annotations
${jackson.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-test
${spring.version}
test
org.patchca
patchca
${patchca.version}
shiro-spring
src/main/java
**/*.xml
src/main/resources
org.apache.maven.plugins
maven-compiler-plugin
${maven-compiler.version}
1.7
UTF-8
org.eclipse.jetty
jetty-maven-plugin
${jetty.version}
/shiro-spring
8080
org.mybatis.generator
mybatis-generator-maven-plugin
${mybatis-generator.version}
true
true
com.github.wvengen
proguard-maven-plugin
2.0.11
package
proguard
true
true
pg
${project.build.finalName}-pg.jar
${java.home}/lib/rt.jar
com/chinatelecom/gz/wy/zhukun/shiro_spring/**
classes
${project.build.directory}
以上代码中的注释足够各位参考了,若有问题欢迎留言
clean package -DskipTests
使用Maven运行以上代码,执行完成后在target目录中会生成三个文件:
混淆完成后,将classes-pg.jar解压到应用服务器覆盖原有的classes文件,通常目录为
X:\jetty9或tomcat7\webapps\shiro-spring\WEB-INF\classes
运行服务,项目运行正常
既然是混淆了的代码,那我们现在作为盗码者来反编译一下classes文件
可以看出,混淆成功了,盗码者读起来不是一二般的痛苦,我们的目的已经达到
欢迎大家讨论更加的代码保护方案,代码是我们辛苦的成果,绝不让他人非法盗取。当然,本文在非本人的同意下也禁止盗用,转载的话说明出处,谢谢合作!
注:本文中提到的项目源码为商业机密,恕不提供,谢谢!
https://blog.csdn.net/wltj920/article/details/48970869