CN113254068B - 一种控制流平坦化自动检测方法、装置 - Google Patents
一种控制流平坦化自动检测方法、装置 Download PDFInfo
- Publication number
- CN113254068B CN113254068B CN202110792580.2A CN202110792580A CN113254068B CN 113254068 B CN113254068 B CN 113254068B CN 202110792580 A CN202110792580 A CN 202110792580A CN 113254068 B CN113254068 B CN 113254068B
- Authority
- CN
- China
- Prior art keywords
- node
- control flow
- dominating
- dominant
- dominated
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 18
- 238000000034 method Methods 0.000 claims abstract description 35
- 238000012545 processing Methods 0.000 claims abstract description 26
- 238000004364 calculation method Methods 0.000 claims description 14
- 238000012790 confirmation Methods 0.000 claims description 6
- 239000000126 substance Substances 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 10
- KRTSDMXIXPKRQR-AATRIKPKSA-N monocrotophos Chemical compound CNC(=O)\C=C(/C)OP(=O)(OC)OC KRTSDMXIXPKRQR-AATRIKPKSA-N 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010921 in-depth analysis Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Operation Control Of Excavators (AREA)
Abstract
本发明提供一种控制流平坦化自动检测方法、装置,所述方法包括如下步骤:查找用于表示节点支配关系和层级关系的中间支配块;以查找出的所有中间支配块为节点构建支配树;以构建的支配树为基础,确定支配节点;计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。本文提出的方法简单有效,而且能够在主流的逆向工具中实现,帮助逆向工程师快速定位和去除控制流平坦化,还原代码本来的控制流结构。
Description
技术领域
本发明涉及代码分析技术领域,具体涉及一种控制流平坦化自动检测方法、装置。
背景技术
商业软件和恶意病毒软件的作者经常使用代码混淆来保护特定代码块,防止逆向工程分析出代码的逻辑。通常来说,知道了哪块代码使用了混淆技术,可以以此作为出发点,对这块代码进行更详细更深入的分析。控制流平坦化是最热门的混淆技术之一,在不改变源代码功能的前提下,将代码中的顺序控制流转换成跳转控制流,消除基本块之间的前后执行顺序特征,将基本块放置在同一个层级下进行展示。
在逆向工程领域,大家对如何生成混淆代码以及如何去除混淆代码,还原本来控制流研究比较热门,但是对于如何检测代码中究竟哪一块代码使用了何种混淆技术,公开方法还是比较少。现有的方法针对已经混淆的代码,如何获取真实块、序言和无用块进行讨论,并没有说明如何确定混淆代码的位置。也就是如何检测出二进制代码中究竟哪一块代码使用了控制流平坦化是需要解决的技术问题。
发明内容
现有的方法针对已经混淆的代码,如何获取真实块、序言和无用块进行讨论,如何检测出代码中究竟哪一块代码使用了控制流平坦化并没有公开,本发明提供一种控制流平坦化自动检测方法、装置以解决上述技术问题。
本发明的技术方案是:
一方面,本发明技术方案提供一种控制流平坦化自动检测方法,每一个基本块为一个节点,包括如下步骤:
查找用于表示节点支配关系和层级关系的中间支配块;
以查找出的所有中间支配块为节点构建支配树;
以构建的支配树为基础,确定支配节点;
计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。
进一步的,所述的查找用于表示节点的支配关系和层级关系的中间支配块的步骤具体包括:
建立支配关系表;
在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块。确定了中间支配块,即可以确定整个代码函数的支配链。
进一步的,所述的建立支配关系表的步骤包括:
从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;
将所有支配节点和被支配节点的关系列表输出形成支配关系表。
为了方便以支配节点和中间支配块为基础,引出更具代表性的结构支配树。
进一步的,所述的以构建的支配树为基础,确定支配节点的步骤包括:
在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若是,确定支配节点,否则,继续执行步骤:在支配树中通过查找反向边的方法确定基本块控制流中是否有循环。
支配树是代表支配关系的紧凑型结构,以树状图的形式展示。以所有中间支配块为节点,可以构造出支配树。
进一步的,所述的计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码的步骤具体包括:
计算支配节点支配的基本块的数目;
获取支配树中所有基本块的数目;
将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度;
判断基本块的控制流平坦化相似度是否大于或等于设定阈值;
若是,判定作为支配节点的基本块所在的代码被控制流平坦化处理过。判断找到了用控制流平坦化技术混淆的函数。为下一步去除混淆,还原代码控制流结构奠定基础。
进一步的,所述的从入口节点到出口节点按照执行顺序确定支配节点和被支配节点的步骤中,确定支配节点的步骤包括:
在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点;
若存在一条路径,从入口节点到节点A没有经过节点B,那么节点B没有支配节点A。每个节点都支配了它本身。
另一方面,本发明技术方案还提供一种控制流平坦化自动检测装置,每一个基本块为一个节点,所述装置包括查找模块、构建模块、确定模块、计算处理模块;
查找模块,用于查找用于表示节点支配关系和层级关系的中间支配块;
构建模块,用于以查找出的所有中间支配块为节点构建支配树;
确定模块,用于以构建的支配树为基础,确定支配节点;
计算处理模块,用于计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。
在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若是,确定支配节点。支配树是代表支配关系的紧凑型结构,以树状图的形式展示。以所有中间支配块为节点,可以构造出支配树。
进一步的,该装置还包括关系表建立模块;
关系表建立模块,用于建立支配关系表;
确定模块,具体用于在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块。
进一步的,确定模块,具体用于从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;
关系表建立模块,用于将所有支配节点和被支配节点的关系列表输出形成支配关系表。
进一步的,确定模块还包括循环检查单元、确定单元;
循环检查单元,用于在支配树中通过查找反向边的方法确定基本块控制流中是否有循环;
确定单元,用于循环检查单元确定基本块控制流中存在循环时,确定支配节点。
进一步的,计算处理模块包括数目确认单元、计算单元、判断单元和判定输出单元;
数目确认单元,用于计算支配节点支配的基本块的数目;还用于获取支配树中所有基本块的数目;
计算单元,用于将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度;
判断单元,用于判断基本块的控制流平坦化相似度是否大于或等于设定阈值;
判定输出单元,用于判定作为支配节点的基本块所在的代码被控制流平坦化处理过。
确定模块,在确定支配节点的过程中,在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点;若存在一条路径,从入口节点到节点A没有经过节点B,那么节点B没有支配节点A。每个节点都支配了它本身。
从以上技术方案可以看出,本发明具有以下优点:本文提出的方法简单有效,而且能够在主流的逆向工具中实现,帮助逆向工程师快速定位和去除控制流平坦化,还原代码本来的控制流结构。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明实施例中节点路径示意图。
图3是本发明实施例中重建函数的控制流图。
图4是本发明实施例中由图2中的示意图构造出的支配树示意图。
图5是本发明一个实施例的装置的示意性框图。
图中,11-查找模块,12-构建模块,13-确定模块,14-计算处理模块。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,本发明实施例提供一种控制流平坦化自动检测方法,每一个基本块为一个节点,包括如下步骤:
S101:查找用于表示节点支配关系和层级关系的中间支配块;
S102:以查找出的所有中间支配块为节点构建支配树;
S103:以构建的支配树为基础,确定支配节点;
S104:计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。需要说明的是,从0到1之间的小数表示某个基本块的相似度,阈值的设定范围在0到1之间。
作为本发明的另一个实施例,提供一种控制流平坦化自动检测方法,每一个基本块为一个节点,包括如下步骤:
S201:建立支配关系表;具体的,从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;将所有支配节点和被支配节点的关系列表输出形成支配关系表;
S202:在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块,中间支配块用于表示节点支配关系和层级关系;确定了中间支配块,即可以确定整个代码函数的支配链;
S203:以查找出的所有中间支配块为节点构建支配树;为了方便以支配节点和中间支配块为基础,引出更具代表性的结构支配树;
S204:以构建的支配树为基础,确定支配节点;
S205:计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。需要说明的是,从0到1之间的小数表示某个基本块的相似度,阈值的设定范围在0到1之间。
作为本发明的另一个实施例,提供一种控制流平坦化自动检测方法,每一个基本块为一个节点,包括如下步骤:
S301:建立支配关系表;具体的,从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;将所有支配节点和被支配节点的关系列表输出形成支配关系表;
S302:在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块,中间支配块用于表示节点支配关系和层级关系;确定了中间支配块,即可以确定整个代码函数的支配链;
S303:以查找出的所有中间支配块为节点构建支配树;为了方便以支配节点和中间支配块为基础,引出更具代表性的结构支配树;支配树是代表支配关系的紧凑型结构,以树状图的形式展示。以所有中间支配块为节点,可以构造出支配树;
S304:以构建的支配树为基础,确定支配节点;在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若是,确定支配节点,否则,继续执行步骤:在支配树中通过查找反向边的方法确定基本块控制流中是否有循环;
S305:计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。需要说明的是,从0到1之间的小数表示某个基本块的相似度,阈值的设定范围在0到1之间。
步骤S305中,具体包括:
S305-1:计算支配节点支配的基本块的数目;
S305-2:获取支配树中所有基本块的数目;
S305-3:将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度;
S305-4:判断基本块的控制流平坦化相似度是否大于或等于设定阈值;
若是,判定作为支配节点的基本块所在的代码被控制流平坦化处理过。判断找到了用控制流平坦化技术混淆的函数。为下一步去除混淆,还原代码控制流结构奠定基础。
对于二进制逆向工程分析来说,大多数的二进制文件比较大,代码块很多,但并不是所有代码块都用到了混淆技术。所以,首要的任务是找到哪些代码块用到了控制流平坦化技术,本发明实施例提供种控制流平坦化自动检测方法,每一个基本块为一个节点,包括如下步骤:
S401:查找用于表示节点支配关系和层级关系的中间支配块;
本步骤中,需要建立支配关系表;在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块。确定了中间支配块,即可以确定整个代码函数的支配链。
在图2中,有7个节点和9条边。节点a没有指向自己的边,称为入口节点,节点f没有指向外的边,称为出口节点。此外,从一个节点到另一个节点的传递链称为路径,比如,a->b->d->f,称为a到f的路径。循环是一个字图,在这个子图中,每个节点都可以通过其他节点访问到。比如,图2中,节点c,e和g形成一个循环,因为从c到c可以通过路径c->e->g->c实现,同理,从e到e,从g到g都有路径。
支配关系描述了节点间的继承关系,它代表了基本块的执行顺序。举个例子,支配者x能够保证,在任何情况下,基本块x都能在基本块y之前执行。如果在入口节点和节点y之间的所有路径,都经过了节点x,那么节点x支配了节点y。如果有一条路径,从入口节点到节点y没有经过节点x,那么x没有支配y。特别地,每个节点都支配了它自己。
根据以上说明,能够确定在上述图中节点间的支配关系,如下所示,对于每一个x,列出了x所支配的所有节点:
node x:nodes dominated by x
a:a,b,c,d,e,f
b:b
c:c,e,g
d:d
e:e,g
f:f
g:g
由于节点a是入口节点,它支配了所有节点。因为从a到e和从a到g都经过c,c支配了c,e和g。从a到g,也经过了e,因此e也支配了g。对于节点b和d,f和g,只支配了他们自己。
从上述关系可以看出,节点a总是会第一个执行,节点f会最后一个执行。因为c支配了g,c会在g之前执行。更进一步地,上述关系能够引申出执行层级关系:a在c之前执行,c在e之前执行,e在g之前执行。
这样,建立支配关系表的过程:从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;将所有支配节点和被支配节点的关系列表输出形成支配关系表。
以支配关系中的图2为例,节点x和节点y都是独一无二的节点,支配y的最接近的节点x称为y的中间支配块。在支配关系表中,c支配c,e和g,所以,c是e的最近的支配者,是它的中间支配块。相似,因为e支配g,而且是最近的,因此e是g的中间支配块。将此规则运用在所有节点中,得出以下关系表:
node x:x is immediate dominator of nodes
a: b,c,d,e,f
b:-
c:e
d: -
e:g
f:-
g:-
从上述可以看出,a是b、c、d和f的中间支配块,c是e的中间支配块,e是g的中间支配块。
S402:以查找出的所有中间支配块为节点构建支配树;
支配树是代表支配关系的紧凑型结构,以树状图的形式展示。以所有中间支配块为节点,可以构造出支配树。因此,可以使用以下的边构造出这棵树:
ua->b
ua->c
ua->d
ua->f
然后增加c和e的边:
uc->e
ue->g
最后,构造出的支配树如图4所示:
支配树以紧凑的形式展示了支配关系和层次。从中可以看出,a支配了整个图,c支配了e和g。
S403:以构建的支配树为基础,确定支配节点;
以支配树为基础,可以通过检测反向边来自动化地识别环路。如果从某个节点出来的边指向了它的一个支配节点,这就检测到了环路。这个支配节点控制着这个环路,因为它支配着里面所有的节点。在上述的控制流图2中,有一条边从节点g指向了c,因为c支配g,因此在c,e和g三者之间存在环路,c控制着这个环路。也就是,在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若是,确定支配节点,否则,继续执行步骤:在支配树中通过查找反向边的方法确定基本块控制流中是否有循环。
S404:计算确定的支配节点支配的基本块的控制流平坦化相似度,判断计算的相似度是否大于或等于设定阈值;若是,判断该基本块所在的代码是被控制流平坦化处理后的代码。
进行具体算法前先要了解下逆向工程师是如何使用控制流图的,控制流平坦化对于逆向工程分析的影响。
通过画图说明的方式重建函数的控制流图,如图3所示:可以看到,基本块a0有两条向外的边,一条指向b0,一条指向c0,这是一种典型的条件分支模式:在为true的情况下,由a0跳向b0,为false的情况下,由a0跳向c0。基本块b0和c0执行不同的操作,他们的控制流在基本块d0处融合在一起了。在更高的代码结构层面上,这是一种典型的if-then-else模式。因此,可以根据这个图重建出函数中的if-then-else控制结构:
在重建了高层控制结构后,代码逻辑也可以通过一个个基本块重建出来,例如,可以重建出以下代码:
int check(int x)
/*block a*/
int r;
if (x<10){
/*block B*/
r=20;
}else{
/*block C*/
r=30;
}
/*block D*/
return r;
}
函数check以x作为输入参数,检查x是否小于10,如果是,则返回20,否则返回30。
控制流平坦化是一种代码变换技术,它去除了控制流中的结构信息。所有的基本块彼此之间无任何关系,不能轻易恢复控制流。
如果使用前文提到的方法恢复控制流,只能看到基本块a、b、c和d都与一个基本块连接着,看不到这些基本块之间是如何关联的,因为所有的基本块都在同一平面上。
在控制流平坦化技术的最基本形态中,有一个核心基本块dispatcher,引导控制流到每个基本块中。这是通过状态参数实现的,该参数记录着接下来访问的应该是哪个基本块。基本块entry设置了状态参数的初始值,此处为基本块a。接下来,每个基本块根据程序逻辑动态地更新状态参数的值。简而言之,控制流平台化本质上是一个状态机,每个基本块代表一种状态。在代码层面上,可以通过无限循环结构实现,在循环体内部,通过switch结构检查状态变量的值,并执行特定操作。虽然不能通过上述图恢复控制流,但是可以通过查看代码,分析状态变换去除混淆,还原控制流结构。
控制流平坦化通过引入状态机,构建状态参数,在无限循环体中追踪控制流,从而去除了控制流图的结构。
本实施例中,为能够自动化检测到这些结构,需弄清楚某个图结构与平坦化后的图的相似百分比。为实现这个目标,需要判断是否有反向边指向支配者,其次,这个支配者是否控制着函数中的大多数基本块。换句话说,需寻找某个基本块,它控制着某个循环结构体,并且支配着函数中的大部分基本块。
本申请提出以从0到1之间的小数表示某个基本块的相似度:通过反向边找到这个支配者x,x为某个基本块,计算出x支配的基本块数目n,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度。所述步骤S404中具体包括:
计算支配节点支配的基本块的数目;获取支配树中所有基本块的数目;将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度;判断基本块的控制流平坦化相似度是否大于或等于设定阈值;若是,判定作为支配节点的基本块所在的代码被控制流平坦化处理过。判断找到了用控制流平坦化技术混淆的函数。为下一步去除混淆,还原代码控制流结构奠定基础。本实施例中的设定的阈值可以是0.9,当得分大于或者等于0.9时,即可判定函数中的基本块x是dispatcher,该函数是被控制流平坦化处理过的。
如图5所示,作为本发明的一个实施例,还提供一种控制流平坦化自动检测装置,每一个基本块为一个节点,所述装置包括查找模块11、构建模块12、确定模块13、计算处理模块14;
查找模块11,用于查找用于表示节点支配关系和层级关系的中间支配块;
构建模块12,用于以查找出的所有中间支配块为节点构建支配树;
确定模块13,用于以构建的支配树为基础,确定支配节点;
计算处理模块14,用于计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。
作为本发明的一个实施例,还提供一种控制流平坦化自动检测装置,每一个基本块为一个节点,所述装置包括查找模块11、构建模块12、确定模块13、计算处理模块14;
查找模块11,用于查找用于表示节点支配关系和层级关系的中间支配块;
构建模块12,用于以查找出的所有中间支配块为节点构建支配树;
确定模块13,用于以构建的支配树为基础,确定支配节点;
计算处理模块14,用于计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码。
该装置还包括关系表建立模块;
关系表建立模块,用于将所有支配节点和被支配节点的关系列表输出形成支配关系表。
确定模块,具体用于在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块。还用于从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;
确定模块还包括循环检查单元、确定单元;
循环检查单元,用于在支配树中通过查找反向边的方法确定基本块控制流中是否有循环;
确定单元,用于循环检查单元确定基本块控制流中存在循环时,确定支配节点。
需要说明的是,计算处理模块包括数目确认单元、计算单元、判断单元和判定输出单元;
数目确认单元,用于计算支配节点支配的基本块的数目;还用于获取支配树中所有基本块的数目;
计算单元,用于将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度;
判断单元,用于判断基本块的控制流平坦化相似度是否大于或等于设定阈值;
判定输出单元,用于判定作为支配节点的基本块所在的代码被控制流平坦化处理过。
确定模块,在确定支配节点的过程中,在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点;若存在一条路径,从入口节点到节点A没有经过节点B,那么节点B没有支配节点A。每个节点都支配了它本身。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (5)
1.一种控制流平坦化自动检测方法,其特征在于,每一个基本块为一个节点,包括如下步骤:
从入口节点到出口节点按照执行顺序确定支配节点和被支配节点;
将所有支配节点和被支配节点的关系列表输出形成支配关系表;
在支配关系表中查找用于表示节点支配关系和层级关系的中间支配块;
以查找出的所有中间支配块为节点构建支配树;
以构建的支配树为基础,确定支配节点;
计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码;
其中,
所述的从入口节点到出口节点按照执行顺序确定支配节点和被支配节点的步骤中,确定支配节点的步骤包括:在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点;
所述的在支配关系表中查找用于表示节点支配关系和层级关系的中间支配块的步骤包括:在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块;
所述的以构建的支配树为基础,确定支配节点的步骤包括:在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若有循环,确定支配节点;
所述的计算确定的支配节点支配的基本块的控制流平坦化相似度的步骤包括:计算支配节点支配的基本块的数目;获取支配树中所有基本块的数目;将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度。
2.根据权利要求1所述的控制流平坦化自动检测方法,其特征在于,所述的从入口节点到出口节点按照执行顺序确定支配节点和被支配节点的步骤中,确定支配节点的步骤还包括:
若存在一条路径,从入口节点到节点A没有经过节点B,那么节点B没有支配节点A。
3.根据权利要求2所述的控制流平坦化自动检测方法,其特征在于,每个节点都支配了它本身。
4.一种控制流平坦化自动检测装置,其特征在于,每一个基本块为一个节点,所述装置包括查找模块、构建模块、确定模块、计算处理模块、关系表建立模块;
关系表建立模块,用于将所有支配节点和被支配节点的关系列表输出形成支配关系表;
查找模块,用于在支配关系表中查找用于表示节点支配关系和层级关系的中间支配块;具体用于在支配关系表中查找距离被支配节点最近的支配节点,确认该支配节点为中间支配块;
构建模块,用于以查找出的所有中间支配块为节点构建支配树;
确定模块,用于以构建的支配树为基础,在支配树中通过查找反向边的方法确定基本块控制流中是否有循环,若有循环,确定支配节点;其中,确定模块在确定支配节点的过程中,在入口节点和节点A之间的所有路径,都经过了节点B,那么节点B支配了节点A;节点B为支配节点;
计算处理模块,用于计算确定的支配节点支配的基本块的控制流平坦化相似度,若计算的相似度大于或等于设定阈值,判断该基本块所在的代码是被控制流平坦化处理后的代码;
计算处理模块包括数目确认单元、计算单元;
数目确认单元,用于计算支配节点支配的基本块的数目;还用于获取支配树中所有基本块的数目;计算单元,用于将支配节点支配的基本块的数目,除以支配树中的所有基本块数目,即为该基本块的控制流平坦化相似度。
5.根据权利要求4所述的控制流平坦化自动检测装置,其特征在于,计算处理模块还包括判断单元和判定输出单元;
判断单元,用于判断基本块的控制流平坦化相似度是否大于或等于设定阈值;
判定输出单元,用于判定作为支配节点的基本块所在的代码被控制流平坦化处理过。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110792580.2A CN113254068B (zh) | 2021-07-14 | 2021-07-14 | 一种控制流平坦化自动检测方法、装置 |
PCT/CN2021/127519 WO2023284172A1 (zh) | 2021-07-14 | 2021-10-29 | 一种控制流平坦化自动检测方法、装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110792580.2A CN113254068B (zh) | 2021-07-14 | 2021-07-14 | 一种控制流平坦化自动检测方法、装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113254068A CN113254068A (zh) | 2021-08-13 |
CN113254068B true CN113254068B (zh) | 2021-10-22 |
Family
ID=77191175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110792580.2A Active CN113254068B (zh) | 2021-07-14 | 2021-07-14 | 一种控制流平坦化自动检测方法、装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113254068B (zh) |
WO (1) | WO2023284172A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113254068B (zh) * | 2021-07-14 | 2021-10-22 | 苏州浪潮智能科技有限公司 | 一种控制流平坦化自动检测方法、装置 |
CN116956245A (zh) * | 2023-09-19 | 2023-10-27 | 安徽大学 | 一种基于控制流平坦化混淆的软件水印实现方法及系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2159732A1 (en) * | 2008-08-21 | 2010-03-03 | Thomson Licensing | Method and device for code obfuscation |
EP3012762A1 (en) * | 2014-10-24 | 2016-04-27 | Thomson Licensing | Control flow graph flattening device and method |
CN109101816B (zh) * | 2018-08-10 | 2022-02-08 | 北京理工大学 | 一种基于系统调用控制流图的恶意代码同源性分析方法 |
US10802806B1 (en) * | 2019-03-29 | 2020-10-13 | Advanced Micro Devices, Inc. | Generating vectorized control flow using reconverging control flow graphs |
CN110673852B (zh) * | 2019-09-20 | 2023-06-23 | 北京智游网安科技有限公司 | 一种基于编译器前端实现控制流平坦的方法、系统及设备 |
CN113031930B (zh) * | 2019-12-24 | 2022-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种控制流平坦化的源代码混淆生成方法及装置 |
CN113254068B (zh) * | 2021-07-14 | 2021-10-22 | 苏州浪潮智能科技有限公司 | 一种控制流平坦化自动检测方法、装置 |
-
2021
- 2021-07-14 CN CN202110792580.2A patent/CN113254068B/zh active Active
- 2021-10-29 WO PCT/CN2021/127519 patent/WO2023284172A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
CN113254068A (zh) | 2021-08-13 |
WO2023284172A1 (zh) | 2023-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113254068B (zh) | 一种控制流平坦化自动检测方法、装置 | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
KR20100069573A (ko) | 프로그램 분석을 보조하는 방법, 컴퓨터 판독가능한 기록 매체 및 컴퓨터 시스템 | |
CN114547611A (zh) | 一种基于多模态特征的智能合约庞氏骗局检测方法及系统 | |
CN111767547A (zh) | 一种基于复杂网络社团的软件漏洞检测方法 | |
CN110019845B (zh) | 一种基于知识图谱的社区演化分析方法及装置 | |
CN114826947A (zh) | 一种基于自动编码器的流量矩阵恢复预测方法及系统 | |
CN113886832A (zh) | 智能合约漏洞检测方法、系统、计算机设备和存储介质 | |
CN112712125A (zh) | 事件流的模式匹配方法、装置、存储介质及处理器 | |
Asiler et al. | Bb-graph: A subgraph isomorphism algorithm for efficiently querying big graph databases | |
CN115470504B (zh) | 结合人工智能的数据风险分析方法及服务器 | |
CN100451969C (zh) | 一种复合条件分支结构的识别方法 | |
CN115965065A (zh) | 一种模型计算方法、装置及设备 | |
CN116341634A (zh) | 神经结构搜索模型的训练方法、装置及电子设备 | |
CN115408700A (zh) | 基于二进制程序模块化的开源组件检测方法 | |
CN113688403A (zh) | 一种基于符号执行验证的智能合约漏洞检测方法及装置 | |
Luo et al. | Compact Abstract Graphs for Detecting Code Vulnerability with GNN Models | |
Liu et al. | Dynamic learning of automata from the call stack log for anomaly detection | |
CN106528179A (zh) | 一种Java类依赖关系的静态识别方法 | |
Shou et al. | LLM4Fuzz: Guided Fuzzing of Smart Contracts with Large Language Models | |
CN111753295A (zh) | 一种基于漏洞利用程序特征的漏洞利用程序检测方法 | |
CN117828618B (zh) | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 | |
CN117421611B (zh) | 一种水泥制造厂的废气成分过滤方法及系统 | |
CN113342524B (zh) | 作战体系结构可靠性分析方法、装置、设备和介质 | |
CN114638548B (zh) | 一种工业控制系统的风控方法、装置及电子设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |