CN109344612A - 针对程序代码静态分析逆向攻击的主动防御方法及系统 - Google Patents
针对程序代码静态分析逆向攻击的主动防御方法及系统 Download PDFInfo
- Publication number
- CN109344612A CN109344612A CN201811119113.8A CN201811119113A CN109344612A CN 109344612 A CN109344612 A CN 109344612A CN 201811119113 A CN201811119113 A CN 201811119113A CN 109344612 A CN109344612 A CN 109344612A
- Authority
- CN
- China
- Prior art keywords
- basic block
- analysis
- basic
- relation
- program code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种针对程序代码静态分析逆向攻击的主动防御方法及系统,方法包括:对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块,基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析,将每个基本块依条件进行进一步合并或进一步拆分。本申请能够提高程序代码的安全性和可靠性。
Description
技术领域
本申请涉及网络安全技术领域,尤其涉及一种针对程序代码静态分析逆向攻击的主动防御方法及系统。
背景技术
随着信息技术的飞速发展,计算机技术在数据产生、交换以及处理等过程中起到了日益重要的作用,同时也面临着越来越严重的安全威胁,其中逆向工程是程序被攻击的主要途径。随着逆向工程技术的发展,出现了许多针对逆向工程的工具,诸多新技术也被用于逆向工程中。逆向工程的快速发展给软件保护带来了巨大的挑战,攻击者通过包括反汇编、反编译以及动态单步调试等手段,对源程序代码的工作原理和行为规律进行深入的认识和研究,对源程序代码进行结构分析和功能分析,探究程序内部的运行逻辑,不难得到源程序中的漏洞,找到便利的攻击途径,获得想要的信息,如敏感数据。
保护程序并防御攻击的主要办法是增加攻击难度,传统软件安全领域保障软件安全的方式及其被动,往往在漏洞被发现后展开被动防御。
因此,如何提高程序代码的安全性和可靠性是一项亟待解决的问题。
发明内容
有鉴于此,本申请提供了一种针对程序代码静态分析逆向攻击的主动防御方法,能够提高程序代码的安全性和可靠性。
本申请提供了一种针对程序代码静态分析逆向攻击的主动防御方法,包括:
对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
将每个基本块依条件进行进一步合并或进一步拆分。
优选地,所述对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块包括:
通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块。
优选地,所述基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析包括:
基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
优选地,所述将每个基本块依条件进行进一步合并包括:
采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块。
优选地,所述将每个基本块依条件进行进一步拆分包括:
将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
一种针对程序代码静态分析逆向攻击的主动防御系统,包括:
划分模块,用于对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
分析模块,用于基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
改造模块,用于将每个基本块依条件进行进一步合并或进一步拆分。
优选地,所述划分模块具体用于:
通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块。
优选地,所述分析模块具体用于:
基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
优选地,所述改造模块具体用于:
采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块。
优选地,所述改造模块具体还用于:
将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
综上所述,本申请公开了一种针对程序代码静态分析逆向攻击的主动防御方法,首先对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块,然后基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析,将每个基本块依条件进行进一步合并或进一步拆分,以主动防御未知攻击行为,提高了程序代码的安全性和可靠性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御方法实施例1的流程图;
图2为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御方法实施例2的流程图;
图3为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御方法实施例3的流程图;
图4为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御系统实施例1的结构示意图;
图5为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御系统实施例2的结构示意图;
图6为本申请公开的一种针对程序代码静态分析逆向攻击的主动防御系统实施例3的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御方法实施例1的流程图,所述方法可以包括以下步骤:
S101、对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,首先对程序代码进行基本块划分,在划分基本块时,将输入的源程序进行分析,在完整的词法分析和语法分析后提取出关键节点函数信息,然后将函数划分为基本块,其中,每一个函数能够被划分为若干个基本块,每一个基本块包含若干条指令。
S102、基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
然后,根据提取出的关键节点函数信息分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
S103、将每个基本块依条件进行进一步合并或进一步拆分。
最后,依据条件将每个基本块进行进一步的合并或者进一步的拆分。
综上所述,在上述实施例中,首先对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块,然后基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析,将每个基本块依条件进行进一步合并或进一步拆分,以主动防御未知攻击行为,提高了程序代码的安全性和可靠性。
如图2所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御方法实施例2的流程图,所述方法可以包括以下步骤:
S201、通过开源的编译器LLVM前端,对基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,选择开源的编译器LLVM(Low Level Virtual Machine,底层虚拟机)前端来完成划分基本块模块。对于一个给定的程序,LLVM将其划分为若干个函数,而每一个函数又被分为若干个基本块,每一个基本块又包含若干条指令。将输入的源程序进行完整的词法分析和语法分析,生成抽象语法树。抽象语法树是源代码的抽象语法的树状表现形式,抽象语法树中每个节点都表示源代码中的一种结构,包含该结构的类型、位置以及上下文等信息。接着从生成的AST中提取关键节点函数信息,其中,关键点函数信息包含函数的声明、定义、调用以及其他依赖信息。这些信息的获取,将为后面分析基本块联系模块中获取逻辑关系,拓扑结构打下基础。
S202、基于提取出的关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系;
然后,利用提取的关键节点函数信息,如包括起始内存地址,终止内存地址,所包含代码,所属函数名称,所属函数类型的数据信息以及call指令远程调用,条件转移指令进程调用的引用信息,分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,最后发现基本块间的继承引用逻辑关系。重排序之后的指令序列没有改变原本指令序列的语义,在指令级别实现指令重排序之前,需要进行完善的指令依赖关系的分析,以确保重排序之后的指令依然能按照程序原本的语义正确的执行。在完善的指令依赖关系分析的基础上,通过对指令进行拓扑排序,得到拓扑结构的有向图。
S203、将每个基本块依条件进行进一步合并或进一步拆分。
最后,依据条件将每个基本块进行进一步的合并或者进一步的拆分。
综上所述,在上述实施例中,通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块,然后,基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系,最后将每个基本块依条件进行进一步合并或进一步拆分,以主动防御未知攻击行为,提高了程序代码的安全性和可靠性。
如图3所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御方法实施例3的流程图,所述方法可以包括以下步骤:
S301、通过开源的编译器LLVM前端,对基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,选择开源的编译器LLVM(Low Level Virtual Machine,底层虚拟机)前端来完成划分基本块模块。对于一个给定的程序,LLVM将其划分为若干个函数,而每一个函数又被分为若干个基本块,每一个基本块又包含若干条指令。将输入的源程序进行完整的词法分析和语法分析,生成抽象语法树。抽象语法树是源代码的抽象语法的树状表现形式,抽象语法树中每个节点都表示源代码中的一种结构,包含该结构的类型、位置以及上下文等信息。接着从生成的AST中提取关键节点函数信息,其中,关键点函数信息包含函数的声明、定义、调用以及其他依赖信息。这些信息的获取,将为后面分析基本块联系模块中获取逻辑关系,拓扑结构打下基础。
S302、基于提取出的关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系;
然后,利用提取的关键节点函数信息,如包括起始内存地址,终止内存地址,所包含代码,所属函数名称,所属函数类型的数据信息以及call指令远程调用,条件转移指令进程调用的引用信息,分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,最后发现基本块间的继承引用逻辑关系。重排序之后的指令序列没有改变原本指令序列的语义,在指令级别实现指令重排序之前,需要进行完善的指令依赖关系的分析,以确保重排序之后的指令依然能按照程序原本的语义正确的执行。在完善的指令依赖关系分析的基础上,通过对指令进行拓扑排序,得到拓扑结构的有向图。
S303、采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块;将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
最后,对功能相似,调用相近的两个或者多个简单基本块可以进行合并成为一个复杂的基本块,从而提高逆向分析的复杂度。合并基本块采用内存地址相邻的基本块有条件合并的方法,如因外部引用造成分割或者存在相互引用的相邻基本块可以进行合并。将几个完整的基本块拆分为若干个基本块碎片,加入一些垃圾代码或指令,在新分块中增加指向下一个后继块的值以确保流程指向正确性,增加基本块数量,改变控制流状态,引导控制流的执行顺序,将原本控制流的信息隐藏到数据流之中,迷惑逆向分析。
综上所述,在上述实施例中,通过开源的编译器LLVM前端分析基本块之间的引用联系,将代码函数划分的基本块进行合并或拆分处理的方式来形成新基本块的执行,产生了与源代码异构的编译执行体来主动防御未知攻击行为。与被动防御技术相比,本申请极大的提高了程序的安全性,将原本通过简单计算便可以清楚的控制流混淆至更加难以阅读和理解的控制流图信息,从而更大程度地提升抗逆向分析的能力。本申请极大地丰富变体数量和增加软件逆向分析的复杂度,提升了程序的多样性,有效防御了程序代码静态分析逆向攻击问题,提升了其抗逆向工程的能力。
如图4所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御系统实施例1的结构示意图,所述系统可以包括:
划分模块401,用于对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,首先对程序代码进行基本块划分,在划分基本块时,将输入的源程序进行分析,在完整的词法分析和语法分析后提取出关键节点函数信息,然后将函数划分为基本块,其中,每一个函数能够被划分为若干个基本块,每一个基本块包含若干条指令。
分析模块402,用于基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
然后,根据提取出的关键节点函数信息分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
改造模块403,用于将每个基本块依条件进行进一步合并或进一步拆分。
最后,依据条件将每个基本块进行进一步的合并或者进一步的拆分。
综上所述,在上述实施例中,首先对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块,然后基于关键点函数信息对基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析,将每个基本块依条件进行进一步合并或进一步拆分,以主动防御未知攻击行为,提高了程序代码的安全性和可靠性。
如图5所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御系统实施例3的结构示意图,所述系统可以包括:
划分模块501,用于通过开源的编译器LLVM前端,对基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,选择开源的编译器LLVM(Low Level Virtual Machine,底层虚拟机)前端来完成划分基本块模块。对于一个给定的程序,LLVM将其划分为若干个函数,而每一个函数又被分为若干个基本块,每一个基本块又包含若干条指令。将输入的源程序进行完整的词法分析和语法分析,生成抽象语法树。抽象语法树是源代码的抽象语法的树状表现形式,抽象语法树中每个节点都表示源代码中的一种结构,包含该结构的类型、位置以及上下文等信息。接着从生成的AST中提取关键节点函数信息,其中,关键点函数信息包含函数的声明、定义、调用以及其他依赖信息。这些信息的获取,将为后面分析基本块联系模块中获取逻辑关系,拓扑结构打下基础。
分析模块502,用于基于提取出的关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系;
然后,利用提取的关键节点函数信息,如包括起始内存地址,终止内存地址,所包含代码,所属函数名称,所属函数类型的数据信息以及call指令远程调用,条件转移指令进程调用的引用信息,分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,最后发现基本块间的继承引用逻辑关系。重排序之后的指令序列没有改变原本指令序列的语义,在指令级别实现指令重排序之前,需要进行完善的指令依赖关系的分析,以确保重排序之后的指令依然能按照程序原本的语义正确的执行。在完善的指令依赖关系分析的基础上,通过对指令进行拓扑排序,得到拓扑结构的有向图。
改造模块503,用于将每个基本块依条件进行进一步合并或进一步拆分。
最后,依据条件将每个基本块进行进一步的合并或者进一步的拆分。
综上所述,在上述实施例中,通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块,然后,基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系,最后将每个基本块依条件进行进一步合并或进一步拆分,以主动防御未知攻击行为,提高了程序代码的安全性和可靠性。
如图6所示,为本申请提供的一种针对程序代码静态分析逆向攻击的主动防御系统实施例3的结构示意图,所述系统可以包括:
划分模块601,用于通过开源的编译器LLVM前端,对基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块;
当需要实现针对程序代码静态分析逆向攻击的主动防御时,选择开源的编译器LLVM(Low Level Virtual Machine,底层虚拟机)前端来完成划分基本块模块。对于一个给定的程序,LLVM将其划分为若干个函数,而每一个函数又被分为若干个基本块,每一个基本块又包含若干条指令。将输入的源程序进行完整的词法分析和语法分析,生成抽象语法树。抽象语法树是源代码的抽象语法的树状表现形式,抽象语法树中每个节点都表示源代码中的一种结构,包含该结构的类型、位置以及上下文等信息。接着从生成的AST中提取关键节点函数信息,其中,关键点函数信息包含函数的声明、定义、调用以及其他依赖信息。这些信息的获取,将为后面分析基本块联系模块中获取逻辑关系,拓扑结构打下基础。
分析模块602,用于基于提取出的关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系;
然后,利用提取的关键节点函数信息,如包括起始内存地址,终止内存地址,所包含代码,所属函数名称,所属函数类型的数据信息以及call指令远程调用,条件转移指令进程调用的引用信息,分析两个或多个不同基本块之间诸如跳转、调用或顺序执行的转换关系,进而得到执行流程或数据依赖关系,最后发现基本块间的继承引用逻辑关系。重排序之后的指令序列没有改变原本指令序列的语义,在指令级别实现指令重排序之前,需要进行完善的指令依赖关系的分析,以确保重排序之后的指令依然能按照程序原本的语义正确的执行。在完善的指令依赖关系分析的基础上,通过对指令进行拓扑排序,得到拓扑结构的有向图。
改造模块603,用于采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块;将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
最后,对功能相似,调用相近的两个或者多个简单基本块可以进行合并成为一个复杂的基本块,从而提高逆向分析的复杂度。合并基本块采用内存地址相邻的基本块有条件合并的方法,如因外部引用造成分割或者存在相互引用的相邻基本块可以进行合并。将几个完整的基本块拆分为若干个基本块碎片,加入一些垃圾代码或指令,在新分块中增加指向下一个后继块的值以确保流程指向正确性,增加基本块数量,改变控制流状态,引导控制流的执行顺序,将原本控制流的信息隐藏到数据流之中,迷惑逆向分析。
综上所述,在上述实施例中,通过开源的编译器LLVM前端分析基本块之间的引用联系,将代码函数划分的基本块进行合并或拆分处理的方式来形成新基本块的执行,产生了与源代码异构的编译执行体来主动防御未知攻击行为。与被动防御技术相比,本申请极大的提高了程序的安全性,将原本通过简单计算便可以清楚的控制流混淆至更加难以阅读和理解的控制流图信息,从而更大程度地提升抗逆向分析的能力。本申请极大地丰富变体数量和增加软件逆向分析的复杂度,提升了程序的多样性,有效防御了程序代码静态分析逆向攻击问题,提升了其抗逆向工程的能力。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种针对程序代码静态分析逆向攻击的主动防御方法,其特征在于,包括:
对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
将每个基本块依条件进行进一步合并或进一步拆分。
2.根据权利要求1所述的方法,其特征在于,所述对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块包括:
通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块。
3.根据权利要求1所述的方法,其特征在于,所述基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析包括:
基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
4.根据权利要求1所述的方法,其特征在于,所述将每个基本块依条件进行进一步合并包括:
采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块。
5.根据权利要求1所述的方法,其特征在于,所述将每个基本块依条件进行进一步拆分包括:
将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
6.一种针对程序代码静态分析逆向攻击的主动防御系统,其特征在于,包括:
划分模块,用于对程序代码输入的源程序进行完整的词法分析和语法分析,提取出关键节点函数信息,并将函数划分为基本块;
分析模块,用于基于所述关键点函数信息对所述基本块进行分析,分析多个不同基本块之间的转换关系,得到执行流程或数据依赖关系,并进行逻辑关系、拓扑结构分析;
改造模块,用于将每个基本块依条件进行进一步合并或进一步拆分。
7.根据权利要求6所述的系统,其特征在于,所述划分模块具体用于:
通过开源的编译器LLVM前端,对所述基本块进行完整的词法分析和语法分析,从生产的抽象语法树中提取关键节点函数信息,并将程序划分为多个函数,将函数划分为多个基本块。
8.根据权利要求6所述的系统,其特征在于,所述分析模块具体用于:
基于提取出的所述关键点节点函数信息分析多个不同基本块之间的跳转、调用或顺序执行的单向或双向转换关系,得到执行流程或数据依赖关系,并发现基本块之间的继承引用逻辑关系。
9.根据权利要求6所述的系统,其特征在于,所述改造模块具体用于:
采用内存地址相邻的基本块有条件合并的方法,将地址相近、功能相似或调用相近的两个或更多简单基本块进行合并,合并为一个较复杂的基本块。
10.根据权利要求6所述的系统,其特征在于,所述改造模块具体还用于:
将复杂完整的基本块进行拆分,对拆分后新的基本块加入垃圾代码或指令,在新分块中增加指向下一个后继块的值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811119113.8A CN109344612A (zh) | 2018-09-25 | 2018-09-25 | 针对程序代码静态分析逆向攻击的主动防御方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811119113.8A CN109344612A (zh) | 2018-09-25 | 2018-09-25 | 针对程序代码静态分析逆向攻击的主动防御方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109344612A true CN109344612A (zh) | 2019-02-15 |
Family
ID=65306385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811119113.8A Pending CN109344612A (zh) | 2018-09-25 | 2018-09-25 | 针对程序代码静态分析逆向攻击的主动防御方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109344612A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110417574A (zh) * | 2019-05-21 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 一种拓扑分析方法、装置和存储介质 |
CN110460601A (zh) * | 2019-08-14 | 2019-11-15 | 北京三快在线科技有限公司 | 依赖包安全性检测方法、装置及存储介质 |
CN110502893A (zh) * | 2019-08-26 | 2019-11-26 | 郑州昂视信息科技有限公司 | 一种java虚拟机层面表决的方法及系统 |
CN110955898A (zh) * | 2019-12-12 | 2020-04-03 | 杭州安恒信息技术股份有限公司 | 一种建站系统的漏洞审计方法、系统及相关装置 |
CN111459832A (zh) * | 2020-04-13 | 2020-07-28 | 郑州昂视信息科技有限公司 | 一种异构编译算法可行性评估方法及系统 |
CN112100054A (zh) * | 2020-08-12 | 2020-12-18 | 北京大学 | 一种面向数据管控的程序静态分析方法和系统 |
CN112541188A (zh) * | 2019-09-20 | 2021-03-23 | 武汉斗鱼网络科技有限公司 | 阻止应用程序代码被静态分析的方法及装置 |
CN114327789A (zh) * | 2022-01-07 | 2022-04-12 | 北京大学 | 一种基于llvm的虚拟机保护方法及系统 |
CN114357389A (zh) * | 2021-12-31 | 2022-04-15 | 北京大学 | 一种基于llvm的指令加花混淆方法及装置 |
CN115080985A (zh) * | 2022-07-27 | 2022-09-20 | 北京北大软件工程股份有限公司 | 基于分块的大规模代码静态分析方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
CN104142889A (zh) * | 2014-07-23 | 2014-11-12 | 西安空间无线电技术研究所 | 一种汇编级的单粒子软错误的测试点设置与优化方法 |
CN104517057A (zh) * | 2014-12-22 | 2015-04-15 | 中国人民解放军信息工程大学 | 基于可信计算的软件混合度量方法 |
CN105404794A (zh) * | 2014-09-04 | 2016-03-16 | 腾讯科技(深圳)有限公司 | Java应用软件的保护方法和装置 |
-
2018
- 2018-09-25 CN CN201811119113.8A patent/CN109344612A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
CN104142889A (zh) * | 2014-07-23 | 2014-11-12 | 西安空间无线电技术研究所 | 一种汇编级的单粒子软错误的测试点设置与优化方法 |
CN105404794A (zh) * | 2014-09-04 | 2016-03-16 | 腾讯科技(深圳)有限公司 | Java应用软件的保护方法和装置 |
CN104517057A (zh) * | 2014-12-22 | 2015-04-15 | 中国人民解放军信息工程大学 | 基于可信计算的软件混合度量方法 |
Non-Patent Citations (1)
Title |
---|
宋亚奇: "基于代码混淆的软件保护技术研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110417574A (zh) * | 2019-05-21 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 一种拓扑分析方法、装置和存储介质 |
CN110460601A (zh) * | 2019-08-14 | 2019-11-15 | 北京三快在线科技有限公司 | 依赖包安全性检测方法、装置及存储介质 |
CN110502893A (zh) * | 2019-08-26 | 2019-11-26 | 郑州昂视信息科技有限公司 | 一种java虚拟机层面表决的方法及系统 |
CN112541188B (zh) * | 2019-09-20 | 2022-05-13 | 武汉斗鱼网络科技有限公司 | 阻止应用程序代码被静态分析的方法及装置 |
CN112541188A (zh) * | 2019-09-20 | 2021-03-23 | 武汉斗鱼网络科技有限公司 | 阻止应用程序代码被静态分析的方法及装置 |
CN110955898A (zh) * | 2019-12-12 | 2020-04-03 | 杭州安恒信息技术股份有限公司 | 一种建站系统的漏洞审计方法、系统及相关装置 |
CN111459832A (zh) * | 2020-04-13 | 2020-07-28 | 郑州昂视信息科技有限公司 | 一种异构编译算法可行性评估方法及系统 |
CN111459832B (zh) * | 2020-04-13 | 2022-09-09 | 郑州昂视信息科技有限公司 | 一种异构编译算法可行性评估方法及系统 |
CN112100054A (zh) * | 2020-08-12 | 2020-12-18 | 北京大学 | 一种面向数据管控的程序静态分析方法和系统 |
CN114357389A (zh) * | 2021-12-31 | 2022-04-15 | 北京大学 | 一种基于llvm的指令加花混淆方法及装置 |
CN114357389B (zh) * | 2021-12-31 | 2024-04-16 | 北京大学 | 一种基于llvm的指令加花混淆方法及装置 |
CN114327789A (zh) * | 2022-01-07 | 2022-04-12 | 北京大学 | 一种基于llvm的虚拟机保护方法及系统 |
CN114327789B (zh) * | 2022-01-07 | 2024-05-17 | 北京大学 | 一种基于llvm的虚拟机保护方法及系统 |
CN115080985A (zh) * | 2022-07-27 | 2022-09-20 | 北京北大软件工程股份有限公司 | 基于分块的大规模代码静态分析方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109344612A (zh) | 针对程序代码静态分析逆向攻击的主动防御方法及系统 | |
Grossman et al. | Online detection of effectively callback free objects with applications to smart contracts | |
CN103544414B (zh) | 一种Android系统应用的深度代码混淆方法 | |
Smith et al. | Deflating the big bang: fast and scalable deep packet inspection with extended finite automata | |
Homescu et al. | Profile-guided automated software diversity | |
KR101099212B1 (ko) | 예외 처리 구조물들을 포함하는 소프트웨어의 소스 언어 독립형 중간 표현을 처리하는 방법, 다수의 소스 코드 언어들에 대한 소스 언어 독립형 예외 처리 중간 표현들을 구현하기 위한 시스템 및 컴퓨터 판독가능 저장 매체 | |
CN106096338B (zh) | 一种具有数据流混淆的虚拟化软件保护方法 | |
JP5458184B2 (ja) | 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法 | |
CN109918903A (zh) | 一种基于llvm编译器的程序非控制数据攻击防护方法 | |
CN107092518A (zh) | 一种保护拟态防御系统软件层安全的编译方法 | |
CN102841844B (zh) | 一种基于简易符号执行的二进制代码漏洞挖掘方法 | |
Sepp et al. | Precise static analysis of binaries by extracting relational information | |
CN102012988B (zh) | 自动二进制恶意代码行为分析方法 | |
Kalysch et al. | VMAttack: Deobfuscating virtualization-based packed binaries | |
Arthur et al. | Getting in control of your control flow with control-data isolation | |
Garba et al. | Saturn-software deobfuscation framework based on llvm | |
CN110673852B (zh) | 一种基于编译器前端实现控制流平坦的方法、系统及设备 | |
CN107168757A (zh) | 一种Android端防止View控件点击抖动的方法及装置 | |
CN109697339A (zh) | 一种基于动态虚拟指令变换的Android应用安全保护方法 | |
CN105718765A (zh) | 一种利用有限自动机实现代码混淆的方法 | |
JP2022502723A (ja) | スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 | |
Zhao et al. | Compile-time code virtualization for android applications | |
Arasteh et al. | Forensic memory analysis: From stack and code to execution history | |
Basler et al. | Boom: Taking boolean program model checking one step further | |
Pfeffer et al. | Efficient and safe control flow recovery using a restricted intermediate language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Han Shoukui Inventor after: Liu Zhenwu Inventor before: Zhang Zheng Inventor before: Wu Jiangxing Inventor before: Liu Zhenwu |
|
CB03 | Change of inventor or designer information | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190215 |
|
WD01 | Invention patent application deemed withdrawn after publication |