代码加密工具Proguard的使用记录

代码加密工具Proguard使用说明

CreateBy lln
CreateTime 2023-02-01
ProguardVersion 7.2.2

一、需求背景

需要对提供给客户的Java客户端代码进行混淆,破坏其可读性,防止核心代码被反编译。

二、技术选型

采用 ProGuard 工具软件进行代码加密混淆工作。
ProGuard是Java类文件收缩器、优化器、混淆器和预验证器。可以使代码库更小、更有效、更好地抵御逆向工程。
官网地址
https://github.com/Guardsquare/proguard
参考博客
https://blog.csdn.net/weixin_44462773/article/details/124172382

三、混淆效果展示

对于包名称,不进行混淆(可在加密时进行配置,但不推荐,会影响反射调用)
对于类,进行名称混淆。
对于特定的文件,如启动类、资源文件,不进行混淆。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、配置流程

以下是配置加密的步骤流程。

1 、打开GUI界面

通过官网下载最新的安装包,打开如图所示GUI操作界面,如下图所示。

在这里插入图片描述

2、功能菜单说明

ProGuard 主界面,用于加载配置文件
Input/Output 包选择界面,配置目标包信息和依赖包信息
Shrinking 代码收缩配置【未测试使用】
Obfuscation 代码加密配置
Optimization 代码优化配置【未测试使用】
Information 相关信息
Process 运行界面
ReTrace 回溯界面

3、加载配置文件

选择【Load configuration】加载【qjdc3d.pro】配置文件。

在这里插入图片描述

4、添加包信息

添加要加密的jar包、导出的jar包、依赖的jar包

在这里插入图片描述

5、进行加密配置

需要特殊配置的信息如下
1、项目代码的包结构,包的名称、不可变(影响部分反射代码)
2、ctrlAction相关的代码,类名称不可变(桌面端插件信息读取,需要扫描配置在xml中的类名称)
3、所有反射用到的实体类信息,字段及构造方法,不可变(有部分工具代码,是从dataset数据中通过实体对象的字段反射进行数据的匹配)
4、启动配置类,类名称、方法不可变(启动类有main函数)

在这里插入图片描述
在这里插入图片描述

五、采坑记录

1、所有参与了反射调用的代码、第三方框架的代码,通过类加载器进行特殊操作的代码,都不可变。否则会出现难以理解和调试的错误。如奇怪的Npe调用,奇怪的报错,程序秒退等。
2、不建议对包结构和路径进行改变,如名称混淆、压缩等。
3、在客户端插件系统中,不建议对代码进行压缩和优化操作,出现了很多无法处理的问题,如action无法识别,打不开部分功能。只建议进行加密操作。

六、配置文件修改步骤

加载配置文件后,导入的包路径,都不是自己的本地路径,可以将【.pro】文件打开,批量替换路径为自己的本地包,如下图。建议将jre的包和desktopx的所有包,都放在同一文件夹中,便于修改和关联。

在这里插入图片描述

七、思考和总结

1、如果需要代码加密工作,最好是在软件开发之初就进行规划,和不断集成测试。而不是在收尾阶段进行。
2、java代码的加密工作,注意事项,总得来说有2点,其一是所有和反射调用有上下文关联的代码,都要筛选出来进行特殊处理;其二是和资源文件关联的代码,也要注意不要因为特殊的混淆,导致文件名找不到而引发的后续报错。
3、如何进行有效的规划?最好在代码设计之初,就规划好哪些包需要加密(如核心算法,核心业务逻辑),在代码结构上加以区分,以便于后续处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
保护您的js代码; 演示代码: function Save_View() { var idx =document.getElementById("idx");//项目ID var xmmc =document.getElementById("xmmc");//项目名称 var szqy =document.getElementById("szqy");//所在区域 var kfsmc =document.getElementById("kfsmc");//开发商名称 var xxdz =document.getElementById("xxdz");//详细地址 var zjzmj =document.getElementById("zjzmj");//总建筑面积 if(xmmc.value=="") { alert("请填写项目名称"); xmmc.focus(); return false; } if(kfsmc.value=="") { alert("请填写开发商名称"); kfsmc.focus(); return false; } if(xxdz.value=="") { alert("请填写详细地址"); xxdz.focus(); return false; } if(zjzmj.value=="") { alert("请填写总建筑面积"); zjzmj.focus(); return false; } } 加密代码: function Save_View() { var Jy_eNph1 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x69\x64\x78");//项目ID var E2 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x78\x6d\x6d\x63");//项目名称 var gEXwty3 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x73\x7a\x71\x79");//所在区域 var jH4 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x6b\x66\x73\x6d\x63");//开发商名称 var bbSRLoGP5 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x78\x78\x64\x7a");//详细地址 var dY_boQtws6 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x7a\x6a\x7a\x6d\x6a");//总建筑面积 if(E2["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u9879\u76ee\u540d\u79f0"); E2["\x66\x6f\x63\x75\x73"](); return false; } if(jH4["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u5f00\u53d1\u5546\u540d\u79f0"); jH4["\x66\x6f\x63\x75\x73"](); return false; } if(bbSRLoGP5["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u8be6\u7ec6\u5730\u5740"); bbSRLoGP5["\x66\x6f\x63\x75\x73"](); return false; } if(dY_boQtws6["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u603b\u5efa\u7b51\u9762\u79ef"); dY_boQtws6["\x66\x6f\x63\x75\x73"](); return false; } } 变量完全是随机的,很好很实用。 喜欢就下载喽··~~

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值