基于代码执行顺序的源代码加固方法及装置制造方法及图纸

技术编号:18764253 阅读:17 留言:0更新日期:2018-08-25 10:42
本申请公开了一种基于代码执行顺序的源代码加固方法及装置,可以基于应用程序的原始源代码在编译或运行时的跳转逻辑,将原始源代码拆分成多个代码块;基于原始源代码在编译或运行时的跳转逻辑,建立表征代码块的执行顺序的跳转表,跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,代码块标记用于访问对应的代码块的地址;将原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成加固后的源代码。由于通过跳转表中的代码块标记实现了原始源代码的代码块之间的跳转逻辑,因此可以隐藏原始源代码的执行顺序,进而可以提高源代码的防逆向分析能力。

【技术实现步骤摘要】
基于代码执行顺序的源代码加固方法及装置
本申请涉及软件安全
,尤其涉及一种基于代码执行顺序的源代码加固方法及装置。
技术介绍
现如今,移动互联网、物联网、车联网等技术高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,这给人们的工作和生活带来了极大的便利。应用程序运行过程中会产生一些重要的信息,这引起了攻击者的极大兴趣,使得这些重要信息存在被泄露的风险。目前,攻击者常使用反汇编、反编译等静态分析工具,对应用程序的源代码进行逆向分析破解,获得应用程序的执行逻辑,从而非法窃取、非法篡改应用程序运行过程中产生的重要信息。针对上述风险,现有技术常通过对应用程序的源代码进行加固,提高源代码的防逆向分析能力,降低应用程序运行过程中产生的重要信息被泄露的风险。但是,现有的控制流平坦化等源代码加固方法依然存在被破解的风险,源代码的防逆向分析能力还有待提高。
技术实现思路
本申请实施例提供一种基于代码执行顺序的源代码加固方法及装置,以提高源代码的防逆向分析能力。第一方面,提供了一种基于代码执行顺序的源代码加固方法,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成所述加固后的源代码。第二方面,提供了一种基于代码执行顺序的源代码加固装置,包括:代码块拆分模块,用于基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;跳转表建立模块,用于基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;源代码加固模块,用于将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成所述加固后的源代码。第三方面,本申请实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的方法的步骤。第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法的步骤。本申请实施例采用的上述至少一个技术方案,可以基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成所述加固后的源代码。由于通过跳转表中的代码块标记实现了原始源代码的代码块之间的跳转逻辑,因此可以隐藏原始源代码的执行顺序,进而可以提高源代码的防逆向分析能力。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的一种基于代码执行顺序的源代码加固方法的一种具体实现方式的流程示意图;图2为图1所示的实施例中的步骤103的一种详细流程示意图;图3为本申请实施例提供的一种基于代码执行顺序的源代码加固装置的一种具体实现方式的流程示意图;图4为图3所示的实施例中的模块303的一种详细结构示意图;图5为本申请实施例提供的电子设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。为了提高源代码的防逆向分析能力,本申请实施例提供了一种基于代码执行顺序的源代码加固方法和装置,下面分别进行说明。需要说明的是,实施本申请实施例提供的一种基于代码执行顺序的源代码加固方法及装置的执行主体,可以是客户端,也可以是服务器,本申请实施例对实施上述方法及装置的具体实施主体不做限定。下面先对本申请实施例提供的一种基于代码执行顺序的源代码加固方法进行说明。如图1所示,本申请实施例提供的一种基于代码执行顺序的源代码加固方法,可以包括如下步骤:步骤101、基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块。上述应用程序,可以是需要保护的目标应用程序。代码块,可以理解为是源代码中能够顺序执行的一段代码,以跳转逻辑开始并以跳转逻辑结束,通常由一个花括号“{}”括起来,,当然也可以不由花括号括起来。例如:更为具体的,代码块可以是原始源代码中跳转语句对应的代码段,例如上述例子中的if语句与else语句分别对应的代码块1和代码块2。其中,跳转语句可以包括:循环语句、条件语句、返回语句和结束语句等语句中的任一种。循环语句例如可以包括:while、do-while、for、for/in等语句。条件语句例如可以包括:if/else、switch/case等语句。返回语句例如可以是return语句。结束语句例如可以是break语句。此外,跳转语句还可以包括goto、continue等语句。可以理解,上述循环语句、条件语句、返回语句和结束语句等语句仅是对跳转语句的举例说明,并不构成对本申请实施例的限定。步骤102、基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表。上述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址。在沿用上述步骤101中所举的例子的情况下,例如,可以将数组address_array[3]={代码块1的地址,代码块2的地址,代码块3的地址}作为跳转表进行保存,也即将数组元素“address_array[0]”与“代码块1的地址”的对应关系,数组元素“address_array[1]”与“代码块2的地址”的对应关系,以及数组元素“address_array[2]”与“代码块3的地址”的对应关系保存至跳转表中。相应的,数组元素“address_array[0]”可以作为访问“代码块1”在内存中的地址的第一代码块标记,数组元素“address_array[1]”可以作为访问“代码块2”在内存中的地址的第一代码块标记,以此类推,本说明书不再详述。步骤103、将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转本文档来自技高网...

【技术保护点】
1.一种基于代码执行顺序的源代码加固方法,其特征在于,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成所述加固后的源代码。

【技术特征摘要】
1.一种基于代码执行顺序的源代码加固方法,其特征在于,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成所述加固后的源代码。2.根据权利要求1所述的方法,其特征在于,所述将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,包括:确定第一代码块在所述原始源代码中的初始位置;在所述原始源代码的第一位置插入所述第一代码块,所述第一位置与所述初始位置不同;将位于所述初始位置的所述第一代码块替换为第一预设代码,所述第一预设代码包括:第一预设跳转语句和第一代码块标记;其中,所述第一预设跳转语句用于访问所述第一代码块标记,所述第一代码块标记用于访问所述第一代码块对应的地址,以执行所述第一代码块;确定第二代码块,所述第二代码块为所述原始源代码在编译或运行时,执行完所述第一代码块后需要执行的下一代码块;在插入所述第一位置的第一代码块的结尾插入第二预设代码,所述第二预设代码包括:第二预设跳转语句和第二代码块标记;其中,所述第二预设跳转语句用于访问所述第二代码块标记,所述第二代码块标记用于访问所述第二代码块对应的地址,以执行所述第二代码块。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:对所述第一预设代码和/或所述第二预设代码进行加密。4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:对所述跳转表进行加密。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:将加固后的所述源代码存储至第一文件中;将加密后的所述跳转表存储至第二文件中;其中,所述第一文件和所述第二文件为不同的文件。6.一种基于代码执行顺序的源代码加固装置,其特征在于,所述装置包括:代码块拆分模块,用于基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;跳转表建立模块,用于基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的...

【专利技术属性】
技术研发人员:阚志刚陈彪王文洋李世杰尉爽生方宁卢佐华
申请(专利权)人:北京梆梆安全科技有限公司
类型:发明
国别省市:北京,11

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

1