CN111752570B - 一种编译方法、装置、终端及计算机可读存储介质 - Google Patents
一种编译方法、装置、终端及计算机可读存储介质 Download PDFInfo
- Publication number
- CN111752570B CN111752570B CN202010602147.3A CN202010602147A CN111752570B CN 111752570 B CN111752570 B CN 111752570B CN 202010602147 A CN202010602147 A CN 202010602147A CN 111752570 B CN111752570 B CN 111752570B
- Authority
- CN
- China
- Prior art keywords
- source code
- objective function
- behavior
- risk
- risk level
- 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
- 238000000034 method Methods 0.000 title claims abstract description 42
- 239000012634 fragment Substances 0.000 claims abstract description 23
- 230000006870 function Effects 0.000 claims description 265
- 230000006399 behavior Effects 0.000 claims description 151
- 230000015654 memory Effects 0.000 claims description 40
- 238000012545 processing Methods 0.000 claims description 19
- 238000012360 testing method Methods 0.000 claims description 14
- 244000035744 Hura crepitans Species 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 8
- 230000002155 anti-virotic effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 4
- 208000006011 Stroke Diseases 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种编译方法、装置、终端及计算机可读存储介质,其中方法包括:获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码,可以对源代码进行有效地检测,防止编译生成恶意软件。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种编译方法、装置、终端及计算机可读存储介质。
背景技术
目前,随着计算机技术的发展,开发者利用应用的源代码在系统中编译生成可执行程序,从而生成恶意软件。系统可以针对生成的可执行程序进行静态检测(如在未运行的状态下检测可执行文件的调用的系统函数、导出表、数据段和字符序列)或者动态检测(如在可执行文件运行过程中,观察其可疑操作)。如果发现可执行程序存在可疑操作,如调用数据段,则通过防病毒软件或者杀毒软件对这些恶意软件进行查杀,但生成的可执行程序(恶意软件)仍然会对系统的安全造成威胁,无法确保系统的安全性。因此,如何防止恶意软件的生成成为亟待解决的问题。
发明内容
本发明实施例提供了一种编译方法、装置、终端及计算机可读存储介质,可以对源代码进行有效地检测,防止编译生成恶意软件。
本发明实施例第一方面提供了一种编译方法,包括:
获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;
通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码。
本发明实施例第二方面提供了一种编译装置,包括:
获取模块,用于获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;
处理模块,用于通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
所述处理模块,还用于根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码。
本发明实施例第三方面提供了一种终端,包括:处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面所述的方法。
本发明实施例第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面所述的方法。
在本发明实施例中,编译器获取应用的源代码包括的带有标签的目标函数,其中,目标函数包括源代码中具有特定功能的函数片段或者类,并通过运行目标函数获取目标函数的行为,进而根据目标函数的行为确定源代码的风险等级,根据源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,可以对源代码进行有效地检测,防止编译生成恶意软件。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种编译方法的流程示意图;
图2a是本发明实施例提供的编译器为具有文件操作功能的函数打上标签的过程;
图2b是本发明实施例提供的编译器为具有文件上传功能的函数打上标签的过程;
图2c是本发明实施例提供的内存值和寄存器值;
图3是本发明实施例提供的另一种编译方法的流程示意图;
图4是本发明实施例提供的一种编译装置的结构示意图;
图5是本发明实施例提供的一种终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,大多数的恶意软件或者恶意应用都是在生成可执行程序的基础上进行检测,并调用防病毒/防恶意软件进行查杀。这种检测方法即使对该恶意软件或者恶意应用进行查杀,在生成可执行程序后仍然会对系统的安全造成一定的威胁。而本发明实施例提供一种编译方法,在恶意软件或者恶意应用生成可执行程序之前,编译器运行应用的源代码中的带有标签的目标函数,根据运行目标函数的结果进行判断是否可以编译成可执行文件,即获取应用的源代码包括的带有标签的目标函数,并运行目标函数确定源代码的风险等级,通过源代码的风险等级确定编译生成代码对应的可执行文件或者拒绝编译源代码,实现对恶意代码的检测,可以防止恶意软件的生成,从而保证系统的安全。
由于针对所有编程语言(源代码)在生成可执行文件前都需要进行编译或解释,而本发明实施例中涉及到编译器,因此,下面是对编译器进行介绍。
针对所有编程语言(源代码)在生成可执行文件前都需要编译器进行编译或解释,编译器把可读性强的高级语言代码(源代码)逐行地翻译成包含机器码的二进制文件(可执行文件),而这些二进制文件中包含CPU所能识别的机器码,并且这些机器码定义CPU如何去操作保存于寄存器和内存的数据。
此外,在翻译的过程中编译器能够知道每一行高级语言代码(源代码)实现的函数功能,进行符号链接、动态库链接和错误检查等等。
请参阅图1,为本发明实施例提供的一种编译方法的流程示意图。本实施例中所描述的编译方法,该方法应用于编译器,包括以下步骤:
101、编译器获取应用的源代码包括的带有标签的目标函数。
其中,上述目标函数包括源代码中具有特定功能的函数片段或者类。
在一种可行的实施例中,由于编译器能够知道应用的源代码对应实现的函数功能,编译器在获取应用的源代码包括的带有标签的目标函数之前,对应用的源代码中的函数片段或类进行扫描,得到扫描结果,针对函数功能为特定功能的函数片段或类添加标签,并将添加有标签的函数片段或类作为源代码中的目标函数。其中,扫描结果可以包括应用的源代码中每个函数片段或每个类的函数功能。编译器对应用的源代码中具有特定功能的函数或者类添上标签,得到源代码中的目标函数,以便后续对带有标签的目标函数进行检测。
其中,特定功能的函数可以是指存在操作文件及目录、连接内网外服务器、网络请求、下载文件和释放资源文件等函数。
例如,图2a是编译器为具有文件操作功能函数打上标签的过程,编译器对应用的源代码中的函数片段进行扫描,发现具有文件操作功能的函数,并将该函数添加标签;又例如,图2b是编译器为具有文件上传功能的函数打上标签的过程,编译器对应用的源代码中的函数片段进行扫描,发现具有文件上传功能的函数,并将该函数添加标签;
102、编译器通过运行目标函数获取目标函数的行为,并根据上述行为确定源代码的风险等级。
具体的,编译器先获取运行目标函数所需要的信息,在获取运行目标函数需要的信息后在系统内存中运行目标函数,并运行目标函数以及获取目标函数的行为,进而对上述目标函数的行为进行分析确定源代码的风险等级。
需要说明的是,上述运行目标函数需要将目标函数转换成机器码,再在内存中运行。
在一种可行的实施例中,若目标函数具有特定功能的函数片段,且目标函数需要其他函数的返回值作为变量或者需要导入第三方库的API(Application ProgrammingInterface,应用程序接口),则编译器从源代码中获取运行该目标函数需要的信息,然后运行目标函数。其中,需要的信息可以是其他函数的返回值或者第三方库的API。
在一种可行的实施例中,若目标函数是具有特定功能的类,编译器需要构造类的实例,则编译器从源代码中获取构造类需要的信息进行构造,并运行构造类的实例。其中,构造类的实例可以通过继承来扩展功能或者从源代码中获取需要其他信息来进行构造。
在一种可行的实施例中,若目标函数为无参函数(即无参数函数或类不需要无参数构造器)时,编译器在运行目标函数可以获取运行该目标函数的寄存器值和内存值,并根据该目标函数的寄存器值和内存值(例如,图2c为目标函数的寄存器值和内存值)获取为该目标函数分配的栈段、栈指针指示器和栈的大小,进而根据栈段、栈指针指示器和栈的大小确定栈顶的返回值,根据返回值确定目标函数的行为。其中,该目标函数分配的栈段、栈指针指示器和栈的大小由操作系统分配,由于栈是先进后出的向栈内存放数据,那么当栈存放满后,栈指针指示器则指向栈顶,因此根据栈段、栈指针指示器和栈的大小可以确定栈顶的返回值,根据返回值可以快速确定函数的具体功能,即能够快速确定目标函数的行为。例如,如图2c中,根据目标函数的寄存器值和内存值可以获取到栈段SS=073F,栈指针指示器SP=00FD,编译器通过SS*16+SP可以得到指向栈顶单元中目标函数的返回值,根据返回值确定确定目标函数的行为。
在一种可行的实施例中,若目标函数为有参函数,编译器运行目标函数,并获取目标函数对应的参数的输入值以及根据参数运行目标函数得到的返回值,根据该输入值和该返回值确定目标函数的行为。
在一种可行的实施例中,操作系统为目标函数分配栈段、栈的大小、参数压入栈的内存单元,结果值存在于栈顶。例如:栈段SS=073FH,栈指针指示器SP=0000H,假设:数据大小为3个word(字,16bit),则返回值存放于073F*16+0000=73F0:0000内存地址中,假设参数存放于073F*16+0020=73F0:0020内存单元中,进一步地,编译器运行目标函数并对存放参数的内存单元进行查看,若有操作比如mov、and、sub等操作指令,则继续查看参数经过目标函数运行后的内存单元(即查看参数的内存单元以及根据参数运行目标函数得到的返回值的内存单元),直到参数被销毁,内存单元回收。
需要说明的是,某些函数或类需要参数,且参数从一个函数传递到另一个函数,从一个函数传递到类构造器,从一个类通过继承传递到另一个类,然后再输出结果,因此,对于有参函数,编译器需要跟踪参数的输入值和和参数经过处理后的输出,从而获取返回值。例如,如果一个函数参数经过目标函数处理后以返回值的形式被其他函数或子程序调用,那么跟踪函数参数直到内存回收。
103、编译器根据源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码。
具体的,编译器根据源代码的风险等级判断源代码是否可以编译成可执行文件,根据判断结果确定编译生成源代码对应的可执行文件或者拒绝编译源代码。
在一种可行的实施例中,编译器可以将风险等级预先设置为三个等级,分别为第一等级、第二等级、第三等级,通过设置风险等级可以快速确定源代码的安全。若源代码的风险等级为第一等级,则拒绝编译源代码,若源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,并根据更新后的源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,若源代码的风险等级为第三等级,则编译生成源代码对应的可执行文件。其中,第一等级高于第二等级,第二等级高于第三等级。
例如,编译器将风险等级设置为高风险(即第一等级)、中风险(即第二等级),低风险(即第三等级),若风险等级为高风险,则编译器拒绝编译源代码,若风险等级为中风险,则通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,并根据更新后的源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,若风险等级为低风险,则编译生成源代码对应的可执行文件。
需要说明的是,若源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,并根据更新后的源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码的技术细节将在实施例图3中详细介绍。
在本发明实施例中,编译器获取应用的源代码包括的带有标签的目标函数,并通过运行目标函数获取目标函数的行为,进而根据目标函数的行为确定源代码的风险等级,并根据源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,实现对应用的源代码的有效判断,从而防止恶意软件的生成。
请参阅图3,为本发明实施例提供的另一种编译方法的流程示意图。本实施例中所描述的编译方法,应用于编译器,包括以下步骤:
301、编译器获取应用的源代码包括的带有标签的目标函数。
302、编译器通过运行目标函数获取目标函数的行为。
303、编译器从预先定义的多种行为中获取与目标函数的行为匹配的行为。
其中,与目标函数的行为匹配的行为可以是一个或者多个。
304、编译器根据预先定义的每种行为对应的风险等级确定匹配的行为中每种行为对应的风险等级。
具体的,编译器对上述预定义的多种行为中的每种行为都设置对应的风险等级,编译器获取与目标函数的行为匹配的行为之后,可以对应确定与目标函数的行为匹配的行为中每个行为对应的风险等级。
305、编译器根据每种行为对应的风险等级确定源代码的风险等级。
其中,编译器可以根据每种行为对应的风险等级确定源代码的风险等级,或者编译器先确定每种行为对应的风险等级,然后根据每种行为对应的风险系数之和进行二次判断,从而保证对源代码风险判断的准确性。
在一种可行的实施例中,编译器根据每种行为对应的风险等级确定源代码的风险等级的具体实现方式可以是编译器判断匹配的行为中是否存在第一等级的行为,若匹配的行为中存在风险等级为第一等级的行为,则确定源代码的风险等级为第一等级,若匹配的行为中不存在风险等级为第一等级的行为,则根据预先定义的每种行为对应的风险系数确定匹配的行为中每种行为对应的风险系数,得到风险系数之和,并根据风险系数之和确定源代码的风险等级。
需要说明的是,编译器确定的匹配行为中存在风险等级为第一等级的行为为第一等级后,则无需求取每种行为对应的风险系数之和。
在一种可行的实施例中,进一步地,编译器对风险等级以风险系数之和进行划分,即根据风险系数之和确定源代码的风险等级,若风险系数之和大于或等于第一数值,则确定源代码的风险等级为第一等级,若风险系数之和大于或等于第二数值,且小于第一数值,则确定源代码的风险等级为第二等级,若风险系数之和小于第二数值,则确定代码的风险等级为第三等级,其中,第一等级高于第二等级,第二等级高于第三等级,第一数值大于第二数值。其中,第一数值、第二数值可以根据需求进行设置,第一等级、第二等级和第三等级可以根据需求进行设置或者由开发者设置。
例如,第一等级为高风险,第二等级为中风险,第三等级为低风险。风险系数之和大于或等于1,则确定源代码的风险等级为高风险;风险系数之和大于或等于0.5并且小于1,则确定源代码的风险等级为中风险,风险系数之和小于0.5,则确定源代码的风险等级为低风险。
306、编译器根据源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码。
在一种可行的实施例中,若源代码的风险等级为上述第一等级,则拒绝编译源代码,若源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,并根据更新后的源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,若源代码的风险等级为第三等级,则编译生成所述源代码对应的可执行文件。
在一种可行的实施例中,创建一沙箱,该沙箱提供运行该源代码对应的可执行文件的环境。若源代码的风险等级为第二等级,需要进行预编译生成用于测试的可执行文件,并通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,并根据更新后的源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码。
在一种可行的实施例中,更新该源代码的风险等级的具体实现方式可以包括两种:
其中一种更新该源代码的风险等级的具体实现方式包括:若运行用于测试的可执行文件触发预定义的多种行为中一个或者多个行为(这里理解为包括源代码的风险等级为第二等级中的行为),则根据每种行为对应的风险等级确定源代码的风险等级或者如果触发的行为中每种行为不存在风险等级为第一等级的行为,那么获取每种行为对应的风险系数,根据风险系数之和确定源代码的风险等级(即得到更新后的源代码的风险等级)。
另一种更新该源代码的风险等级的具体实现方式包括:若运行用于测试的可执行文件触发预定义的多种行为中一个或者多个(除源代码的风险等级为第二等级中的行为),则将获取此时新增的行为对应的风险等级,并根据新增的行为对应的风险等级更新源代码的风险等级或者如果新增的行为中不存在风险等级为第一等级,则获取新增的行为对应的风险系数,根据新增的行为对应的风险系数以及先前的行为对应的风险系数,更新源代码的风险等级。
在一种可行的实施例中,编译器在拒绝编译源代码的同时,会输出提示信息,例如,可以是文本框的提示信息,即文本信息为“软件存在安全风险,禁止编译!”;也可以是语音提示信息。
在一种可行的实施例中,对于不可编译的源代码可以通过应用名称、文件hash值和被标记的函数名称加入黑名单,当接收到编译某个应用的源代码时,编译器检查黑名单,若该应用的源代码存在黑名单中,则直接禁止编译,使得后续判断该源代码更加简单快速。
在一种可行的实施例中,如果根据上述实施例中的方法确定源代码的风险等级为第二等级,且在沙箱的预编译环境中源代码的风险等级也为第二等级,编译器可以发送软件通知信息给杀毒软件或防恶意软件,该提示信息用于提示可执行文件为未知风险软件,后续由杀毒软件或防恶意软件判断其是否为恶意软件。
在本发明实施例中,编译器获取应用的源代码包括的带有标签的目标函数,通过运行目标函数获取目标函数的行为,从预先定义的多种行为中获取与目标函数的行为匹配的行为,并根据预先定义的每种行为对应的风险等级确定匹配的行为中每种行为对应的风险等级,进而根据每种行为对应的风险等级确定源代码的风险等级,并根据源代码的风险等级确定编译生成源代码对应的可执行文件或者拒绝编译源代码,可以防止恶意软件的生成。
下面通过对预定义的多种行为、预定义的多种行为中每个行为的风险等级和风险系数以及如何确定源代码是否编译生成可执行文件进行举例。
假设预先定义的多种行为以及预定义该多种行为中每种行为对应的风险等级和风险系数如下:
A.下载文件,且该文件为可执行文件,风险等级定义为高风险,风险系数1(最大值为1);
B.释放资源,释放资源后删除自身,并且附加到其他进程中,风险等级定义为高风险,风险系数1;
C.尝试提升权限,由用户权限提升为管理员权限或系统权限,风险等级定义为高风险,风险系数为1;
D.记录键盘、用户浏览历史、用户存储于浏览器等的密码,风险等级定义为高风险,风险系数1;
E.读写注册表,设定自身为自启动,风险等级定义为高风险,风险系数1;
F.读取内存中的用户密码Hash值或明文值,风险等级定义为高风险,风险系数1;
G.更改文件类型并加密用户文件,风险等级定义为高风险,风险系数1;
H.尝试结束杀毒软件进程,风险等级定义为高风险,风险系数1;
I.尝试篡改系统文件,风险等级定义为高风险,风险系数1;
J.文件操作,复制文件、移动文件、文件上传、新建文件和删除文件等,风险等级定义为中风险,风险系数0.5;
K.网络请求,通过http请求和TCP/UDP请求等,风险等级定义为中风险,风险系数0.5;
L.读取目录和路径,搜索特定文件类型,风险等级定义为中风险,风险系数0.5;
M.更改环境变量,自身配置,风险等级定义为中风险,风险系数0.5;
N.开启硬件设备功能,如开启摄像头,获取拍照权限,开启定位功能等,风险等级定义为中风险,风险系数0.5;
O.其余行为的风险等级定义为低风险,风险系数0.1;
编译器首先对应用的源代码进行扫描,发现其功能存在操作文件及目录、连接内网外服务器、网络请求、下载文件和释放资源文件等函数或功能时,为它们打上标签,得到目标函数。
当编译器运行目标函数,获取目标函数的行为,根据目标函数的行为进行查找预先定义的多个行为中与目标函数的行为匹配的行为,并且确定与目标函数的行为匹配的行为中每个行为对应的风险等级:
如果其中任意一个行为为高风险(如下载文件,且该文件为可执行文件),那么拒绝编译源代码,或者如果与目标函数的行为匹配的行为为两个,这两个行为(分别为网络请求,通过http请求和TCP/UDP请求等、读取目录和路径,搜索特定文件类型)对应的风险等级为中风险,那么获取这两个行为对应的风险系数,得到这两个风险系数之和等于1时,根据两个风险系数之和确定源代码的风险等级为高风险,那么拒绝编译源代码,或者,如果低风险的风险系数和等于1时,认定为高风险,那么拒绝编译源代码。
如果与目标函数的行为匹配的行为中每个行为对应的风险等级为低风险,则获取每个行为对应的风险系数,当风险系数之和等于或者大于0.5时,编译器认定源代码的风险等级为中风险,那么通过沙箱中的预编译环境运行源代码的用于测试的可执行文件,得到运行结果,根据运行结果更新源代码的风险等级,如果在沙箱中运行的用于测试的可执行文件触发的行为系数之和等于1或大于1,那么拒绝编译源代码,如果在沙箱中运行的用于测试的可执行文件触发的行为的系数之和等于或大于0.5,小于1,那么可以进行编译生成可执行文件。
如果与目标函数的行为匹配的行为中每个行为对应的风险等级为低风险,那么获取每个行为对应的风险系数,当风险系数之和小于0.5,那么认定源代码的风险等级为低风险,那么编译生成可执行文件。
需要说明的是,本实施例中,只要目标函数的行为中的每个行为对应的风险等级或者风险系数之和满足高风险,则拒绝编译成可执行文件。
请参阅图4,为本发明实施例提供的一种编译装置的结构示意图。本实施例中所描述的编译装置,包括:
获取模块401,用于获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;
处理模块402,用于通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
所述处理模块402,还用于根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码。
可选地,所述获取应用的源代码包括的带有标签的目标函数之前,所述处理器402,还用于:
对应用的源代码中的函数片段或类进行扫描,得到扫描结果,所述扫描结果包括每个函数片段或每个类的函数功能;
针对函数功能为特定功能的函数片段或类添加标签;
将添加有标签的函数片段或类作为所述源代码中的目标函数。
可选地,所述目标函数为无参函数,所述处理模块402,具体用于:
运行所述目标函数,并获取运行所述目标函数的寄存器值和内存值;
根据所述目标函数的寄存器值和内存值获取为所述目标函数分配的栈段、栈指针指示器和栈的大小;
根据所述栈段、所述栈指针指示器和所述栈的大小确定栈顶的返回值;
根据所述返回值确定所述目标函数的行为。
可选地,所述目标函数为有参函数,所述处理模块402,具体用于:
运行所述目标函数;
获取所述目标函数对应的参数的输入值以及根据所述参数运行所述目标函数得到的返回值;
根据所述输入值和所述返回值确定所述目标函数的行为。
可选地,所述装置还包括确定模块403,其中:
所述获取模块401,还用于从预先定义的多种行为中获取与所述目标函数的行为匹配的行为;
所述确定模块403,用于根据所述预先定义的每种行为对应的风险等级确定所述匹配的行为中每种行为对应的风险等级;
所述确定模块403,还用于根据所述每种行为对应的风险等级确定所述源代码的风险等级。
可选地,所述确定模块403,具体用于:
判断所述匹配的行为中是否存在第一等级的行为;
若是,则确定所述源代码的风险等级为所述第一等级;
若否,则根据所述预先定义的每种行为对应的风险系数确定所述匹配的行为中每种行为对应的风险系数,得到风险系数之和,并根据所述风险系数之和确定所述源代码的风险等级。
可选地,所述确定模块403,具体用于:
若所述风险系数之和大于或等于第一数值,则确定所述源代码的风险等级为所述第一等级;
若所述风险系数之和大于或等于第二数值,且小于所述第一数值,则确定所述源代码的风险等级为第二等级;
若所述风险系数之和小于所述第二数值,则确定所述源代码的风险等级为第三等级,其中,所述第一等级高于所述第二等级,所述第二等级高于所述第三等级,所述第一数值大于所述第二数值。
可选地,所述处理模块402,具体用于:
若所述源代码的风险等级为所述第一等级,则拒绝编译所述源代码;
若所述源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行所述源代码的用于测试的可执行文件,得到运行结果,根据所述运行结果更新所述源代码的风险等级,并根据所述更新后的所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码;
若所述源代码的风险等级为第三等级,则编译生成所述源代码对应的可执行文件。
可以理解的是,本实施例的编译装置的各功能模块可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例图1或者图3的相关描述,此处不再赘述。
请参见图5,图5为本发明实施例提供的一种终端的结构示意图。如图5所示的本实施例中的终端可以包括:处理器501、一个或多个输入设备502、一个或多个输出设备503和存储器504。上述处理器501、输入设备502、输出设备503和存储器504通过总线505连接。存储器504用于存储计算机程序,所述计算机程序包括程序指令,处理器501用于执行存储器504存储的程序指令。
在本发明实施例中,处理器501通过运行存储器504中的可执行程序代码,执行如下操作:
获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;
通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码。
可选地,所述处理器501获取应用的源代码包括的带有标签的目标函数之前,还用于:
对应用的源代码中的函数片段或类进行扫描,得到扫描结果,所述扫描结果包括每个函数片段或每个类的函数功能;
针对函数功能为特定功能的函数片段或类添加标签;
将添加有标签的函数片段或类作为所述源代码中的目标函数。
可选地,所述目标函数为无参函数,所述处理器501通过运行所述目标函数获取所述目标函数的行为的具体实现方式为:
运行所述目标函数,并获取运行所述目标函数的寄存器值和内存值;
根据所述目标函数的寄存器值和内存值获取为所述目标函数分配的栈段、栈指针指示器和栈的大小;
根据所述栈段、所述栈指针指示器和所述栈的大小确定栈顶的返回值;
根据所述返回值确定所述目标函数的行为。
可选地,所述目标函数为有参函数,所述处理器501通过运行所述目标函数获取所述目标函数的行为具体实现方式为:
运行所述目标函数;
获取所述目标函数对应的参数的输入值以及根据所述参数运行所述目标函数得到的返回值;
根据所述输入值和所述返回值确定所述目标函数的行为。
可选地,所述处理器501根据所述行为确定所述源代码的风险等级的具体实现方式为:
从预先定义的多种行为中获取与所述目标函数的行为匹配的行为;
根据所述预先定义的每种行为对应的风险等级确定所述匹配的行为中每种行为对应的风险等级;
根据所述每种行为对应的风险等级确定所述源代码的风险等级。
可选地,所述处理器501,具体用于:
判断所述匹配的行为中是否存在第一等级的行为;
若是,则确定所述源代码的风险等级为所述第一等级;
若否,则根据所述预先定义的每种行为对应的风险系数确定所述匹配的行为中每种行为对应的风险系数,得到风险系数之和,并根据所述风险系数之和确定所述源代码的风险等级。
可选地,所述处理器501,具体用于:
若所述风险系数之和大于或等于第一数值,则确定所述源代码的风险等级为所述第一等级;
若所述风险系数之和大于或等于第二数值,且小于所述第一数值,则确定所述源代码的风险等级为第二等级;
若所述风险系数之和小于所述第二数值,则确定所述源代码的风险等级为第三等级,其中,所述第一等级高于所述第二等级,所述第二等级高于所述第三等级,所述第一数值大于所述第二数值。
可选地,所述处理器501,具体用于:
若所述源代码的风险等级为所述第一等级,则拒绝编译所述源代码;
若所述源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行所述源代码的用于测试的可执行文件,得到运行结果,根据所述运行结果更新所述源代码的风险等级,并根据所述更新后的所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码;
若所述源代码的风险等级为第三等级,则编译生成所述源代码对应的可执行文件。
应当理解,在本申请实施例中,所称处理器501可以是中央处理单元(CentralProcessing Unit,CPU),该处理器501还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器504可以包括只读存储器和随机存取存储器,并向处理器501提供指令和数据。存储器504的一部分还可以包括非易失性随机存取存储器。
该输入设备502可以包括键盘、触控模式输入等,并向处理器501输入数据信息;该输出设备503可以包括显示器等。
具体实现中,本发明实施例中所描述的处理器501、输入设备502、输出设备503和存储器504可执行本发明实施例图1或图3提供的一种编译方法的流程中所描述的实现方式,也可执行本发明实施例提供图4的一种编译装置中所描述的实现方式,在此不再赘述。
本发明实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,可执行上述编译方法实施例图1或图3中所执行的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (7)
1.一种编译方法,其特征在于,应用于编译器,所述方法包括:
获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;所述特定功能包括以下至少一种功能:操作文件及目录、连接内网外服务器、请求网络、下载文件和释放资源文件;
通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码;
其中,所述根据所述行为确定所述源代码的风险等级,包括:
从预先定义的多种行为中获取与所述目标函数的行为匹配的行为;
根据所述预先定义的每种行为对应的风险等级确定所述匹配的行为中每种行为对应的风险等级;
根据所述每种行为对应的风险等级确定所述源代码的风险等级;
若所述目标函数为无参函数,所述通过运行所述目标函数获取所述目标函数的行为,包括:
运行所述目标函数,并获取运行所述目标函数的寄存器值和内存值;
根据所述目标函数的寄存器值和内存值获取为所述目标函数分配的栈段、栈指针指示器和栈的大小;
根据所述栈段、所述栈指针指示器和所述栈的大小确定栈顶的返回值;
根据所述返回值确定所述目标函数的行为;
若所述目标函数为有参函数,所述通过运行所述目标函数获取所述目标函数的行为,包括:
运行所述目标函数;
获取所述目标函数对应的参数的输入值以及根据所述参数运行所述目标函数得到的返回值;
根据所述输入值和所述返回值确定所述目标函数的行为。
2.根据权利要求1所述的方法,其特征在于,所述获取应用的源代码包括的带有标签的目标函数之前,所述方法还包括:
对应用的源代码中的函数片段或类进行扫描,得到扫描结果,所述扫描结果包括每个函数片段或每个类的函数功能;
针对函数功能为特定功能的函数片段或类添加标签;
将添加有标签的函数片段或类作为所述源代码中的目标函数。
3.根据权利要求1所述的方法,其特征在于,所述根据所述每种行为对应的风险等级确定所述源代码的风险等级,包括:
判断所述匹配的行为中是否存在第一等级的行为;
若是,则确定所述源代码的风险等级为所述第一等级;
若否,则根据所述预先定义的每种行为对应的风险系数确定所述匹配的行为中每种行为对应的风险系数,得到风险系数之和,并根据所述风险系数之和确定所述源代码的风险等级。
4.根据权利要求3所述的方法,其特征在于,所述根据所述风险系数之和确定所述源代码的风险等级,包括:
若所述风险系数之和大于或等于第一数值,则确定所述源代码的风险等级为所述第一等级;
若所述风险系数之和大于或等于第二数值,且小于所述第一数值,则确定所述源代码的风险等级为第二等级;
若所述风险系数之和小于所述第二数值,则确定所述源代码的风险等级为第三等级,其中,所述第一等级高于所述第二等级,所述第二等级高于所述第三等级,所述第一数值大于所述第二数值。
5.根据权利要求3或4所述的方法,其特征在于,所述根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码,包括:
若所述源代码的风险等级为所述第一等级,则拒绝编译所述源代码;
若所述源代码的风险等级为第二等级,则通过沙箱中的预编译环境运行所述源代码的用于测试的可执行文件,得到运行结果,根据所述运行结果更新所述源代码的风险等级,并根据所述更新后的所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码;
若所述源代码的风险等级为第三等级,则编译生成所述源代码对应的可执行文件。
6.一种编译装置,其特征在于,应用于编译器,所述装置包括:
获取模块,用于获取应用的源代码包括的带有标签的目标函数,所述目标函数包括所述源代码中具有特定功能的函数片段或者类;所述特定功能包括以下至少一种功能:操作文件及目录、连接内网外服务器、请求网络、下载文件和释放资源文件;
处理模块,用于通过运行所述目标函数获取所述目标函数的行为,并根据所述行为确定所述源代码的风险等级;
所述处理模块,还用于根据所述源代码的风险等级确定编译生成所述源代码对应的可执行文件或者拒绝编译所述源代码;
其中,所述处理模块在根据所述行为确定所述源代码的风险等级时,具体用于:
从预先定义的多种行为中获取与所述目标函数的行为匹配的行为;
根据所述预先定义的每种行为对应的风险等级确定所述匹配的行为中每种行为对应的风险等级;
根据所述每种行为对应的风险等级确定所述源代码的风险等级;
若所述目标函数为无参函数,所述处理模块在通过运行所述目标函数获取所述目标函数的行为时,具体用于:
运行所述目标函数,并获取运行所述目标函数的寄存器值和内存值;
根据所述目标函数的寄存器值和内存值获取为所述目标函数分配的栈段、栈指针指示器和栈的大小;
根据所述栈段、所述栈指针指示器和所述栈的大小确定栈顶的返回值;
根据所述返回值确定所述目标函数的行为;
若所述目标函数为有参函数,所述处理模块在通过运行所述目标函数获取所述目标函数的行为时,具体用于:
运行所述目标函数;
获取所述目标函数对应的参数的输入值以及根据所述参数运行所述目标函数得到的返回值;
根据所述输入值和所述返回值确定所述目标函数的行为。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010602147.3A CN111752570B (zh) | 2020-06-29 | 2020-06-29 | 一种编译方法、装置、终端及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010602147.3A CN111752570B (zh) | 2020-06-29 | 2020-06-29 | 一种编译方法、装置、终端及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752570A CN111752570A (zh) | 2020-10-09 |
CN111752570B true CN111752570B (zh) | 2024-06-14 |
Family
ID=72677786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010602147.3A Active CN111752570B (zh) | 2020-06-29 | 2020-06-29 | 一种编译方法、装置、终端及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752570B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112783508B (zh) * | 2021-02-01 | 2022-05-24 | 北京百度网讯科技有限公司 | 文件的编译方法、装置、设备以及存储介质 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2011239288A1 (en) * | 2006-11-28 | 2011-11-17 | Microsoft Corporation | Compiling executable code into a less-trusted address space |
US8990930B2 (en) * | 2009-02-06 | 2015-03-24 | Microsoft Corporation | Code property analysis for security mitigations |
US8677329B2 (en) * | 2009-06-03 | 2014-03-18 | Apple Inc. | Methods and apparatuses for a compiler server |
CN103164331B (zh) * | 2011-12-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
US8959495B2 (en) * | 2012-09-14 | 2015-02-17 | Oracle International Corporation | Unifying static and dynamic compiler optimizations in source-code bases |
CN102999723B (zh) * | 2012-11-20 | 2015-11-18 | 焦点科技股份有限公司 | 主动防御xss攻击的数据防御组件生成方法及其装置 |
CN103823691B (zh) * | 2013-12-18 | 2017-10-24 | 浙江工商大学 | 基于网络编码的无线传感器网络安全在线重编程方法 |
CN103729579B (zh) * | 2014-01-02 | 2016-11-16 | 北京深思数盾科技股份有限公司 | 函数级的软件保护方法 |
CN107133502B (zh) * | 2017-04-14 | 2019-10-15 | 北京梆梆安全科技有限公司 | 一种应用程序的处理方法及装置 |
US10204219B2 (en) * | 2017-06-05 | 2019-02-12 | Karamba Security | In-memory protection for controller security |
US10303449B2 (en) * | 2017-07-31 | 2019-05-28 | Oracle International Corporation | Compiling non-native constants |
CN107992307B (zh) * | 2017-12-11 | 2021-04-13 | 北京奇虎科技有限公司 | 一种函数编译方法及装置 |
CN108399318B (zh) * | 2018-01-31 | 2020-09-08 | 北京顶象技术有限公司 | 可执行文件的生成方法、执行方法及电子设备 |
CN108460254B (zh) * | 2018-03-13 | 2020-05-22 | 北京顶象技术有限公司 | 固件保护方法及装置 |
CN110147672A (zh) * | 2019-03-28 | 2019-08-20 | 江苏通付盾信息安全技术有限公司 | 一种基于iOS应用的安全检测方法、装置及系统 |
-
2020
- 2020-06-29 CN CN202010602147.3A patent/CN111752570B/zh active Active
Non-Patent Citations (2)
Title |
---|
Web系统安全性能评测机制的研发;曹顺超;《中国优秀硕士学位论文全文数据库 (信息科技辑)》;20131115;I139-161 * |
基于Clang编译前端的Android源代码静态分析技术;曹原野;《计算机系统应用》;20171231;1-5 * |
Also Published As
Publication number | Publication date |
---|---|
CN111752570A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9135443B2 (en) | Identifying malicious threads | |
US20170372068A1 (en) | Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
US10986103B2 (en) | Signal tokens indicative of malware | |
US20180211041A1 (en) | Detection of Malware Using Feature Hashing | |
US9798981B2 (en) | Determining malware based on signal tokens | |
US8438640B1 (en) | Method and apparatus for reverse patching of application programming interface calls in a sandbox environment | |
US20160110543A1 (en) | Apparatus and method for detecting malicious application based on visualization similarity | |
CN103281325A (zh) | 基于云安全的文件处理方法及装置 | |
CN111737692B (zh) | 应用程序的风险检测方法及装置、设备、存储介质 | |
US20180285565A1 (en) | Malware detection in applications based on presence of computer generated strings | |
CN113391874A (zh) | 一种虚拟机检测对抗方法、装置、电子设备及存储介质 | |
WO2017147441A1 (en) | Sub-execution environment controller | |
US10275596B1 (en) | Activating malicious actions within electronic documents | |
CN111752570B (zh) | 一种编译方法、装置、终端及计算机可读存储介质 | |
US20210165904A1 (en) | Data loss prevention | |
CN115688108B (zh) | 一种webshell静态检测方法及系统 | |
Andronio | Heldroid: Fast and efficient linguistic-based ransomware detection | |
CN114626061A (zh) | 网页木马检测的方法、装置、电子设备及介质 | |
CN114880667A (zh) | 一种脚本检测方法及装置 | |
US10789067B2 (en) | System and method for identifying open source usage | |
CN115495737A (zh) | 恶意程序失效方法、装置、设备及存储介质 | |
KR20180023510A (ko) | 어플리케이션에 대한 역공학 차단 방법 및 장치 | |
US8863159B2 (en) | System, method and computer program product for inserting an emulation layer in association with a COM server DLL | |
US20240211596A1 (en) | Malicious vba detection using graph representation | |
US20240086187A1 (en) | Source Code Programming Language Prediction for a Text File |
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 |