使用ClassFinal对SpringBoot项目加密

ClassFinal仓库

演示项目地址

ClassFinal有两中方式对项目进行加密。

  1. Maven plugin方式,由于使用plugin加密时,本人打包时会报错,暂时未解决```java Caused by: compile error: no such class: net.roseboy.classfinal.JarDecryptor at javassist.compiler.MemberResolver.searchImports(MemberResolver.java:479) at javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:422) at javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:329) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:711) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) at javassist.compiler.TypeChecker.atVariableAssign(TypeChecker.java:274) at javassist.compiler.TypeChecker.atAssignExpr(TypeChecker.java:243) at javassist.compiler.ast.AssignExpr.accept(AssignExpr.java:43) at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:360) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) at javassist.compiler.Javac.compileStmnt(Javac.java:578) at javassist.CtBehavior.insertAt(CtBehavior.java:1224) … 30 more ```
  1. 手动加密
    过程

    1. 下载ClassFinal的jar包(classfinal-fatjar.jar)
    2. 对演示项目执行打包命令,将classfinal-fatjar.jar(加密jar包), springboot-usage.jar(演示项目jar包)置于同一目录,且路径中不含中文
    3. 然后执行加密命令

      1. java -jar classfinal-fatjar.jar -file usage.jar -packages privs.nb.demo.api -exclude privs.nb.demo.SpringbootUsageApplication -pwd 123456 -Y
    4. 执行成功后获得 springboot-usage-encrypted.jar
      ClassFinal加密 - 图1

此时项目已加密完成,使用解压缩工具打开jar后, 可以看到配置的需要加密的package下的相关类的所有实现方法均已消失,除此之位的其他都保持不变

使用命令启动加密后的jar

  1. java -javaagent:springboot-usage-encrypted.jar='-pwd 123456' -jar springboot-usage-encrypted.jar

可以正常启动
ClassFinal加密 - 图2

可以尝试访问加密相关的接口

ClassFinal加密 - 图3

可以正常访问