文章目录
- Allatori代码混淆后在对jar进行JVMTI加密保护
-
- 使用场景
- Allatori
-
- Allatori简介
- Allatori使用
-
- 配置文件
- 配置修改
-
- Clean.bat
- config.xml
- RunAllatori.bat
- 开始混淆
-
- 混淆前
- 混淆后
- 启动混淆后jar
- JVMTI加密
-
- 生成.dll动态链接库
- java代码加密
- 加密后的jar
- 开始解密jar
- JVMTI存在的问题
- 混淆demo 0积分下载
- 借鉴资料
Allatori代码混淆后在对jar进行JVMTI加密保护
使用场景
由于使用JVMTI对jar进行加密,防止项目反编译。但是由于JVMTI加密只是针对于jar本身jvm类加载时加密保护,jar包查看方面还是存在安全隐患。使用JD-GUI查看jar中的.class文件,是被加密的,无法查看。但是经过测试发现,通过Bandizip压缩工具可以解压成包,把.class文件从解压包中拖入idea中,完全可以看到和加密前一模一样的编译代码。所有使用Allatori先混淆代码,在通过JVMTI加密。保证代码安全性。
Allatori
Allatori简介
Allatori是一个Java 混淆器,它属于第二代的混淆器,因此它能够全方位的保护你的知识产权。 Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串混淆,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。新版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。
Allatori使用
官方提供了一个demo文件,提供了一些代码混淆配置。
配置文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTUIq9Mm-1605158079871)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605152752776.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131533129.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02OvcnrO-1605158079872)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153004453.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131545673.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzqQgoUQ-1605158079874)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153316601.png)]](http://i2.wp.com/img-blog.csdnimg.cn/2020111213155894.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
配置修改
Clean.bat
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FB0cRMVg-1605158079875)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153454474.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131612772.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
config.xml
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-agvWuDJo-1605158079877)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153775263.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131626154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
RunAllatori.bat
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gho8WHqp-1605158079878)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153894797.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131638847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
开始混淆
双击 RunAllatori.bat ,黑窗口会闪一下,文件夹中生成出了一个jar。
混淆前
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDf7DcE2-1605158079879)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154287599.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131651754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
混淆后
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVQ8voXJ-1605158079879)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154235362.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131706379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
启动混淆后jar
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-An9bzknW-1605158079880)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154425353.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131731397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAJ8F2Hu-1605158079881)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154450699.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131745476.png#pic_center)
注意:这里有个问题,我在混淆后的那个文件中启动jar ,报错->找不到主清单。原jar是启动没问题的。我把混淆后的jar,复制到项目target下,启动没问题。具体什么情况没有去仔细研究,先记录一下。
然后为了防止在出现JVMTI的问题,我又测试了一下,实体BandiZip压缩工具,解压出来,把.class拉到idea中,发现是被混淆的文件,那就是没问题了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xcEnAsf-1605158079881)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154771496.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131811613.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
JVMTI加密
代码被混淆后,接下来是JVMTI的加密;
JVMTI的具体操作,单独写了一个博客, JVMTI对jar包加密解密 。需要安装工具。
生成.dll动态链接库
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XetLZTT2-1605158079882)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155350646.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131829679.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
java代码加密
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSEzpoxp-1605158079882)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155420131.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131842645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPiPEgnb-1605158079883)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155467919.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131856801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5BpyJfG-1605158079884)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155505133.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131919620.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
加密后的jar
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-236Mi4Fg-1605158079884)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155602094.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131934962.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
然后再去idea里查看是否还存在之前的问题,打开后是这样的,说明成功了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzuqBjZk-1605158079885)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155645792.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112131947587.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
开始解密jar
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqMVbJyq-1605158079885)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155736308.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112132003834.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29fbzgxNDIyMjE5OA==,size_16,color_FFFFFF,t_70#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmSPmQxN-1605158079886)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155758193.png)]](http://i2.wp.com/img-blog.csdnimg.cn/20201112132018828.png#pic_center)
最后经过反复测试,没有什么问题。
JVMTI存在的问题
① 使用JVMTI多次测试,发现JVMTI加密对jar的打包有很大的要求,有自己的包格式,需要修改pom.xml里的bulid标签内容。
② 加密文件也是有要求,因为springboot中需要加载一些配置,在service中需要引用配置,但是加密这个service后,解密启动时会加载错误,魔数错误,JVM加载时读取不出来,网上也是翻烂了,都没有解决方案。可以通过选择性的文件加密,跳过一些文件的加密,是可行的,只不过会在加密时,C++端的动态链接库生成DLL和java端加密时的判断条件会增加很多。
混淆demo 0积分下载
Demo下载

借鉴资料
Allatori 混淆jar包
Allatori官网