【技术实现步骤摘要】
基于顺序、符号执行和单点逻辑的源代码加固方法及装置
本申请涉及软件安全
,尤其涉及一种基于顺序、符号执行和单点逻辑的源代码加固方法及装置。
技术介绍
现如今,移动互联网、物联网、车联网等技术高速发展,终端的数量越来越多,终端中安装的应用程序也越来越多,这给人们的工作和生活带来了极大的便利。应用程序运行过程中会产生一些重要的信息,这引起了攻击者的极大兴趣,使得这些重要信息存在被泄露的风险。目前,攻击者常使用反汇编、反编译等静态分析工具,对应用程序的源代码进行逆向分析破解,获得应用程序的执行逻辑,从而非法窃取、非法篡改应用程序运行过程中产生的重要信息。针对上述风险,现有技术常通过对应用程序的源代码进行混淆,提高源代码的防逆向分析能力,降低应用程序运行过程中产生的重要信息被泄露的风险。但是,现有的控制流平坦化等源代码混淆方法依然存在被破解的风险,源代码的防逆向分析能力还有待提高。
技术实现思路
本申请实施例提供一种基于顺序、符号执行和单点逻辑的源代码加固方法及装置,以提高源代码的防逆向分析能力。第一方面,提供了一种基于顺序、符号执行和单点逻辑的源代码加固方法,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的第三源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中 ...
【技术保护点】
1.一种基于顺序、符号执行和单点逻辑的源代码加固方法,其特征在于,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的第三源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成加固后的第一源代码;确定所述第一源代码中需要保护的目标变量;在所述第一源代码中插入至少一个中间变量,并将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;其中,所述至少一个中间变量用于访问所述目标变量;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到所述加固后的第三源代码。
【技术特征摘要】
1.一种基于顺序、符号执行和单点逻辑的源代码加固方法,其特征在于,所述方法包括:基于应用程序的原始源代码在编译或运行时的跳转逻辑,将所述原始源代码拆分成多个代码块;基于所述原始源代码在编译或运行时的跳转逻辑,建立表征所述多个代码块的执行顺序的跳转表,所述跳转表中保存有代码块标记与代码块的地址的对应关系;其中,所述地址为加固后的第三源代码在编译或运行时、代码块在内存中的地址,所述代码块标记用于访问对应的代码块的地址;将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,以生成加固后的第一源代码;确定所述第一源代码中需要保护的目标变量;在所述第一源代码中插入至少一个中间变量,并将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,得到加固后的第二源代码;其中,所述至少一个中间变量用于访问所述目标变量;使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,得到所述加固后的第三源代码。2.根据权利要求1所述的方法,其特征在于,所述将所述原始源代码的代码块之间的跳转逻辑,通过所述跳转表中的代码块标记实现,包括:确定第一代码块在所述原始源代码中的初始位置;在所述原始源代码的第一位置插入所述第一代码块,所述第一位置与所述初始位置不同;将位于所述初始位置的所述第一代码块替换为第一预设代码,所述第一预设代码包括:第一预设跳转语句和第一代码块标记;其中,所述第一预设跳转语句用于访问所述第一代码块标记,所述第一代码块标记用于访问所述第一代码块对应的地址,以执行所述第一代码块;确定第二代码块,所述第二代码块为所述原始源代码在编译或运行时,执行完所述第一代码块后需要执行的下一代码块;在插入所述第一位置的第一代码块的结尾插入第二预设代码,所述第二预设代码包括:第二预设跳转语句和第二代码块标记;其中,所述第二预设跳转语句用于访问所述第二代码块标记,所述第二代码块标记用于访问所述第二代码块对应的地址,以执行所述第二代码块。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:对所述第一预设代码和/或所述第二预设代码进行加密。4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:对所述跳转表进行加密。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:将加固后的所述第三源代码存储至第一文件中;将加密后的所述跳转表存储至第二文件中;其中,所述第一文件和所述第二文件为不同的文件。6.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述第一源代码中插入至少一个中间变量,并将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:在所述目标变量的前面插入第一数组;将所述第一源代码中的部分所述目标变量替换为所述第一数组的下溢出元素;其中,所述下溢出元素的下标为所述第一数组中元素的最大下标与第一数值的和再加1,所述第一数值为所述第一数组与所述目标变量在内存中相隔的存储位置的数量。7.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述第一源代码中插入至少一个中间变量,并将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:在所述目标变量的后面插入第二数组;将所述第一源代码中的部分所述目标变量替换为所述第二数组的上溢出元素;其中,所述上溢出元素的下标为所述第二数组中元素的最小下标与第二数值的差再减1,所述第二数值为所述目标变量与所述第二数组在内存中相隔的存储位置的数量。8.根据权利要求1所述的方法,其特征在于,所述中间变量为数组,则所述在所述第一源代码中插入至少一个中间变量,并将所述第一源代码中的部分所述目标变量替换为任一所述中间变量,包括:在所述目标变量的前面插入第一数组,并在所述目标变量的后面插入第二数组;将所述第一源代码中的第一部分所述目标变量替换为所述第一数组的下溢出元素,将所述第一源代码中的第二部分所述目标变量替换为所述第二数组的上溢出元素;其中,所述下溢出元素的下标为所述第一数组中元素的最大下标与第一数值的和再加1,所述第一数值为所述第一数组与所述目标变量在内存中相隔的存储位置的数量;所述上溢出元素的下标为所述第二数组中元素的最小下标与第二数值的差再减1,所述第二数值为所述目标变量与所述第二数组在内存中相隔的存储位置的数量;所述第一部分和所述第二部分互不重叠,且所述第一部分和所述第二部分的并集小于所述源代码中的所有目标变量组成的集合。9.根据权利要求8所述的方法,其特征在于,所述第一数组和所述第二数组均与所述目标变量相邻,则所述下溢出元素的下标为所述第一数组中元素的最大下标加1;所述上溢出元素的下标为所述第二数组中元素的最小下标减1。10.根据权利要求1所述的方法,其特征在于,所述使用不透明谓词对所述第二源代码的函数中的条件变量进行模糊处理,包括:确定所述第二源代码的函数中的第一条件变量;在所述第一条件变量中添加至少一个不透...
【专利技术属性】
技术研发人员:阚志刚,陈彪,王文洋,李世杰,尉爽生,卢佐华,
申请(专利权)人:北京梆梆安全科技有限公司,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。