JAVA代码保护从入门到放弃
2024-09-01 16:31:03
java语言开发的产品,需要部署到客户现场服务器.产生了对代码进行保护的需求,开始研究代码加密方式.
经过研究分析后有两种思路,混淆和加密.两者各自适应不同的情况.
由于大量spring注解功能,并且无明显的核心功能.因此首先放弃了混淆的方式.
然后开始研究ClassLoader和JVMTI,研究了老半天之后发现,Spring的注解扫描机制需要在项目启动时候扫描相关的class,通过asm自行解析class文件,加密class后导致读取类信息报错.
又开始把思路转向到class文件格式,考虑解析文件格式对其中方法body指令进行加密,保证类的名称接口注解都能被正常读取.研究期间发现不管用JNI还是JAVA代码实现解密过程,最终产生的byte[]都能被拦截获取到.
最终发现,通过获取loadedClass和字节码工具javassist直接能从内存中读取已加载的类,并保存成为class,再反编译成为源码.
到这里还没放弃,想着不行了自己拉取jvm源代码定制一个jvm,屏蔽掉jvmti等接口.
最终--放弃了编译jvm,这个想法是如此的扯淡.
然后又考虑使用混淆
翻了翻代码,没有核心代码,没有哪里是需要加密的.
最新文章
- CSS浮动文摘
- git使用ssh密钥
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- Visual Studio动态代码生成的实现基础
- HDU 4280 Island Transport(网络流)
- 新建的硬盘-mount
- 协方差cov
- asp.net2.0安全性(3)--验证与授权--转载来自车老师
- crm2011i创建nt类型字段
- Linux TCP连接数修改
- pandas 处理dataframe(一)
- Django学习-18-中间件
- spring中jedis对redis的事务使用注意总结
- 279. Perfect Squares(动态规划)
- spring Ioc容器之使用XML配置Bean
- linux echo设置颜色
- 一些应该使用mongodb或者其他文档存储而不是redis或mysql、oracle json的情形(最近更新场景)
- C# 通过copydata实现进程间通信
- 训练赛第一场D题
- 机械加工行业计划排程:中车实施应用易普优APS