ClassFinal是一款java class文件安全加密工具
https://www.zhihu.com/question/307716152/answer/1213750791
作者:不带你这样的
链接:https://www.zhihu.com/question/307716152/answer/1213750791
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
正好这段时间研究了下,商用的不太清楚,开源jar加密分为两种一种代码混淆,一种字节码转换。
字节码混淆,主要思路就是的对类名,变量名和方法名,局部参数名进行替换,让其命名变得无意义,很难读懂,但不影响其逻辑,但对于有耐心的人,还是能看明白!具体实现是在编译前做的混淆,还是编译后做的混淆,这个没用过不太清楚。
字节码转换,分为两块,一块是加密,对编译后class文件进行字节码转换(可以采用加密算法,字节码异或运算或自己定义规则);一块是解密,就是在类加载的时候对加密的字节码进行解密。加密这块因为在本地对class文件字节码转换,比较简单,方式也随意;解密这块主要围绕类加载器来做文章,又可分为java版实现和C/C++版实现,java版主要基于-agentJava:xxx.jar,通过Premain-Class,向Instrumentation注入ClassFileTransformer实现,自己在ClassFileTransformer中对需要解密的class文件进行解密;C/C++主要使用-agentpath:xxx.so,基于JVMTI通过C/C++实现,对类加载过程进行操作。
总体来说:代码混淆和字节码转换可以结合,例如,先代码混淆后,再对字节码加密,运行时对字节码解密。代码混淆,上手最简单,加密级别比较低,也容易破解。字节码转换,java版本对于java熟练人员上手很快,加密级别一般,个人理解该方式一个缺陷就是对于想加密的内容加密了,但解密方式暴露了,如果能够隐藏好解密方式,加密安全系数还是蛮高;C/C++版加密级别最高,但需要对java和C/C++都很熟练,而且需要研究JVMTI相关知识,如果真的实现了基本无破解风险,不过对于SpringBoot等框架,其内部会直接分析class文件,有些坑需要解决。
另外一个问题就是,使用jar加密这块,需要确定好是对运行的主程序jar包加密,还是第三方jar加密,其还是有部分差异的。
在Github上有几个项目可以参考:
XJar:https://github.com/core-lib/xjar
字节码转换java版,国人实现,稍微研究了下,不太深入,其内部是对class文件完全加密,其加密过程会对jar中META-INF/MANIFEST.MF修改,将原有Main-Class修改为Jar-Main-Class,并增加Main-Class,启动Main-Class时,在原有类加载器的同层中,增加一个自定义的类加载器,通过该类加载器实现加密文件的解密,然后反射调用Jar-Main-Class对应类的main放,去启动应用。官网号称对SpringBoot应用支持,但是需要自己对框架部分编译打包。算是比较灵活,但还是存在该方式的统一缺陷。另外,因为其修改了Main-Class,所以只支持主程序jar加密,不能单独把第三方工具jar加密,如果第三方工具jar要加密,需要主程序一起加密。
ClassFinal:Mr.K/ClassFinal
基于字节码转换java版,国人实现的,蛮不错的,对SpringBoot支持也好,其逻辑就是基于-agentJava:xxx.jar这一套原理,加密时对class文件做了两次处理,一次是对class文件的字节码完全加密,一次是对class文件混淆,这个混淆是保留成员和方法,对方法内部实现进行隐藏;解密时,判断如果该类是自己加密过的,找到完全加密的字节码进行解密,如果不是自己加密的就跳过。其对class文件混淆,就是方便类似SpringBoot等三方框架直接分析class文件。好处就是,如果你是个工具包,加密后给其它人,其他人编程时引用或者编译都不影响,但是运行时需要加密方支持,给出秘钥之类的。比较灵活和好用,也存在该方式的统一缺陷,不过其支持主程序jar加密,也支持单独的第三方工具jar加密。
JarEncrypt:https://github.com/zhikun0704/api-zxv-jvmit
基于字节码转换C/C++版,基于JVMIT个人实现的,稍微研究了下,其支持对部分class加密,对应一般java应用问题不大,但对于SpringBoot项目支持可能有些问题。因本人C++水平有限,没有深层次研究,希望有C/C++和java都熟悉的大神有空搞一套完整的。
个人目前借鉴ClassFinal方案,不过加密采用C/C++实现,把秘钥和算法隐藏了起来,不过还是绕不过该方式的统一缺陷,jar包加密了,但是解密程序是在java中运行,不能将解密程序自己也加密了,好的隐藏手段就是采用C/C++基于JVMIT实现类加载,但是本人C/C++水平有限。有幸接触过别的公司产品,是在C/C++中实现类加载器,而且运行良好,这篇算是这段研究成果的总结吧,大家可以借鉴下,如果有问题请大家指正,共同进步!互勉!
http://dandelioncloud.cn/article/details/2021012001012506099
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。
2.maven 插件方式声明
####
<plugin><!-- https://gitee.com/roseboy/classfinal --><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId><version>${classfinal.version}</version><configuration><password>39F0DD48D0C4493887028AE3C043D9D1D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码--><packages>com.chinamed,com.chinaSmed</packages><cfgfiles>application.yml,application.properties</cfgfiles><excludes>org.spring</excludes><libjars>l-common-1.0.0.jar,x-api-1.0.0.jar,s-service-1.0.0.jar</libjars></configuration><executions><execution><phase>package</phase><goals><goal>classFinal</goal></goals></execution></executions>
</plugin>
机器吗获取:
启动方式:
windowsjava -javaagent:/workback/zjjar.jar="-pwd 000000" -jar lma--api-3.6.9-encrypted.jar--linuxjava -javaagent:classfinal-fatjar.jar='-pwd 39F0DD48D0C4493887028AE3C043D9D1D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E' -jar lma-api-3.5.54-encrypted.jarjava -javaagent:classfinal-fatjar.jar='-pwdname pass' -jar lma--api-3.5.54-encrypted.jar
ClassFinal是一款java class文件安全加密工具相关推荐
- 常用的6款Java开源报表制作工具
本文为大家推荐6款常用的Java开源报表制作工具,供开发者学习.参考. 1.Aspose.Cells for JasperReports 一个基于Java的开源报表工具,它可以在Java环境下像其他I ...
- 这款Java性能调优工具,真的很强!
点击关注公众号,实用技术文章及时了解 作者:朝雨忆轻尘 cnblogs.com/xifengxiaoma/p/9402497.html JVisualVM 简介 VisualVM 是Netbe ...
- Linux系统下10款文件和磁盘加密工具
本文我们将重点转向加密方法,因为我们为您的Linux机器提供了10个最佳文件和磁盘加密软件. 1.Tomb Tomb是一个免费的开源工具,可以轻松加密和备份GNU/Linux系统上的文件. 它由一个简 ...
- Java免费文件安全加密解密
官网地址:C#/VB.Net Excel, Word, PowerPoint, PDF Component - Welcome to e-iceblue Company Ltd Java集成Excel ...
- 推荐10款 Java 程序员测试工具
点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 前言 随着DevOp的不断流行,自动化测试慢慢成为Java开发者的关注点.因此,本文将分享10款优秀 ...
- 6 款 Java 8 自带工具,轻松分析定位 JVM 问题!
这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题. 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息. ...
- 收集6 款 Java 8 自带工具,轻松分析定位 JVM 性能问题!
这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题. 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息. ...
- 文件高级加密大师。It‘s very strong!!!!!!这款功能强大的加密工具,你值得拥有。
下载链接见尾页: 链接:https://pan.baidu.com/s/1LNhQdss_m_wC2I4dbKujrQ 提取码:dsvm
- Java Class 加密工具 ClassFinal
Jar包加密工具 ClassFinal 介绍 环境依赖 使用说明 下载 加密 命令行 示例 maven插件方式 无密码模式 机器绑定 启动加密后的jar 启动参数给密码 不加密码参数直接启动 1. 密 ...
- Java实现几种加密工具类
在我们的程序员之路上,肯定少不了加密的协助,比如最常见的MD5与sha这两种加密,这次我给大家带来的是不用任何操作,直接粘上就能用的加密工具类(懒惰程序员的福音),好了话不多说,直接如下: impor ...
最新文章
- lamp配置python_LAMP自动化安装脚本
- 背包问题(Knapsack problem)采用动态规划求解
- AndroidWear开发之开发环境[前奏]
- 【问题】HDFS中块(block)的大小为什么设置为128M?
- springboot集成Apollo分布式配置
- 属性访问器(Property Accessor)----Setter/Getter
- 前端小白到技术专家,可能么?
- [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金
- centos 6.7 安装 最新版 git
- Android 之WebView实现下拉刷新和其他相关刷新功能
- mysql hang and srv_error_monitor_thread using 100% cpu(已解决)
- jmeter登录配置
- tomcat日志按天分割
- r语言实现自相关分析和偏相关分析
- 做python少儿编程教程-基于海龟编辑器python少儿编程
- pytorch nn.AdaptiveAvgPool2d(1)
- EXCEL 查漏补缺内容
- 静态库、动态库及导入库
- c fread 快读 详解_热量计算公式及例题详解
- 计算机科学与实践,【计算机科学与技术学院|实践实况】(一)
热门文章
- 浅谈YOLOV2与YOLOV3
- yoloV3的惊艳结果--比较yoloV2
- 整体橱柜效果图软件测试,别被效果图骗了,最适合中国人的厨房设计是这样的...
- 矩阵按键原理和BUG
- 高翔orbslam_ORB SLAM 2 + 构建点云地图 复现
- 微信emoji表情编码的处理与储存
- 如何快速调出软键盘_天生我材必有用 | 如何快速的计算和调用防火阀、调节阀、铝合金风口等材料价格...
- 微擎框架对接第三方短信接口教程
- 免费开源BI工具DataEase实现了SQL数据集动态传参?冲冲冲!!!
- 【转】推荐系统算法总结(一)