代码混淆方法、装置、电子设备及存储介质制造方法及图纸

技术编号:26791505 阅读:18 留言:0更新日期:2020-12-22 17:06
本发明专利技术实施例提供一种代码混淆方法、装置、电子设备及存储介质;方法包括:根据目标程序中的函数的控制流走向,确定所述函数中的基本代码块;对所述基本代码块进行分割,得到子代码块;将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址;其中,所述代码块包括子代码块,或包括子代码块以及未被分割的基本代码块。本发明专利技术实施例提供的代码混淆方法、装置、电子设备及存储介质,通过将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址,从而切断了具有非条件跳转指令的代码块与所要跳转的代码块之间的直接跳转关系,增加了反向分析的难度。

【技术实现步骤摘要】
代码混淆方法、装置、电子设备及存储介质
本专利技术涉及计算机安全
,尤其涉及一种代码混淆方法、装置、电子设备及存储介质。
技术介绍
随着信息科学技术的发展,软件系统在为用户带来便利的同时,其安全性也面临严重威胁。攻击者通过反编译、反汇编、动态调试等逆向手段,可轻易获取软件包含的用户私有信息、核心算法、关键业务流程,甚至软件的源代码。这给企业的软件知识产权保护造成了巨大损失。为了有效抵御攻击者针对软件的逆向分析,软件开发人员提出了软件加密,代码混淆,软件水印,防篡改等保护技术。代码混淆技术是保障软件安全的关键技术之一,它在不改变原程序语义的前提下,把程序的源代码和内部结构逻辑转换为一种更难分析、更难修改的形式,大大增加攻击者逆向分析成本。控制流混淆是代码混淆中比较成熟和关键的技术,它通过改变原程序的控制流或使控制流复杂化来隐藏程序真实的执行逻辑,增加破解者分析及重构程序控制流的难度,从而保护源代码。目前研究较多的控制流混淆技术的实现方法包括:(1)不透明谓词对控制流图中的基本块,添加从表达式本身很难推断出其值的恒真、恒假或时真时假的不透明谓词,混淆基本块的真实执行流程,使控制流变得更复杂。(2)控制流平坦化通过破坏函数控制流图中容易识别的条件及循环结构,将易于阅读的代码流程重组成一个难于理解的switchcase形式的代码执行流程。(3)插入虚假控制流利用不透明谓词技术,向原始控制流中插入多余的控制流,增加原始控制流的复杂度,提高攻击者重建出原始控制流的难度。使用上述控制流混淆方法混淆程序后特征较明显,容易被攻击者发现并利用现有的逆向技术进行破解,还原代码控制流。如经常被使用的不透明谓词是有限数量的较复杂的数学表达式,可收集整理后在逆向分析时直接过滤掉;又如控制流平坦化后程序拥有一个明显的switchcase结构,可在动态调试过程记录代码块的执行顺序,重建控制流。
技术实现思路
本专利技术实施例提供一种代码混淆方法、装置、电子设备及存储介质,用以解决现有技术中的代码混淆方法混淆程序代码后,程序特征较为明显,容易被攻击者发现并破解的缺陷。本专利技术第一方面实施例提供一种代码混淆方法,包括:根据目标程序中的函数的控制流走向,确定所述函数中的基本代码块;对所述基本代码块进行分割,得到子代码块;将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址;其中,所述代码块包括子代码块,或包括子代码块以及未被分割的基本代码块。上述技术方案中,在所述对所述基本代码块进行分割,得到子代码块的步骤之后,方法还包括:打乱所述目标程序中的函数内的代码块在所属函数内的排布顺序。上述技术方案中,所述将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址,具体包括:在具有非条件跳转指令的第一代码块与根据所述非条件跳转指令所要跳转的第二代码块之间插入地址计算代码块,并将所述非条件跳转指令的跳转目标变更为所述地址计算代码块;其中,所述地址计算代码块用于在运行时动态计算所述第二代码块的地址。上述技术方案中,所述在具有非条件跳转指令的第一代码块与根据所述非条件跳转指令所要跳转的第二代码块之间插入地址计算代码块,具体包括:在所述第一代码块与所述第二代码块之间插入地址计算代码块;根据所述地址计算代码块的地址信息以及所述第二代码块的地址信息,计算所述地址计算代码块与所述第二代码块之间的地址偏移量;将所述地址计算代码块内的非条件跳转指令所要跳转的地址修改为一个地址计算式,所述地址计算式包括:所述地址计算代码块自身的地址信息,所述地址计算代码块与所述第二代码块之间的地址偏移量。上述技术方案中,方法还包括:将所述目标程序中对系统函数的直接调用指令替换为对系统函数的间接调用指令。上述技术方案中,所述将所述目标程序中对系统函数的直接调用指令替换为对系统函数的间接调用指令,具体包括:根据系统函数的真实地址以及动态链接库生成间接调用指令,所述间接调用指令通过解析动态链接库中的函数地址的形式获取要执行的系统函数的真实地址;将目标程序中对系统函数的直接调用指令替换为对系统函数的间接调用指令。上述技术方案中,所述根据第二预设规则对所述基本代码块进行分割,得到子代码块,具体包括:判断所述基本代码块是否满足预设规则,当满足预设规则时,对所述基本代码块进行分割,得到第一分割结果;判断所述第一分割结果的尾部是否存在跳转指令,当不存在跳转指令时,在所述第一分割结果的尾部添加跳转指令,得到子代码块;其中,所述跳转指令用于跳转到所述第一分割结果的最后一条指令在所述基本代码块中的下一条指令。本专利技术第二方面实施例提供一种代码混淆装置,包括:基本代码块确定模块,用于根据目标程序中的函数的控制流走向,确定所述函数中的基本代码块;子代码块生成模块,用于对所述基本代码块进行分割,得到子代码块;指令转换模块,用于将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址;其中,所述代码块包括子代码块,或包括子代码块以及未被分割的基本代码块。本专利技术第三方面实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本专利技术第一方面实施例所述代码混淆方法的步骤。本专利技术第四方面实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本专利技术第一方面实施例所述代码混淆方法的步骤。本专利技术实施例提供的代码混淆方法、装置、电子设备及存储介质,通过将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址,从而切断了具有非条件跳转指令的代码块与所要跳转的代码块之间的直接跳转关系,增加了反向分析的难度。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的代码混淆方法的流程图;图2为在具有非条件跳转指令的代码块与所要跳转的代码块之间插入地址计算代码块的示意图;图3为一个函数未混淆前,用逆向工具IDA查看到的控制流图;图4为与图3相关的函数在被混淆后,用逆向工具IDA查看到的控制流图;图5为本专利技术实施例提供的代码混淆装置的示意图;图6为本专利技术实施例提供的一种电子设备的实体结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本发本文档来自技高网
...

【技术保护点】
1.一种代码混淆方法,其特征在于,包括:/n根据目标程序中的函数的控制流走向,确定所述函数中的基本代码块;/n对所述基本代码块进行分割,得到子代码块;/n将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址;其中,所述代码块包括子代码块,或包括子代码块以及未被分割的基本代码块。/n

【技术特征摘要】
1.一种代码混淆方法,其特征在于,包括:
根据目标程序中的函数的控制流走向,确定所述函数中的基本代码块;
对所述基本代码块进行分割,得到子代码块;
将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址;其中,所述代码块包括子代码块,或包括子代码块以及未被分割的基本代码块。


2.根据权利要求1所述的代码混淆方法,其特征在于,在所述对所述基本代码块进行分割,得到子代码块的步骤之后,方法还包括:
打乱所述目标程序中的函数内的代码块在所属函数内的排布顺序。


3.根据权利要求1或2所述的代码混淆方法,其特征在于,所述将代码块中的非条件跳转指令的目标地址转换为在所述目标程序运行时确定的地址,具体包括:
在具有非条件跳转指令的第一代码块与根据所述非条件跳转指令所要跳转的第二代码块之间插入地址计算代码块,并将所述非条件跳转指令的跳转目标变更为所述地址计算代码块;其中,所述地址计算代码块用于在运行时动态计算所述第二代码块的地址。


4.根据权利要求3所述的代码混淆方法,其特征在于,所述在具有非条件跳转指令的第一代码块与根据所述非条件跳转指令所要跳转的第二代码块之间插入地址计算代码块,具体包括:
在所述第一代码块与所述第二代码块之间插入地址计算代码块;
根据所述地址计算代码块的地址信息以及所述第二代码块的地址信息,计算所述地址计算代码块与所述第二代码块之间的地址偏移量;
将所述地址计算代码块内的非条件跳转指令所要跳转的地址修改为一个地址计算式,所述地址计算式包括:所述地址计算代码块自身的地址信息,所述地址计算代码块与所述第二代码块之间的地址偏移量。


5.根据权利要求1或2所述的代码混淆方法,其特征在于,方法还包括:
将所述目标程序中对系统函数的直接调用指令替换为对系...

【专利技术属性】
技术研发人员:兰丽蒲志明夏冰于大鹏高迪
申请(专利权)人:咪咕文化科技有限公司中国移动通信集团有限公司
类型:发明
国别省市:北京;11

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

1