一种应用代码加固方法、装置、电子设备及存储介质制造方法及图纸

技术编号:38209845 阅读:13 留言:0更新日期:2023-07-21 17:00
本申请提供一种应用代码加固方法、装置、电子设备及存储介质,该方法包括:获取待加固应用的代码文件;在代码文件中提取待加固应用的关键函数,得到待加固应用中关键函数的字节码;将关键函数的字节码转换为中间代码,得到关键函数的中间代码;按照自定义代码虚拟化标准,对关键函数的中间代码进行代码虚拟化处理,以将中间代码转换为本机代码;将待加固应用的代码文件中的关键函数的字节码替换为本机代码,以得到待加固应用的目标代码文件。上述方案提供的方法,通过对待加固应用的代码文件中的关键函数字节码进行代码转换,使转换后的代码无法被恶意攻击者逆转换,实现了待加固应用的代码加固,保证了应用的安全性。保证了应用的安全性。保证了应用的安全性。

【技术实现步骤摘要】
一种应用代码加固方法、装置、电子设备及存储介质


[0001]本申请涉及网络安全
,尤其涉及一种应用代码加固方法、装置、电子设备及存储介质。

技术介绍

[0002]目前,智能电力系统已逐渐成熟,用户已经可以基于5G手机进行智能电力系统的业务操作,但由于5G手机位置处于相对开放的环境中,容易遭受攻击,相应的增加了智能电力系统核心设备遭受攻击的风险。
[0003]在现有技术中,通常是采用DEX加壳技术,对5G手机上部署的智能电力系统应用进行代码加固。
[0004]但是,随着移动应用逆向技术的不断发展,目前已经逐渐出现一些高自动化、低门槛化的免费逆向和脱壳工具,导致现有技术将无法保证应用的安全性。

技术实现思路

[0005]本申请提供一种应用代码加固方法、装置、电子设备及存储介质,以解决现有技术无法保证应用的安全性等缺陷。
[0006]本申请第一个方面提供一种应用代码加固方法,包括:
[0007]获取待加固应用的代码文件;
[0008]在所述代码文件中提取所述待加固应用的关键函数,得到所述待加固应用中关键函数的字节码;
[0009]将所述关键函数的字节码转换为中间代码,得到所述关键函数的中间代码;
[0010]按照自定义代码虚拟化标准,对所述关键函数的中间代码进行代码虚拟化处理,以将所述中间代码转换为本机代码;
[0011]将所述待加固应用的代码文件中的关键函数的字节码替换为所述本机代码,以得到所述待加固应用的目标代码文件。
[0012]可选的,所述在所述代码文件中提取所述待加固应用的关键函数,得到所述待加固应用中关键函数的字节码,包括:
[0013]根据所述代码文件的函数调用树表征的各函数之间的调用关系和各函数的自代码执行率,确定各函数的总执行时间率;
[0014]当任一所述函数的总执行时间率达到预设总执行时间率阈值时,将该函数确定为所述待加固应用的关键函数;
[0015]在所述代码文件中提取所述关键函数的字节码。
[0016]可选的,所述根据所述代码文件的函数调用树表征的各函数之间的调用关系和各函数的自代码执行率,确定各函数的总执行时间率,包括:
[0017]对所述代码文件的函数调用树进行后序遍历;
[0018]在当前遍历节点函数的自代码执行率达到预设自代码执行率阈值时,根据所述函
数调用树表征的各函数之间的调用关系,确定所述当前遍历节点函数的父函数,将所述父函数确定为选定函数,将所述当前遍历节点函数添加到白名单;
[0019]获取所述选定函数所有子函数的自代码执行率/总执行时间率、各所述子函数的占用率和所述选定函数的自代码执行率;
[0020]将所述选定函数中自代码执行率达到预设自代码执行率阈值的子函数,或总执行时间率达到预设总执行时间率阈值的子函数,确定为目标子函数,并将所述目标子函数添加到所述白名单;
[0021]根据所述选定函数所有目标子函数的自代码执行率和各所述目标子函数的占用率,和/或选定函数所有目标子函数的总执行时间率和各所述目标子函数的占用率,确定所述选定函数的子函数执行率;
[0022]根据所述选定函数的子函数执行率和所述选定函数的自代码执行率的累加结果,确定所述选定函数的总执行时间率。
[0023]可选的,所述将所述关键函数的字节码转换为中间代码,得到所述关键函数的中间代码,包括:
[0024]将所述关键函数的字节码转换为Smali代码;
[0025]对所述Smali代码进行语义分析,得到所述Smali代码的语义分析结果;
[0026]根据所述语义分析结果,将所述Smali代码转换为同语义的中间代码,以得到所述关键函数的中间代码。
[0027]可选的,所述中间代码包括C语言代码,所述根据所述语义分析结果,将所述Smali代码转换为同语义的中间代码,以得到所述关键函数的中间代码,包括:
[0028]根据所述语义分析结果,构建所述Smali代码的指令路径树;
[0029]遍历所述指令路径树,得到所述指令路径树的遍历结果;
[0030]根据所述遍历结果,确定所述Smali代码对应的同语义的C语言代码的中间表示;
[0031]根据所述遍历结果表征的各父节点与子节点之间变量的对应关系,确定所述父节点与子节点之间的冗余变量;
[0032]在所述C语言代码的中间表示中剔除所述冗余变量,得到所述关键函数的C语言代码。
[0033]可选的,所述按照自定义代码虚拟化标准,对所述关键函数的中间代码进行代码虚拟化处理,以将所述中间代码转换为本机代码,包括:
[0034]将所述关键函数的中间代码转换为所述关键函数的LLVMIR代码;
[0035]按照自定义代码虚拟化标准,对所述关键函数的LLVMIR代码进行代码虚拟化处理,以得到所述关键函数的本机代码。
[0036]可选的,所述按照自定义代码虚拟化标准,对所述关键函数的LLVMIR代码进行代码虚拟化处理,以得到所述关键函数的本机代码,包括:
[0037]按照自定义代码虚拟化标准,将所述关键函数的LLVMIR代码中的指令语句虚拟化为自定义无类型指令,得到所述关键函数的目标LLVMIR代码;
[0038]将所述目标LLVMIR代码转换为本机代码,以得到所述关键函数的本机代码。
[0039]本申请第二个方面提供一种应用代码加固装置,包括:
[0040]获取模块,用于获取待加固应用的代码文件;
[0041]函数提取模块,用于在所述代码文件中提取所述待加固应用的关键函数,得到所述待加固应用中关键函数的字节码;
[0042]转换模块,用于将所述关键函数的字节码转换为中间代码,得到所述关键函数的中间代码;
[0043]虚拟化模块,用于按照自定义代码虚拟化标准,对所述关键函数的中间代码进行代码虚拟化处理,以将所述中间代码转换为本机代码;
[0044]加固模块,用于将所述待加固应用的代码文件中的关键函数的字节码替换为所述本机代码,以得到所述待加固应用的目标代码文件。
[0045]可选的,所述函数提取模块,具体用于:
[0046]根据所述代码文件的函数调用树表征的各函数之间的调用关系和各函数的自代码执行率,确定各函数的总执行时间率;
[0047]当任一所述函数的总执行时间率达到预设总执行时间率阈值时,将该函数确定为所述待加固应用的关键函数;
[0048]在所述代码文件中提取所述关键函数的字节码。
[0049]可选的,所述函数提取模块,具体用于:
[0050]对所述代码文件的函数调用树进行后序遍历;
[0051]在当前遍历节点函数的自代码执行率达到预设自代码执行率阈值时,根据所述函数调用树表征的各函数之间的调用关系,确定所述当前遍历节点函数的父函数,将所述父函数确定为选定函数,将所述当前遍历节点函数添加到白名单;
[本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用代码加固方法,其特征在于,包括:获取待加固应用的代码文件;在所述代码文件中提取所述待加固应用的关键函数,得到所述待加固应用中关键函数的字节码;将所述关键函数的字节码转换为中间代码,得到所述关键函数的中间代码;按照自定义代码虚拟化标准,对所述关键函数的中间代码进行代码虚拟化处理,以将所述中间代码转换为本机代码;将所述待加固应用的代码文件中的关键函数的字节码替换为所述本机代码,以得到所述待加固应用的目标代码文件。2.根据权利要求1所述的方法,其特征在于,所述在所述代码文件中提取所述待加固应用的关键函数,得到所述待加固应用中关键函数的字节码,包括:根据所述代码文件的函数调用树表征的各函数之间的调用关系和各函数的自代码执行率,确定各函数的总执行时间率;当任一所述函数的总执行时间率达到预设总执行时间率阈值时,将该函数确定为所述待加固应用的关键函数;在所述代码文件中提取所述关键函数的字节码。3.根据权利要求2所述的方法,其特征在于,所述根据所述代码文件的函数调用树表征的各函数之间的调用关系和各函数的自代码执行率,确定各函数的总执行时间率,包括:对所述代码文件的函数调用树进行后序遍历;在当前遍历节点函数的自代码执行率达到预设自代码执行率阈值时,根据所述函数调用树表征的各函数之间的调用关系,确定所述当前遍历节点函数的父函数,将所述父函数确定为选定函数,将所述当前遍历节点函数添加到白名单;获取所述选定函数所有子函数的自代码执行率/总执行时间率、各所述子函数的占用率和所述选定函数的自代码执行率;将所述选定函数中自代码执行率达到预设自代码执行率阈值的子函数,或总执行时间率达到预设总执行时间率阈值的子函数,确定为目标子函数,并将所述目标子函数添加到所述白名单;根据所述选定函数所有目标子函数的自代码执行率和各所述目标子函数的占用率,和/或选定函数所有目标子函数的总执行时间率和各所述目标子函数的占用率,确定所述选定函数的子函数执行率;根据所述选定函数的子函数执行率和所述选定函数的自代码执行率的累加结果,确定所述选定函数的总执行时间率。4.根据权利要求1所述的方法,其特征在于,所述将所述关键函数的字节码转换为中间代码,得到所述关键函数的中间代码,包括:将所述关键函数的字节码转换为Smali代码;对所述Smali代码进行语义分析,得到所述Smali代码的语义分析结果;根据所述语义分析结果,将所述Smali代码转换为同语义的中间代码,以得到所述关键函数的中间代码。5.根据权利要求4所述的方法,其特征在于,所述中间代码包括C语言代码,所述根据所
述语义分析结果,将所述Smali代码转换为同语义的中间代码,以得到所述关键函数的中间代码,包括:根据所述语义分析结果,构建所述Smali代码的指令路径树;遍历所述指令路径树,得到所述指令路径树的遍历结果;根据所述遍历结果,确定所述Smali代码对应的同语义的C语言代码的中间表示;根据所述遍历结果表征的各父节点与子节点之间变量的对应关系,确定所述父节点与子节点之间的冗余变量;在所述C语言代码的中间表示中剔除所述冗余变量,得到所述关键函数的C语言代码。6.根据权利要求1所述的方法,其特征在于,所述按照自定义代码虚拟化标准,对所述关键函数的中间代码进行代码虚拟化处理,以将所述中间代码转换为本机代码,包括:将所述关键函数的中间代码转换为所述关键函数的LLVMIR代码;按照自定义代码虚拟化标准,对所述关键函数的LLVMIR代码进行代码虚拟化处理,以得到所述关键函数的本机代码。7.根据权利要求6所述的方法,其特征在于,所述按照自定义代码虚拟化标准,对所述关键函数的LLVMIR代码进行代码虚拟化处理,以得到所述关键函数的本机代码,包括:按照自定义代码虚拟化标准,将所述关键函数的LLVMIR代码中的指令语句虚拟化为自定义无类型指令,得到所述关键函数的目标LLVMIR代码;将所述目标LLVMIR代码转换为本机代码,以得到所述关键函数的本机代码。8...

【专利技术属性】
技术研发人员:李尼格陈牧陈璐周鹏张涛马媛媛邵志鹏郭亚琼徐均波方文高
申请(专利权)人:国网浙江省电力有限公司信息通信分公司国家电网有限公司
类型:发明
国别省市:

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

1