一种防止反编译的方法、系统、装置及存储介质制造方法及图纸

技术编号:34039508 阅读:17 留言:0更新日期:2022-07-06 13:08
本发明专利技术实施例提供了一种防止反编译的方法、系统、装置及存储介质,其中,方法包括:在初始源代码中添加第一预设成员变量和第二预设成员变量,获得第一目标源代码,获取第一目标源代码中各判断逻辑代码块的布尔表达式,利用第一预设成员变量和第二预设成员变量,按照预设替换规则,对布尔表达式执行替换操作,获得第二目标源代码,编译第二目标源代码,获得初始Class文件,按照预设常量同名化规则,对初始Class文件进行同名化处理,获得目标Class文件。本发明专利技术基于Java语言规范与虚拟机规范的差异性,通过替换操作和同名化处理,使得目标Class文件既可以被虚拟机正常运行,又无法被反编译成合法的具有可读性的Java源代码。可见,本发明专利技术可以防止Java源代码被反编译。本发明专利技术可以防止Java源代码被反编译。本发明专利技术可以防止Java源代码被反编译。

A method, system, device and storage medium for preventing Decompilation

【技术实现步骤摘要】
一种防止反编译的方法、系统、装置及存储介质


[0001]本专利技术涉及计算机安全领域,特别是涉及一种防止反编译的方法、系统、装置及存储介质。

技术介绍

[0002]Java作为一种面向对象编程的计算机语言,其依托高效、开源、易维护等特性得到了广泛的应用。但是,由于Java语言的上述特性,导致Java Class文件存在被反编译的风险。不法分子通过获取的程序包,将程序包反编译为源代码,很容易发现软件的内部接口。通过该内部接口,利用非法手段绕过软件的校验机制,从而实现对服务器中信息进行窃取或破坏等行为。
[0003]目前防止反编译的技术手段,主要是通过对Java Class文件进行加密或对变量名进行混淆。但是,由于Java Class文件需要在虚拟机中运行才能实现既定的功能,而虚拟机所能识别的Java Class文件必须是解密或恢复正常变量的正常状态。因此,不法分子可以通过虚拟机将已解密或恢复正常状态的Class文件转储到本地,从而实现根据该Class文件实现反编译。因此,如何防止Java源代码被反编译,已成为亟待解决的问题。

技术实现思路

[0004]本专利技术实施例的目的在于提供一种防止反编译的方法、系统、装置及存储介质,以实现防止Java源代码被反编译。具体技术方案如下:
[0005]一种防止反编译的方法,所述方法包括:
[0006]在初始源代码中添加第一预设成员变量和第二预设成员变量,获得第一目标源代码,其中,所述第一预设成员变量和所述第二预设成员变量不同。
[0007]识别所述第一目标源代码中各判断逻辑代码块的布尔表达式。
[0008]利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达式执行替换操作,获得第二目标源代码。
[0009]编译所述第二目标源代码,获得初始Class文件。
[0010]按照预设常量同名化规则,对所述初始Class文件进行同名化处理,获得目标Class文件。
[0011]可选的,所述识别所述第一目标源代码中各判断逻辑代码块的布尔表达式,包括:
[0012]遍历所述第一目标源代码,对所述第一目标源代码中的各代码块:根据预设目标代码块识别规则,判断该代码块中是否存在判断逻辑代码,若是,则将该代码块确定为所述判断逻辑代码块。
[0013]识别各判断逻辑代码块的所述布尔表达式。
[0014]可选的,所述布尔表达式分为第一类型和第二类型,所述第一类型的所述布尔表达式是无法被拆分为子表达式的布尔表达式,所述第二类型与所述第一类型不同,所述利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达
式执行替换操作,获得第二目标源代码,包括:
[0015]在所述布尔表达式的类型为第一类型时,按照所述预设替换规则,将第一布尔表达式赋值于所述第一预设成员变量,并将所述第一布尔表达式替换为所述第一预设成员变量的变量名,将第二布尔表达式赋值于所述第二预设成员变量,并将所述第二布尔表达式替换为所述第二预设成员变量的变量名,获得第二目标源代码,其中,所述第一布尔表达式和所述第二布尔表达式不同,所述第一布尔表达式和所述第二布尔表达不在同一个所述判断逻辑代码块中。
[0016]可选的,所述布尔表达式分为第一类型和第二类型,所述第一类型的所述布尔表达式是无法被拆分为子表达式的布尔表达式,所述第二类型与所述第一类型不同,所述利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达式执行替换操作,获得第二目标源代码,还包括:
[0017]在所述布尔表达式的类型为第二类型时,将所述布尔表达式拆分为第一子布尔表达式和第二子布尔表达式。
[0018]按照所述预设替换规则,将所述第一子布尔表达式赋值于所述第一预设成员变量,并将所述第一子布尔表达式替换为所述第一预设成员变量的变量名,将所述第二子布尔表达式进行取反操作后赋值于所述第二预设成员变量,并将所述第二子布尔表达式替换为经过所述取反操作后的所述第二预设成员变量的变量名,获得所述第二目标源代码,其中,所述第一子布尔表达式和所述第二子布尔表达式在同一个所述判断逻辑码块中。
[0019]可选的,按照预设常量同名化规则,对所述初始Class文件进行同名化处理,获得目标Class文件,包括:
[0020]根据所述第一预设成员变量的变量名,在所述初始Class文件的常量池中查找与所述第一预设成员变量的变量名匹配的字符串常量,将所述字符串常量的字符串内容替换为所述第二预设成员变量的变量名。
[0021]或,根据所述第二预设成员变量的变量名,在所述初始Class文件的常量池中查找与所述第二预设成员变量的变量名匹配的字符串常量,将所述字符串常量的字符串内容替换为所述第一预设成员变量的变量名。
[0022]一种防止反编译的系统,所述系统包括:
[0023]变量添加模块,用于在初始源代码中添加第一预设成员变量和第二预设成员变量,获得第一目标源代码,其中,所述第一预设成员变量和所述第二预设成员变量不同。
[0024]表达式获取模块,用于识别所述第一目标源代码中各判断逻辑代码块的布尔表达式。
[0025]表达式替换模块,用于利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达式执行替换操作,获得第二目标源代码。
[0026]编译模块,用于编译所述第二目标源代码,获得初始Class文件。
[0027]同名化处理模块,用于按照预设常量同名化规则,对所述初始Class文件进行同名化处理,获得目标Class文件。
[0028]可选的,所述表达式获取模块被设置为:
[0029]遍历所述第一目标源代码,对所述第一目标源代码中的各代码块:根据预设目标代码块识别规则,判断该代码块中是否存在判断逻辑代码,若是,则将该代码块确定为所述
判断逻辑代码块。
[0030]识别各判断逻辑代码块的所述布尔表达式。
[0031]可选的,所述表达式替换模块被设置为:
[0032]在所述布尔表达式的类型为第一类型时,按照所述预设替换规则,将第一布尔表达式赋值于所述第一预设成员变量,并将所述第一布尔表达式替换为所述第一预设成员变量的变量名,将第二布尔表达式赋值于所述第二预设成员变量,并将所述第二布尔表达式替换为所述第二预设成员变量的变量名,获得第二目标源代码,其中,所述第一布尔表达式和所述第二布尔表达式不同,所述第一布尔表达式和所述第二布尔表达式不在同一个所述判断逻辑代码块中。
[0033]可选的,所述表达式替换模块还被设置为:
[0034]在所述布尔表达式的类型为第二类型时,将所述布尔表达式拆分为第一子布尔表达式和第二子布尔表达式。
[0035]按照所述预设替换规则,将所述第一子布尔表达式赋值于所述第一预设成员变量,并将所述第一子布尔表达式替换为所述第一预设成员变量的变量名,将所述第二子布尔表达本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种防止反编译的方法,其特征在于,所述方法包括:在初始源代码中添加第一预设成员变量和第二预设成员变量,获得第一目标源代码,其中,所述第一预设成员变量和所述第二预设成员变量不同;识别所述第一目标源代码中各判断逻辑代码块的布尔表达式;利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达式执行替换操作,获得第二目标源代码;编译所述第二目标源代码,获得初始Class文件;按照预设常量同名化规则,对所述初始Class文件进行同名化处理,获得目标Class文件。2.根据权利要求1所述的方法,其特征在于,所述识别所述第一目标源代码中各判断逻辑代码块的布尔表达式,包括:遍历所述第一目标源代码,对所述第一目标源代码中的各代码块:根据预设目标代码块识别规则,判断该代码块中是否存在判断逻辑代码,若是,则将该代码块确定为所述判断逻辑代码块;识别各判断逻辑代码块的所述布尔表达式。3.根据权利要求2所述的方法,其特征在于,所述布尔表达式分为第一类型和第二类型,所述第一类型的所述布尔表达式是无法被拆分为子表达式的布尔表达式,所述第二类型与所述第一类型不同,所述利用所述第一预设成员变量和所述第二预设成员变量,按照预设替换规则,对所述布尔表达式执行替换操作,获得第二目标源代码,包括:在所述布尔表达式的类型为第一类型时,按照所述预设替换规则,将第一布尔表达式赋值于所述第一预设成员变量,并将所述第一布尔表达式替换为所述第一预设成员变量的变量名,将第二布尔表达式赋值于所述第二预设成员变量,并将所述第二布尔表达式替换为所述第二预设成员变量的变量名,获得第二目标源代码,其中,所述第一布尔表达式和所述第二布尔表达式不同,所述第一布尔表达式和所述第二布尔表达不在同一个所述判断逻辑代码块中。4.根据权利要求3所述的方法,其特征在于,还包括:在所述布尔表达式的类型为第二类型时,将所述布尔表达式拆分为第一子布尔表达式和第二子布尔表达式;按照所述预设替换规则,将所述第一子布尔表达式赋值于所述第一预设成员变量,并将所述第一子布尔表达式替换为所述第一预设成员变量的变量名,将所述第二子布尔表达式进行取反操作后赋值于所述第二预设成员变量,并将所述第二子布尔表达式替换为经过所述取反操作后的所述第二预设成员变量的变量名,获得所述第二目标源代码,其中,所述第一子布尔表达式和所述第二子布尔表达式在同一个所述判断逻辑码块中。5.根据权利要求3或4所述的方法,其特征在于,按照预设常量同名化规则,对所述初始Class文件进行同名化处理,...

【专利技术属性】
技术研发人员:戴根泉陈宇汪宁芦帅陈鹏
申请(专利权)人:杭州乒乓智能技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1