CN111814120B - 程序反混淆处理方法、装置、设备及存储介质 - Google Patents
程序反混淆处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111814120B CN111814120B CN202010664908.8A CN202010664908A CN111814120B CN 111814120 B CN111814120 B CN 111814120B CN 202010664908 A CN202010664908 A CN 202010664908A CN 111814120 B CN111814120 B CN 111814120B
- Authority
- CN
- China
- Prior art keywords
- chain
- program
- block
- blocks
- real
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 25
- 238000000034 method Methods 0.000 claims abstract description 281
- 230000008569 process Effects 0.000 claims abstract description 232
- 238000012545 processing Methods 0.000 claims description 32
- 238000004088 simulation Methods 0.000 claims description 23
- 230000008439 repair process Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 3
- 238000004458 analytical method Methods 0.000 abstract description 9
- 230000006399 behavior Effects 0.000 abstract description 6
- 230000008901 benefit Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 241000700605 Viruses Species 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种程序反混淆处理方法、装置、设备及存储介质,涉及信息安全技术领域,该方法包括:根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块;以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块;根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链;将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。本方法实现了程序的逆向分析,达到辅助分析程序的目的,有效避免恶意逃避程序检测,获取非法利益的行为。
Description
技术领域
本申请涉及信息安全技术领域,具体而言,涉及一种程序反混淆处理方法、装置、设备及存储介质。
背景技术
近年来,伴随着移动互联网的高速发展,端上的攻防对抗也是愈演愈烈。为了更好的保护自己的核心程序,越来越多的开发者选择将其转移至Native层。这中间也不乏一些病毒木马开发者、***软件制作者等等,它们试图借由APP加固混淆技术逃避检测。在这样的背景下,Ollvm的应用也是越来越广泛,并还有大量在此之上进行二次开发的魔改版本。控制流平坦化作为当中最常用的混淆手法,需要提出一种方法对其进行反制、推导出程序的正常执行逻辑,以辅助我们进行逆向分析。
但是,对于程序如何进行反混淆,目前还没有一种行之有效的解决方法。
发明内容
有鉴于此,本申请实施例的目的在于提供一种程序反混淆处理方法、装置、设备及存储介质,以实现程序反混淆,有效避免恶意逃避程序检测,获取非法利益的行为。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种程序反混淆处理方法,包括:
根据预设规则,确定目标程序对应的多个流程链,所述流程链包括:入口链、循环链和返回链,每个所述流程链包括至少一个基本块,所述基本块包括:真实块或虚假块;
以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块;
根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,合并多个所述流程链,获取逻辑链;
将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序。
可选地,所述根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,合并多个所述流程链,获取逻辑链,包括:
模拟执行所述目标程序,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境;
根据所述上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系;
根据所述关联关系,合并多个所述流程链,生成所述逻辑链。
可选地,所述根据预设规则,确定目标程序对应的多个流程链,包括:
根据预设规则,将所述目标程序中预设程序分解为多个基本块;
根据每个基本块的引用数量,从所述多个基本块中确定分发器;
根据所述分发器的调用关系,确定所述目标程序对应的多个流程链。
可选地,所述以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块,包括:
以所述目标程序的分发器为起始,遍历所述目标程序,首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块。
可选地,所述首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块,包括:
判断所述预设跳转指令为第一跳转指令或者第二跳转指令;
若为所述第一跳转指令,且所述第一跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定所述目标跳转地址为所述流程链的真实块入口地址;或者,
若为所述第二跳转指令,且所述第二跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定所述下一个基本块的起始地址为所述流程链的真实块入口地址;
根据确定的所述真实块入口地址,确定每个所述流程链所包含的真实块。
可选地,所述模拟执行所述目标程序,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,包括:
采用预设模拟执行框架,在强制模式下,对所述目标程序的多个流程链进行模拟执行,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,所述上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
可选地,所述根据所述关联关系,合并多个所述流程链,生成所述逻辑链,包括:
切换所述强制模式为常规模式;
在所述常规模式下,根据所述每个流程链对应的上下文环境,模拟执行所述目标程序,确定所述每个流程链关联的至少一个其他流程链;
根据所述每个流程链关联的至少一个其他流程链,合并所述多个流程链,生成所述逻辑链。
可选地,所述将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序,包括:
使用NOP空指令,无效化所述逻辑链中包含的所述虚假块;
重构所述多个流程链,得到所述目标程序对应的原始程序。
可选地,所述重构所述多个流程链,得到所述目标程序对应的原始程序,包括:
根据所述逻辑链,确定每个流程链的末尾真实块对应的至少一个后继块;
根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,得到所述目标程序对应的原始程序。
可选地,所述根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,包括:
若所述后继块包括一个,则在所述流程链的末尾真实块尾部添加预设绝对跳转指令,连接所述流程链与所述后继块;
若所述后继块包括两个,且所述目标基本块包含预设条件指令,则分别在所述流程链的末尾真实块尾部添加预设的绝对跳转指令、以及所述预设条件指令对应的地址处添加预设的条件跳转指令,连接所述流程链与所述后继块。
可选地,所述方法还包括:
若所述后继块包括至少三个,则输出提示信息,所述提示信息用于指示用户进行修补。
第二方面,本申请实施例提供了一种程序反混淆处理装置,包括:确定模块、获取模块、重构模块;
所述确定模块,用于根据预设规则,确定目标程序对应的多个流程链,所述流程链包括:入口链、循环链和返回链,每个所述流程链包括至少一个基本块,所述基本块包括:真实块或虚假块;以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块;
所述获取模块,用于根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,合并多个所述流程链,获取逻辑链;
所述重构模块,用于将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序。
可选地,所述获取模块,具体用于模拟执行所述目标程序,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境;根据所述上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系;根据所述关联关系,合并多个所述流程链,生成所述逻辑链。
可选地,所述确定模块,具体用于根据预设规则,将所述目标程序中预设程序分解为多个基本块;根据每个基本块的引用数量,从所述多个基本块中确定分发器;根据所述分发器的调用关系,确定所述目标程序对应的多个流程链。
可选地,所述确定模块,具体用于以所述目标程序的分发器为起始,遍历所述目标程序,首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块。
可选地,所述确定模块,具体用于判断所述预设跳转指令为第一跳转指令或者第二跳转指令;若为所述第一跳转指令,且所述第一跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定所述目标跳转地址为所述流程链的真实块入口地址;或者,若为所述第二跳转指令,且所述第二跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定所述下一个基本块的起始地址为所述流程链的真实块入口地址;根据确定的所述真实块入口地址,确定每个所述流程链所包含的真实块。
可选地,所述获取模块,具体用于采用预设模拟执行框架,在强制模式下,对所述目标程序的多个流程链进行模拟执行,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,所述上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
可选地,所述获取模块,具体用于切换所述强制模式为常规模式;在所述常规模式下,根据所述每个流程链对应的上下文环境,模拟执行所述目标程序,确定所述每个流程链关联的至少一个其他流程链;根据所述每个流程链关联的至少一个其他流程链,合并所述多个流程链,生成所述逻辑链。
可选地,所述重构模块,具体用于使用NOP空指令,无效化所述逻辑链中包含的所述虚假块;重构所述多个流程链,得到所述目标程序对应的原始程序。
可选地,所述重构模块,具体用于根据所述逻辑链,确定每个流程链的真实块对应的至少一个后继块;根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,得到所述目标程序对应的原始程序。
可选地,所述重构模块,具体用于若所述后继块包括一个,则在所述流程链的末尾真实块尾部添加预设绝对跳转指令,连接所述流程链与所述后继块;若所述后继块包括两个,且所述目标基本块包含预设条件指令,则分别在所述流程链的末尾真实块尾部添加预设的绝对跳转指令、以及所述预设条件指令对应的地址处添加预设的条件跳转指令,连接所述流程链与所述后继块。
可选地,所述重构模块,还用于若所述后继块包括至少三个,则输出提示信息,所述提示信息用于指示用户进行修补。
第三方面,本申请实施例提供了一种处理设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当处理设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行时执行如上述第一方面所述的程序反混淆处理方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述第一方面所述的程序反混淆处理方法的步骤。
本申请的有益效果:
本申请实施例提供了一种程序反混淆处理方法,包括:根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块;以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块;根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链;将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。通过遍历查找确定真实块,并基于确定的流程链的出口上下文,结合真实块的地址,确定各真实块之间的关联关系,去除虚假块,连接各真实块,重构得到目标程序对应的原始程序。从而实现了程序的逆向分析,达到辅助分析程序的目的,有效避免恶意逃避程序检测,获取非法利益的行为。
另外,针对生成的逻辑链,采用多种修补手段,从而保证了反混淆后的程序能够正常显示,实现接近原始语义的还原程度,使得反混淆后的结果具有较高的准确性和可靠性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的可以实现本申请思想的处理设备的示例性硬件和软件组件的示意图;
图2为本申请实施例提供的一种程序反混淆处理方法的流程示意图;
图3为本申请实施例提供的另一种程序反混淆处理方法的流程示意图;
图4为本申请实施例提供的又一种程序反混淆处理方法的流程示意图;
图5为本申请实施例提供的另一种程序反混淆处理方法的流程示意图;
图6为本申请实施例提供的又一种程序反混淆处理方法的流程示意图;
图7为本申请实施例提供的另一种程序反混淆处理方法的流程示意图,可选地;
图8为本申请实施例提供的又一种程序反混淆处理方法的流程示意图;
图9为本申请实施例提供的另一种程序反混淆处理方法的流程示意图;
图10本申请实施例提供的一种程序反混淆处理装置示意图;
图11为本申请实施例提供的一种处理设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文环境的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
图1为本申请实施例提供的可以实现本申请思想的处理设备的示例性硬件和软件组件的示意图。例如,处理器220可以用于电子设备200上,并且用于执行本申请中的功能。电子设备200可以是通用计算机或特殊用途的计算机,两者都可以用于实现本申请的程序反混淆处理方法。本申请尽管仅示出了一个计算机,但是为了方便起见,可以在多个类似平台上以分布式方式实现本申请描述的功能,以均衡处理负载。
例如,电子设备200可以包括连接到网络的网络端口210、用于执行程序指令的一个或多个处理器220、通信总线230、和不同形式的存储介质240,例如,磁盘、ROM、或RAM,或其任意组合。示例性地,计算机平台还可以包括存储在ROM、RAM、或其他类型的非暂时性存储介质、或其任意组合中的程序指令。根据这些程序指令可以实现本申请的方法。电子设备200还包括计算机与其他输入输出设备(例如键盘、显示屏)之间的输入/输出(Input/Output,I/O)接口250。
为了便于说明,在电子设备200中仅描述了一个处理器。然而,应当注意,本申请中的电子设备200还可以包括多个处理器,因此本申请中描述的一个处理器执行的步骤也可以由多个处理器联合执行或单独执行。例如,若电子设备200的处理器执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同的处理器共同执行或者在一个处理器中单独执行。例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一处理器和第二处理器共同执行步骤A和B。
以下将通过多个实施例对本申请的程序反混淆处理方法的具体实现步骤、原理及产生的有益效果进行说明。
图2为本申请实施例提供的一种程序反混淆处理方法的流程示意图,可选地,本申请方法的执行主体可以是计算机、服务器等处理设备,如图2所示,本申请的方法可包括:
S101、根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块。
首先,需要说明的是,在程序开发过程中,为了防止程序被恶意盗取或攻击,在程序开发过程中,通常通过在原始程序中添加伪代码或者虚假块等方式,对原始程序进行混淆,以对程序进行保护。
但是,也会存在一些不法分子通过程序混淆的方式,规避程序的检测,比如病毒木马、***外挂等。而通过程序反混淆技术,则可以帮助软件安全从业者更好的进行程序逆向分析,从而将利用程序混淆方法进行恶意操作的对象识别出来,以阻止恶意行为的发生。
而程序反混淆,也即,通过分析,找到混淆程序中的有用块和无用块,其中,有用块也即真实块,无用块也即为了进行程序混淆,加入到原始程序中的虚假块、伪代码等。并进一步地确认真实块之间的关联关系,从而还原原始程序逻辑。本申请的方法则是通过程序反混淆,达到辅助逆向分析的目的。其中,本申请的程序反混淆处理方法主要应用于Ollvm(Obfuscator-LLVM,LLVM代码混淆)场景下的反混淆处理。
可选地,先对本实施例中所涉及的名词进行解释说明。流程链:由一系列相关基本块组成,一条流程链可对应原始代码的一个真实基本块。入口链:入口为程序起始地址,出口为分发器的流程链。循环链:入口及出口都为分发器的流程链。返回链:入口为分发器,出口为程序结束地址的流程链。
可选地,可通过搜索对分发器的引用关系,将目标程序拆分为多条流程链,其中可包括:多条入口链、多条循环链及多条返回链。且每条入口链、每条循环链和每条返回链均可由至少一个基本块组成。
S102、以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块。
通常,流程链中所包含的基本块既可以有真实块,也可以有虚假块。其中,虚假块可以包括:分发器、伪代码、公共前缀基本块等,其可以理解为不包含任何真实指令的程序块。而真实块可以指:含有真实指令的程序块。而对于入口链,其所包含的基本块均为真实块,故,本实施例中,可以分发器为起始位置,向下遍历查找目标程序,也即对目标程序中的所有路径(所有流程链)进行遍历,确定除入口链之外的其他流程链中所包含的真实块。
S103、根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链。
在一些实施例中,在确定每条流程链所包含的真实块之后,还可进一步地确定各真实块之间的关联关系。以根据各真实块之间的关联关系,将多条流程链相互连接,得到逻辑链。其中,逻辑链为保留原始程序分支逻辑的流程链,是由多条流程链合并生成。
可选地,本实施例中,可采用模拟执行目标程序的方式,得到目标程序中每条流程链的出口上下文。其中,出口上下文,可以理解为对一条指定的流程链(或者称之为路径)模拟执行后获取的。可选地,根据该出口上下文,调用分发器获取与该指定流程链关联的下一个真实块地址,从而可确定各真实块之间的关系。
S104、将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。
可选地,由于上述合并生成的逻辑链中还包含有混淆程序时所添加的虚假块,那么,本实施例中,可采用预设方法,去掉逻辑链中的虚假块,例如:去掉分发器、公共前缀基本块(一般指分发器相关程序的基本块,也指switch结构预处理基本块)。以将剩余的所有真实块重新连接起来,重构还原目标程序的原始逻辑,得到目标程序对应的原始程序,以达到辅助分析的目的。
在一些情况下,当从逻辑链中去掉虚假块后,需要将所有的真实块连接起来,那么,则需要确定每个真实块与其他真实块的连接关系,故,在重构获取原始程序之前,还可采用指令修复方法进行指令修复,确定每个真实块的连接关系,并重构得到原始程序。
综上,本实施例提供的程序反混淆处理方法,包括:根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块;以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块;根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链;将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。通过遍历查找确定真实块,并基于确定的流程链的出口上下文,结合真实块的地址,确定各真实块之间的关联关系,去除虚假块,连接各真实块,重构得到目标程序对应的原始程序。从而实现了程序的逆向分析,达到辅助分析程序的目的,有效避免恶意逃避程序检测,获取非法利益的行为。
图3为本申请实施例提供的另一种程序反混淆处理方法的流程示意图,可选地,如图3所示,上述步骤S103中,根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链,可以包括:
S201、模拟执行目标程序,获取除返回链以外流程链返回分发器时的上下文环境。
可选地,本申请中可采用Unicorn框架,对所有的入口链进行模拟执行,获取运行到分发器时的上下文,并进一步地,根据该上下文环境,对所有的循环链进行模拟执行,得到返回分发器时的出口上下文。
S202、根据上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系。
可选地,基于上述记录的所有执行路径,可确定每条流程链对应的下一个真实块的入口地址,从而确定各真实块之间的前后顺序。
例如:在确定了指定流程链中末尾的真实块A的位置为n后,从n+1开始追踪,若经过分发器,则直接忽略跳过,直到跟踪到第一个真实块B的首条指令地址,则B就为真实块A的下一个需要执行的真实块。
当一个真实块可能跳转到两个真实块(原始程序条件跳转if)的情况,同样可基于记录的执行路径,判断条件满足时跳到哪个真实块,不满足时跳到哪个真实块。从而确定各真实块之间的连接关系。
S203、根据关联关系,合并多个流程链,生成逻辑链。
可选地,根据各真实块之间的关联关系,将目标程序对应的多条流程链进行按顺序连接,以得到逻辑链。
图4为本申请实施例提供的又一种程序反混淆处理方法的流程示意图,可选地,如图4所示,上述步骤S101中,根据预设规则,确定目标程序对应的多个流程链,可以包括:
S301、根据预设规则,将目标程序中预设程序分解为多个基本块。
S302、根据每个基本块的引用数量,从多个基本块中确定分发器。
可选地,本实施例中,在确定真实块之前,可以先将目标程序中的条件执行指令拆解为多个基本块,以从所有的基本块中找到真实块。
可选地,可编写IDAPython脚本,调用接口获取目标程序的CFG(Control FlowGraph,控制流程图)流程图,并初始化Capstone反汇编引擎。遍历该CFG流程图下的全部基本块,计算每个基本块的引用次数,将引用数量最多的那个基本块标识为分发器。
在上述过程中,当识别到IT、ITT类条件执行指令时,就对当前地址的指令信息进行记录,再将IT、ITT类条件执行指令替换为等效的B类条件跳转指令,实现基本块的拆解。
需要说明的是,CFG流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。CFG流程图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。
另外,采用unicorn模拟执行框架不能很好的识别IT、ITT这类条件执行语句,会导致执行出错,本实施例中,可对这类指令进行特殊处理,以转义指令、拆解基本块的方式,帮助指令执行。
可选地,本实施例中,可将IT、ITT类条件执行指令替换为B类条件跳转指令,例如:BGT、BLE类条件跳转指令。在将目标程序进行基本块拆解的同时,还可以保证指令执行的准确性。其中,上述两种类型指令均可用于实现特定条件下的代码执行,作用类似,在替换后不会影响程序的准确性。
可选地,在对基本块进行拆解后,则可调用接口,对上述目标程序的进行重分析,刷新CFG流程图,以保证CFG流程图的准确性。
S303、根据分发器的调用关系,确定目标程序对应的多个流程链。
可选地,上述确定了分发器后,可以以目标程序的入口基本块为起点,分发器为终点,通过向下检索基本块对分发器的调用关系,找出所有的入口链。进一步的,再以分发器为起点,找出全部重新回到分发器的循环链以及返回链。
上述步骤S102中,以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块,可以包括:以目标程序的分发器为起始,遍历目标程序,首次匹配到预设跳转指令时,根据预设跳转指令对应的目标跳转地址、以及每个流程链对应的下一个基本块的地址,确定每个流程链所包含的真实块。
可选地,本实施例中,可利用每个入口的真实块都对应原始程序中的一个switch/case语句、拥有唯一的Ollvm Number(唯一编号)的原理,从分发器开始向下查找、遍历目标程序的全部路径,以首次匹配到预设跳转指令为准,可有效识别出所有的真实块。其中,预设跳转指令可以为BEQ(等于)或BNE(不等于)指令。
通常,入口链中包含的基本块均为真实块,那么,可从分发器开始向下遍历,对除入口链之外的其他流程链进行查找,确定所有真实块。
图5为本申请实施例提供的另一种程序反混淆处理方法的流程示意图,可选地,如图5所示,上述步骤中,首次匹配到预设跳转指令时,根据预设跳转指令对应的目标跳转地址、以及每个流程链对应的下一个基本块的地址,确定每个流程链所包含的真实块,可以包括:
S401、判断预设跳转指令为第一跳转指令或者第二跳转指令。
可选地,本实施例中,第一跳转指令可以指BEQ指令,第二跳转指令可以指BNE指令。当然,实际应用中,预设跳转指令并不限于上述的BEQ(相等跳转)指令或者是BNE(不相等跳转)指令,也可以为其他的类似绝对的判断跳转指令。
S402、若为第一跳转指令,且第一跳转指令对应的目标跳转地址、与预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定目标跳转地址为流程链的真实块入口地址。
当首次匹配到BEQ这种绝对的判断跳转指令时,且指令中的目标跳转地址与该路径下的下一个基本块的起始地址相同,则可确定该跳转地址为当前这条流程链中的真实块入口地址。
S403、若为第二跳转指令,且第二跳转指令对应的目标跳转地址、与预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定下一个基本块的起始地址为流程链的真实块入口地址。
与上述确定方法类似,当首次匹配到BNE这种绝对的判断跳转指令时,且指令中的目标跳转地址与该路径下的下一个基本块的起始地址不同,则可确定下一个基本块的起始地址为当前这条流程链中的真实块入口地址。
可选地,本实施例中所采用的真实块确定方法,实现较为简单,可以有效提高真实块的查找效率。
当然,除了上述的确定方法,本实施例还可提供其他真实块确定方法。如:从分发器开始遍历接下来引用的基本块,记录每次遍历到的基本块,若发现这个基本块在记录列表里,那么确定上次遍历到的基本块为真实块。类似二叉树,从上往下找,发现最后的节点的下一个节点是之前遍历到的,那么这个节点就是真实块。当然,真实块的确定的方法并不限于上述所列举的,此处不再一一列举。
S404、根据确定的真实块入口地址,确定每个流程链所包含的真实块。
在一些实施例中,真实块的后面所连接的基本块一定是真实块,基于此,本实施例中,在确定了任意流程链的真实块的入口地址,也即确定了首个真实块后,则可确定该流程链中的所有真实块。
可选地,上述步骤S201中,模拟执行目标程序,获取除返回链以外流程链返回分发器时的上下文环境,可以包括:采用预设模拟执行框架,在强制模式下,对目标程序的多个流程链进行模拟执行,获取除返回链以外流程链返回分发器时的上下文环境,上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
在采用Unicorn模拟执行框架模拟执行目标程序之前,需给目标程序提供可运行的环境。可先安装Unicorn模拟执行框架,利用该库创建一个虚拟机实例,再结合IDA(Interactive Disassembler,交互式反汇编器)提供的接口获取该ELF(ExecutableandLinkableFormat,可执行连接格式)文件的加载段(Load Segment)、将其映射到内存。
可选地,在虚拟机内自定义强制模式,模拟执行目标程序。需要说明的是,强制模式下,会忽略执行过程中的所有跳转指令,执行下一条指令,直到运行结束,从而获取返回链以外流程链返回分发器时的上下文环境。
例如:若当前所运行到的指令是一条跳转指令,则会根据当前地址和指令长度算出下一条指令的地址,写入到PC寄存器,从而实现对所有跳转指令的禁用,以确保代码能够按照指定的路径执行,实现在强制模式下,对目标程序的模拟执行。
图6为本申请实施例提供的又一种程序反混淆处理方法的流程示意图,可选地,如图6所示,上述步骤S203中,根据关联关系,合并多个流程链,生成逻辑链,可以包括:
S501、切换强制模式为常规模式。
在上述强制模式下模拟执行目标程序,也即模拟执行目标程序中所包含的每条流程链,得到每条流程链的出口上下文后,则在虚拟机内将强制模式切换为常规模式,调用分发器,进行常规模拟执行。
常规模式下,则会放宽限制,允许跳转范围在程序内部的指令运行,并且当指令地址等于前面记录的真实块入口地址或程序的结束地址时,就自动停下、防止程序跑飞。
S502、在常规模式下,根据每个流程链对应的上下文环境,模拟执行目标程序,确定每个流程链关联的至少一个其他流程链。
可选地,在常规模式下,可以根据上述得到的每条流程链的出口上下文,调用分发器做模拟执行,确定当前流程链所对应的下一个真实块的地址,以得到当前流程链的关联链。
采用本实施例的模拟执行方法,可同时确定任意流程链的所有关联链,关联链的获取为并行处理,可有效提高关联链的获取效率。
S503、根据每个流程链关联的至少一个其他流程链,合并多个流程链,生成逻辑链。
可选地,可根据每条流程链、以及每条流程链对应的关联链,确定所有流程链的连接关系,并根据连接关系,将多条流程链相互连接,生成逻辑链。同时,将逻辑链中被替换为B类跳转指令的条件执行指令进行还原,恢复原始函数的CFG流程图。
图7为本申请实施例提供的另一种程序反混淆处理方法的流程示意图,可选地,如图7所示,上述步骤S104中,将逻辑链中的虚假块无效化,重构获取目标程序对应的原始程序,可以包括:
S601、使用NOP空指令,无效逻辑链中包含的虚假块。
需要说明的是,上述生成的逻辑链中还包含有混淆程序时所添加的虚假块,而本实施例中,需要重构得到目标程序对应的原始程序,则需要将之前所添加的虚假块去除,以恢复原始程序。
可选地,可对确定的虚假块进行Nop指令填充,无效掉分发器、公共前缀基本块以及其他没有在逻辑链中出现的虚假块,并结合逻辑链梳理出每个基本块的后继块。
S602、重构多个流程链,得到目标程序对应的原始程序。
可选地,在对逻辑链中的虚假块进行无效后,还可进一步地确定逻辑链中所有真实块之间的连接关系,从而根据各真实块之间的连接关系,将多个基本块重新连接,重构流程链,得到目标程序对应的原始程序,也即实现程序的反混淆。
图8为本申请实施例提供的又一种程序反混淆处理方法的流程示意图,可选地,如图8所示,上述步骤S602中,重构多个流程链,得到目标程序对应的原始程序,可以包括:
S701、根据逻辑链,确定每个流程链的末尾真实块对应的至少一个后继块。
可选地,混淆了虚假块的程序从一个真实块跳转到下一个真实块时,它们之间通常隔着多个虚假块,因此,上述在使用NOP指令无效掉虚假块后,还需要对跳转指令的跳转偏移量进行修正,使的每个基本块可以正常跳转至下一个基本块,也即,使每条流程链的尾部可以连接到下一个流程链的入口真实块。
可选地,可根据生成的逻辑链,以及原始函数的CFG流程图,确定每条流程链的末尾真实块对应的后继块数量。其中,后继块也即基本块,当一个基本块是连接在另一个基本块之后时,则可以认为其为另一个基本块的后继块。
S702、根据后继块的数量、以及流程链中目标基本块的跳转范围,采用相应的修补手段,对目标目标基本块进行修补,得到目标程序对应的原始程序。
可选地,可根据当前要修复的指令地址,以及它要跳转到的位置,结合对应的汇编指令格式,判断是否在允许的跳转范围内,根据具体情况进行修复。
可选地,对于真实块对应的后继块数量的不同,可分别采用不同的修补手段,对每个流程链的目标基本块进行修补,以使得修复后的多个流程链之间可以准确连接,确保得到的原始程序的准确性。
下面针对真实块对应的后继块数量的不同,对所采用的不同修补手段进行详细说明。
图9为本申请实施例提供的另一种程序反混淆处理方法的流程示意图,可选地,如图9所示,上述步骤S702中,根据后继块的数量、以及流程链中目标基本块的跳转范围,采用相应的修补手段,对目标基本块进行修补,可以包括:
S801、若后继块包括一个,则在流程链的末尾真实块尾部添加预设绝对跳转指令,连接流程链与后继块。
当真实块的后继块包括一个,也即真实块只有一个子节点时,则可通过在该真实块的尾部添加预设绝对跳转指令,将当前流程链与其他流程链连接,实现流程链的连接。其中,预设绝对跳转指令可以为:fill_jmp_offset(),用于填充新的跳转偏移量。
S802、若后继块包括两个,且目标基本块包含预设条件指令,则分别在流程链的末尾真实块尾部添加预设的绝对跳转指令、以及预设条件指令对应的地址处添加预设的条件跳转指令,连接流程链与后继块。
而当末尾真实块(流程链中最后一个真实块)的后继块包括两个,也即真实块有两个子节点时,且该真实块包含预设的条件指令(如IT、ITT等)时,则可通过在末尾真实块尾部添加与上述类似的绝对跳转指令,同时在预设条件指令对应地址处添加条件跳转指令,以实现目标基本块的修复。
可选地,如图9所示,本申请的方法还可包括:
S803、若后继块包括至少三个,则输出提示信息,提示信息用于指示用户进行修补。
当然,除了上述情况,当真实块的后继块包含三个及三个以上时,则无法通过直接添加指令修补的方式进行修补,那么,则可输出相应的日志提示信息,从而使得用户(逆向分析人员)根据提示的信息,对流程链进行修补。
由于上述经过模拟执行已经得到了真实块之间正确的关联关系并且保存了所有分支的指令,生成了逻辑链,那么,可以根据逻辑链确定的后继块数量结果,采用相应的修补手段进行流程链中目标基本块的修复,从而保证了反混淆后的程序能够正常显示,使得反混淆结果具有较高的准确性和可靠性。
综上,本实施例提供的程序反混淆处理方法,包括:根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块;以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块;根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链;将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。通过遍历查找确定真实块,并基于确定的流程链的出口上下文,结合真实块的地址,确定各真实块之间的关联关系,去除虚假块,连接各真实块,重构得到目标程序对应的原始程序。从而实现了程序的逆向分析,达到辅助分析程序的目的,有效避免恶意逃避程序检测,获取非法利益的行为。
另外,针对生成的逻辑链,采用多种修补手段,从而保证了反混淆后的程序能够正常显示,实现接近原始语义的还原程度,使得反混淆后的结果具有较高的准确性和可靠性。
下述对用以执行本申请所提供的程序反混淆处理方法对应的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图10本申请实施例提供的一种程序反混淆处理装置示意图,该程序反混淆处理装置实现的功能对应上述方法执行的步骤。该装置可以理解为上述服务器,或服务器的处理器,也可以理解为独立于上述服务器或处理器之外的在服务器控制下实现本申请功能的组件,如图10所示,该装置可以包括:确定模块810、获取模块820、重构模块830;
确定模块810,用于根据预设规则,确定目标程序对应的多个流程链,流程链包括:入口链、循环链和返回链,每个流程链包括至少一个基本块,基本块包括:真实块或虚假块;以目标程序的分发器为起始,遍历目标程序,确定每个流程链所包含的真实块;
获取模块820,用于根据每个流程链的出口上下文环境、以及流程链中真实块的地址,合并多个流程链,获取逻辑链;
重构模块830,用于将逻辑链中的虚假块无效,重构获取目标程序对应的原始程序。
可选地,获取模块820,具体用于模拟执行目标程序,获取除返回链以外流程链返回分发器时的上下文环境;根据上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系;根据关联关系,合并多个流程链,生成逻辑链。
可选地,确定模块810,具体用于根据预设规则,将目标程序中预设程序分解为多个基本块;根据每个基本块的引用数量,从多个基本块中确定分发器;根据分发器的调用关系,确定目标程序对应的多个流程链。
可选地,确定模块810,具体用于以目标程序的分发器为起始,遍历目标程序,首次匹配到预设跳转指令时,根据预设跳转指令对应的目标跳转地址、以及每个流程链对应的下一个基本块的地址,确定每个流程链所包含的真实块。
可选地,确定模块810,具体用于判断预设跳转指令为第一跳转指令或者第二跳转指令;若为第一跳转指令,且第一跳转指令对应的目标跳转地址、与预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定目标跳转地址为流程链的真实块入口地址;或者,若为第二跳转指令,且第二跳转指令对应的目标跳转地址、与预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定下一个基本块的起始地址为流程链的真实块入口地址;根据确定的真实块入口地址,确定每个流程链所包含的真实块。
可选地,获取模块820,具体用于采用预设模拟执行框架,在强制模式下,对目标程序的多个流程链进行模拟执行,获取除返回链以外流程链返回分发器时的上下文环境,上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
可选地,获取模块820,具体用于切换强制模式为常规模式;在常规模式下,根据每个流程链对应的上下文环境,模拟执行目标程序,确定每个流程链关联的至少一个其他流程链;根据每个流程链关联的至少一个其他流程链,合并多个流程链,生成逻辑链。
可选地,重构模块830,具体用于使用NOP空指令,无效化逻辑链中包含的虚假块;重构多个流程链,得到目标程序对应的原始程序。
可选地,重构模块830,具体用于根据逻辑链,确定每个流程链的末尾真实块对应的至少一个后继块;根据后继块的数量、以及流程链中目标基本块的跳转范围,采用相应的修补手段,对目标基本块进行修补,得到目标程序对应的原始程序。
可选地,重构模块830,具体用于若后继块包括一个,则在流程链的末尾真实块尾部添加预设绝对跳转指令,连接流程链与后继块;若后继块包括两个,且目标基本块包含预设条件指令,则分别在流程链的末尾真实块尾部添加预设的绝对跳转指令、以及预设条件指令对应的地址处添加预设的条件跳转指令,连接流程链与后继块。
可选地,重构模块830,还用于若后继块包括至少三个,则输出提示信息,提示信息用于指示用户进行修补。
上述模块可以经由有线连接或无线连接彼此连接或通信。有线连接可以包括金属线缆、光缆、混合线缆等,或其任意组合。无线连接可以包括通过LAN、WAN、蓝牙、ZigBee、或NFC等形式的连接,或其任意组合。两个或更多个模块可以组合为单个模块,并且任何一个模块可以分成两个或更多个单元。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
需要说明的是,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(Digital Singnal Processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上***(System-on-a-chip,简称SOC)的形式实现。
图11为本申请实施例提供的一种处理设备的结构示意图,该处理设备可以为上述的服务器或者处理器,可选地,如图11所示,该处理设备可包括:处理器901和存储器902,其中:
存储器902用于存储程序,处理器901调用存储器902存储的程序,以执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本发明还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (24)
1.一种程序反混淆处理方法,其特征在于,包括:
根据预设规则,确定目标程序对应的多个流程链,所述流程链包括:入口链、循环链和返回链,每个所述流程链包括至少一个基本块,所述基本块包括:真实块或虚假块;所述入口链用于标识入口为程序起始地址,出口为分发器的流程链,所述循环链用于标识入口及出口都为分发器的流程链,所述返回链用于标识入口为分发器,出口为程序结束地址的流程链;
以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块,所述分发器用于标识引用数量最多的基本块;
根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,确定各真实块之间的关联关系,并根据所述关联关系合并多个所述流程链,获取逻辑链;
将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序。
2.根据权利要求1所述的方法,其特征在于,所述根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,确定各真实块之间的关联关系,并根据所述关联关系合并多个所述流程链,获取逻辑链,包括:
模拟执行所述目标程序,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境;
根据所述上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系;
根据所述关联关系,合并多个所述流程链,生成所述逻辑链。
3.根据权利要求1所述的方法,其特征在于,所述根据预设规则,确定目标程序对应的多个流程链,包括:
根据预设规则,将所述目标程序中预设程序分解为多个基本块;
根据每个基本块的引用数量,从所述多个基本块中确定分发器;
根据所述分发器的调用关系,确定所述目标程序对应的多个流程链。
4.根据权利要求1所述的方法,其特征在于,所述以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块,包括:
以所述目标程序的分发器为起始,遍历所述目标程序,首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块。
5.根据权利要求4所述的方法,其特征在于,所述首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块,包括:
判断所述预设跳转指令为第一跳转指令或者第二跳转指令,所述第一跳转指令包括相等跳转指令,所述第二跳转指令包括不相等跳转指令;
若为所述第一跳转指令,且所述第一跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定所述目标跳转地址为所述流程链的真实块入口地址;或者,
若为所述第二跳转指令,且所述第二跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定所述下一个基本块的起始地址为所述流程链的真实块入口地址;
根据确定的所述真实块入口地址,确定每个所述流程链所包含的真实块。
6.根据权利要求2所述的方法,其特征在于,所述模拟执行所述目标程序,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,包括:
采用预设模拟执行框架,在强制模式下,对所述目标程序的多个流程链进行模拟执行,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,所述上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
7.根据权利要求6所述的方法,其特征在于,所述根据所述关联关系,合并多个所述流程链,生成所述逻辑链,包括:
切换所述强制模式为常规模式;
在所述常规模式下,根据所述每个流程链对应的上下文环境,模拟执行所述目标程序,确定所述每个流程链关联的至少一个其他流程链;
根据所述每个流程链关联的至少一个其他流程链,合并所述多个流程链,生成所述逻辑链。
8.根据权利要求1所述的方法,其特征在于,所述将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序,包括:
使用NOP空指令,无效化所述逻辑链中包含的所述虚假块;
重构所述多个流程链,得到所述目标程序对应的原始程序。
9.根据权利要求8所述的方法,其特征在于,所述重构所述多个流程链,得到所述目标程序对应的原始程序,包括:
根据所述逻辑链,确定每个流程链的末尾真实块对应的至少一个后继块;
根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,得到所述目标程序对应的原始程序。
10.根据权利要求9所述的方法,其特征在于,所述根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,包括:
若所述后继块包括一个,则在所述流程链的末尾真实块尾部添加预设绝对跳转指令,连接所述流程链与所述后继块;
若所述后继块包括两个,且所述目标基本块包含预设条件指令,则分别在所述流程链的末尾真实块尾部添加预设的绝对跳转指令、以及所述预设条件指令对应的地址处添加预设的条件跳转指令,连接所述流程链与所述后继块。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
若所述后继块包括至少三个,则输出提示信息,所述提示信息用于指示用户进行修补。
12.一种程序反混淆处理装置,其特征在于,包括:确定模块、获取模块、重构模块;
所述确定模块,用于根据预设规则,确定目标程序对应的多个流程链,所述流程链包括:入口链、循环链和返回链,每个所述流程链包括至少一个基本块,所述基本块包括:真实块或虚假块;所述入口链用于标识入口为程序起始地址,出口为分发器的流程链,所述循环链用于标识入口及出口都为分发器的流程链,所述返回链用于标识入口为分发器,出口为程序结束地址的流程链;以所述目标程序的分发器为起始,遍历所述目标程序,确定每个流程链所包含的真实块,所述分发器用于标识引用数量最多的基本块;
所述获取模块,用于根据每个所述流程链的出口上下文环境、以及所述流程链中真实块的地址,确定各真实块之间的关联关系,并根据所述关联关系合并多个所述流程链,获取逻辑链;
所述重构模块,用于将所述逻辑链中的虚假块无效化,重构获取所述目标程序对应的原始程序。
13.根据权利要求12所述的装置,其特征在于,所述获取模块,具体用于模拟执行所述目标程序,获取除所述返回链以外所有流程链返回所述分发器时的上下文环境;根据所述上下文环境,调用分发器获取对应的下一个真实块入口地址,得到关联关系;根据所述关联关系,合并多个所述流程链,生成所述逻辑链。
14.根据权利要求12所述的装置,其特征在于,所述确定模块,具体用于根据预设规则,将所述目标程序中预设程序分解为多个基本块;根据每个基本块的引用数量,从所述多个基本块中确定分发器;根据所述分发器的调用关系,确定所述目标程序对应的多个流程链。
15.根据权利要求12所述的装置,其特征在于,所述确定模块,具体用于以所述目标程序的分发器为起始,遍历所述目标程序,首次匹配到预设跳转指令时,根据所述预设跳转指令对应的目标跳转地址、以及所述每个流程链对应的下一个基本块的地址,确定所述每个流程链所包含的真实块。
16.根据权利要求15所述的装置,其特征在于,所述确定模块,具体用于判断所述预设跳转指令为第一跳转指令或者第二跳转指令,所述第一跳转指令包括相等跳转指令,所述第二跳转指令包括不相等跳转指令;若为所述第一跳转指令,且所述第一跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址相同,则确定所述目标跳转地址为所述流程链的真实块入口地址;或者,若为所述第二跳转指令,且所述第二跳转指令对应的目标跳转地址、与所述预设跳转指令所在流程链对应的下一个基本块的起始地址不相同,则确定所述下一个基本块的起始地址为所述流程链的真实块入口地址;根据确定的所述真实块入口地址,确定每个所述流程链所包含的真实块。
17.根据权利要求13所述的装置,其特征在于,所述获取模块,具体用于采用预设模拟执行框架,在强制模式下,对所述目标程序的多个流程链进行模拟执行,获取除所述返回链以外所述流程链返回所述分发器时的上下文环境,所述上下文环境用于指示与当前流程链关联的至少一个其他流程链的真实块地址。
18.根据权利要求17所述的装置,其特征在于,所述获取模块,具体用于切换所述强制模式为常规模式;在所述常规模式下,根据所述每个流程链对应的上下文环境,模拟执行所述目标程序,确定所述每个流程链关联的至少一个其他流程链;根据所述每个流程链关联的至少一个其他流程链,合并所述多个流程链,生成所述逻辑链。
19.根据权利要求12所述的装置,其特征在于,所述重构模块,具体用于使用NOP空指令,无效化所述逻辑链中包含的所述虚假块;重构所述多个流程链,得到所述目标程序对应的原始程序。
20.根据权利要求19所述的装置,其特征在于,所述重构模块,具体用于根据所述逻辑链,确定每个流程链的末尾真实块对应的至少一个后继块;根据所述后继块的数量、以及所述流程链中目标基本块的跳转范围,采用相应的修补手段,对所述目标基本块进行修补,得到所述目标程序对应的原始程序。
21.根据权利要求20所述的装置,其特征在于,所述重构模块,具体用于若所述后继块包括一个,则在所述流程链的末尾真实块尾部添加预设绝对跳转指令,连接所述流程链与所述后继块;若所述后继块包括两个,且所述目标基本块包含预设条件指令,则分别在所述流程链的末尾真实块尾部添加预设的绝对跳转指令、以及所述预设条件指令对应的地址处添加预设的条件跳转指令,连接所述流程链与所述后继块。
22.根据权利要求21所述的装置,其特征在于,所述重构模块,还用于若所述后继块包括至少三个,则输出提示信息,所述提示信息用于指示用户进行修补。
23.一种处理设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当处理设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至11任一所述的程序反混淆处理方法的步骤。
24.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至11任一所述的程序反混淆处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664908.8A CN111814120B (zh) | 2020-07-10 | 2020-07-10 | 程序反混淆处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010664908.8A CN111814120B (zh) | 2020-07-10 | 2020-07-10 | 程序反混淆处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111814120A CN111814120A (zh) | 2020-10-23 |
CN111814120B true CN111814120B (zh) | 2021-04-23 |
Family
ID=72843290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010664908.8A Active CN111814120B (zh) | 2020-07-10 | 2020-07-10 | 程序反混淆处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111814120B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834837A (zh) * | 2015-04-03 | 2015-08-12 | 西北大学 | 一种基于语义的二进制代码反混淆方法 |
CN106203007A (zh) * | 2015-05-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、装置及计算设备 |
CN106650340A (zh) * | 2016-11-16 | 2017-05-10 | 中国人民解放军国防科学技术大学 | 一种采用动态细粒度代码隐藏与混淆技术的二进制软件保护方法 |
CN108153518A (zh) * | 2017-12-25 | 2018-06-12 | 厦门市美亚柏科信息股份有限公司 | 一种java程序反混淆方法及终端 |
WO2018193429A1 (en) * | 2017-04-20 | 2018-10-25 | Morphisec Information Security Ltd. | System and method for runtime detection, analysis and signature determination of obfuscated malicious code |
CN108985063A (zh) * | 2018-07-13 | 2018-12-11 | 南方电网科学研究院有限责任公司 | 一种恶意代码混淆检测方法、***、计算机设备、介质 |
CN110516445A (zh) * | 2019-08-07 | 2019-11-29 | 南方电网科学研究院有限责任公司 | 反检测恶意代码的识别方法、装置及存储介质 |
CN110515652A (zh) * | 2019-08-30 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 代码摘要的生成方法、装置和存储介质 |
CN110727925A (zh) * | 2019-08-23 | 2020-01-24 | 北京邮电大学 | 一种目标应用安全检测方法、装置与电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407809B (zh) * | 2016-09-20 | 2019-03-01 | 四川大学 | 一种Linux平台恶意软件检测方法 |
CN110502897A (zh) * | 2018-05-16 | 2019-11-26 | 南京大学 | 一种基于混合分析的网页恶意JavaScript代码识别和反混淆方法 |
CN109145534B (zh) * | 2018-07-24 | 2022-11-11 | 上海交通大学 | 针对软件虚拟机保护的反混淆***及方法 |
CN109784009A (zh) * | 2018-12-15 | 2019-05-21 | 深圳壹账通智能科技有限公司 | 代码混淆方法、***、计算机装置及计算机可读存储介质 |
-
2020
- 2020-07-10 CN CN202010664908.8A patent/CN111814120B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834837A (zh) * | 2015-04-03 | 2015-08-12 | 西北大学 | 一种基于语义的二进制代码反混淆方法 |
CN106203007A (zh) * | 2015-05-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、装置及计算设备 |
CN106650340A (zh) * | 2016-11-16 | 2017-05-10 | 中国人民解放军国防科学技术大学 | 一种采用动态细粒度代码隐藏与混淆技术的二进制软件保护方法 |
WO2018193429A1 (en) * | 2017-04-20 | 2018-10-25 | Morphisec Information Security Ltd. | System and method for runtime detection, analysis and signature determination of obfuscated malicious code |
CN108153518A (zh) * | 2017-12-25 | 2018-06-12 | 厦门市美亚柏科信息股份有限公司 | 一种java程序反混淆方法及终端 |
CN108985063A (zh) * | 2018-07-13 | 2018-12-11 | 南方电网科学研究院有限责任公司 | 一种恶意代码混淆检测方法、***、计算机设备、介质 |
CN110516445A (zh) * | 2019-08-07 | 2019-11-29 | 南方电网科学研究院有限责任公司 | 反检测恶意代码的识别方法、装置及存储介质 |
CN110727925A (zh) * | 2019-08-23 | 2020-01-24 | 北京邮电大学 | 一种目标应用安全检测方法、装置与电子设备 |
CN110515652A (zh) * | 2019-08-30 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 代码摘要的生成方法、装置和存储介质 |
Non-Patent Citations (2)
Title |
---|
PowerDrive: Accurate De-obfuscation and Analysis of PowerShell Malware;Denis Ugarte 等;《DIMVA 2019: Detection of Intrusions and Malware, and Vulnerability Assessment》;20190606;第240-259页 * |
基于ACFG的抗混淆二进制代码克隆检测方法研究;郑玲玲;《中国优秀硕士学位论文全文数据库 信息科技辑》;20200315(第03期);第I138-192页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111814120A (zh) | 2020-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chandramohan et al. | Bingo: Cross-architecture cross-os binary search | |
KR101719635B1 (ko) | 동적 함수 호출 시스템들에서 공격적인 자기-수정을 위한 시스템 및 방법 | |
US20180101565A1 (en) | Software security via control flow integrity checking | |
CN108345773A (zh) | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 | |
CN112115427B (zh) | 代码混淆方法、装置、电子设备及存储介质 | |
US10417412B2 (en) | Protecting computer code against ROP attacks | |
Garba et al. | Saturn-software deobfuscation framework based on llvm | |
US11403372B2 (en) | Systems, methods, and storage media for obfuscating a computer program by representing the control flow of the computer program as data | |
Haller et al. | Dowser: a guided fuzzer to find buffer overflow vulnerabilities | |
CN110851168B (zh) | 数据处理方法及其装置、计算机可读存储介质 | |
KR20180129623A (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN111538665A (zh) | 程序的测试方法和装置、存储介质、电子装置 | |
US20160335175A1 (en) | Determining valid inputs for an unknown binary program | |
CN105653271B (zh) | 行为树的静态解析、执行以及优化方法和装置 | |
CN111814120B (zh) | 程序反混淆处理方法、装置、设备及存储介质 | |
He et al. | Exploiting binary-level code virtualization to protect Android applications against app repackaging | |
CN115168861A (zh) | 数据安全验证方法、装置、设备及存储介质 | |
CN108021790A (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
Musliner et al. | Fuzzbomb: Autonomous cyber vulnerability detection and repair | |
CN110515652B (zh) | 代码摘要的生成方法、装置和存储介质 | |
Kawakoya et al. | Taint-assisted IAT Reconstruction against Position Obfuscation | |
CN112541188B (zh) | 阻止应用程序代码被静态分析的方法及装置 | |
Yee et al. | A static and dynamic visual debugger for malware analysis | |
CN105608374B (zh) | 虚拟机逃逸的检测方法及装置 | |
CN113439271B (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 |