Allatori混淆后在使用JVMTI加密

文章目录

  • 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)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02OvcnrO-1605158079872)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153004453.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzqQgoUQ-1605158079874)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153316601.png)]

配置修改

Clean.bat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FB0cRMVg-1605158079875)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153454474.png)]

config.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-agvWuDJo-1605158079877)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153775263.png)]

RunAllatori.bat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gho8WHqp-1605158079878)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605153894797.png)]

开始混淆

双击 RunAllatori.bat ,黑窗口会闪一下,文件夹中生成出了一个jar。

混淆前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDf7DcE2-1605158079879)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154287599.png)]

混淆后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVQ8voXJ-1605158079879)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154235362.png)]

启动混淆后jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-An9bzknW-1605158079880)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154425353.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bAJ8F2Hu-1605158079881)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154450699.png)]

注意:这里有个问题,我在混淆后的那个文件中启动jar ,报错->找不到主清单。原jar是启动没问题的。我把混淆后的jar,复制到项目target下,启动没问题。具体什么情况没有去仔细研究,先记录一下。

然后为了防止在出现JVMTI的问题,我又测试了一下,实体BandiZip压缩工具,解压出来,把.class拉到idea中,发现是被混淆的文件,那就是没问题了。

这是被idea打开下的controller,和jd-gui打开的,有很大的差距。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xcEnAsf-1605158079881)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605154771496.png)]

JVMTI加密

代码被混淆后,接下来是JVMTI的加密;

JVMTI的具体操作,单独写了一个博客, JVMTI对jar包加密解密 。需要安装工具。

生成.dll动态链接库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XetLZTT2-1605158079882)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155350646.png)]

java代码加密

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSEzpoxp-1605158079882)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155420131.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPiPEgnb-1605158079883)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155467919.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5BpyJfG-1605158079884)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155505133.png)]

加密后的jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-236Mi4Fg-1605158079884)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155602094.png)]

然后再去idea里查看是否还存在之前的问题,打开后是这样的,说明成功了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzuqBjZk-1605158079885)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155645792.png)]

开始解密jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqMVbJyq-1605158079885)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155736308.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmSPmQxN-1605158079886)(C:\Users\Kai\AppData\Roaming\Typora\typora-user-images\1605155758193.png)]

最后经过反复测试,没有什么问题。

JVMTI存在的问题

① 使用JVMTI多次测试,发现JVMTI加密对jar的打包有很大的要求,有自己的包格式,需要修改pom.xml里的bulid标签内容。

② 加密文件也是有要求,因为springboot中需要加载一些配置,在service中需要引用配置,但是加密这个service后,解密启动时会加载错误,魔数错误,JVM加载时读取不出来,网上也是翻烂了,都没有解决方案。可以通过选择性的文件加密,跳过一些文件的加密,是可行的,只不过会在加密时,C++端的动态链接库生成DLL和java端加密时的判断条件会增加很多。

混淆demo 0积分下载

Demo下载

在这里插入图片描述

借鉴资料

Allatori 混淆jar包
Allatori官网