CN111488573A - 链接库检测方法、装置、电子设备和计算机可读存储介质 - Google Patents

链接库检测方法、装置、电子设备和计算机可读存储介质 Download PDF

Info

Publication number
CN111488573A
CN111488573A CN202010218854.2A CN202010218854A CN111488573A CN 111488573 A CN111488573 A CN 111488573A CN 202010218854 A CN202010218854 A CN 202010218854A CN 111488573 A CN111488573 A CN 111488573A
Authority
CN
China
Prior art keywords
target
function
link library
binary code
information
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
Application number
CN202010218854.2A
Other languages
English (en)
Inventor
陈灵锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010218854.2A priority Critical patent/CN111488573A/zh
Publication of CN111488573A publication Critical patent/CN111488573A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本公开提供一种链接库检测方法、装置以及电子设备和计算机可读存储介质,该方法包括:获取目标二进制代码中的目标特征信息;将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;根据所述目标函数确定所述目标链接库的版本信息。本公开实施例提供的技术方案可以准确的确定目标二进制代码调用的链接库以及该链接库的版本信息。

Description

链接库检测方法、装置、电子设备和计算机可读存储介质
技术领域
本公开涉及计算机与互联网技术领域,尤其涉及一种链接库检测方法、装置、电子设备和计算机可读存储介质。
背景技术
目前大多数的软件应用,无论是移动应用还是桌面应用,为了降低开发成本、提高开发效率,或多或少都使用了开源代码(一种可以链接至软件中的代码,可以称之为链接库)用于接口或功能的开发。
开源代码大多经过封装后,为用户提供相应的接口、属性和方法,用户能够使用组件却无法看到源代码。目前来说,使用开源代码的研发者通常都将重心放在了组件的功能上,很少会有人对其进行深入研究,关心其是否存在安全问题。然而,根据CVE(CommonVulnerabilities and Exposures,通用漏洞披露)统计,开源代码时常被曝光存在安全漏洞,进而导致使用该组件的软件产品存在潜在安全隐患。
一般来说,使用开源代码确实可以提高研发者的工作效率,同时达到知识共享与发展的目的。但是,由于一些软件研发者没有向客户透漏开源代码的调用情况,这将会导致客户对自身项目的开源代码使用情况会产生误判,进而对自身项目中存在的漏洞情况产生误判。
目前,对于软件中开源代码来源的检测,大多数是基于源代码进行检测,但是开源代码通常以二进制代码的形式存在。因此,如何从海量二进制代码中高效的检测出各个二进制代码中调用的开源代码对于漏洞检测来说至关重要。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开实施例提供一种链接库检测方法及装置、电子设备和计算机可读存储介质,能够高效、准确地确定目标二进制代码中调用的目标链接库及其版本信息。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
本公开实施例提出一种链接库检测方法,该方法包括:获取目标二进制代码中的目标特征信息;将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;根据所述目标函数确定所述目标链接库的版本信息。
本公开实施例提供一种链接库检测装置,包括:目标特征获取模块、信息匹配模块、引用关系确定模块以及目标函数确定模块以及版本信息确定模块。
其中,所述目标特征获取模块配置为获取目标二进制代码中的目标特征信息。所述信息匹配模块配置为将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库。所述引用关系确定模块配置为通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系。所述目标函数确定模块配置为根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数。所述版本信息确定模块,配置为根据所述目标函数确定所述目标链接库的版本信息。
在一些实施例中,所述目标链接库包括第一函数,所述第一函数包括版本信息和第一符号特征。
在一些实施例中,所述目标函数确定模块可以包括:第二符号特征确定子模块、第二函数确定子模块以及函数名确定子模块。
其中,所述第二符号特征确定子模块配置为在所述目标二进制代码中确定与所述第一符号特征匹配的第二符号特征。所述第二函数确定子模块配置为根据所述数据和函数的引用关系确定调用所述第二符号特征的第二函数。所述函数名确定子模块配置为若所述第二函数与所述第一函数具有相同的函数名,则所述第二函数就是所述目标函数。
在一些实施例中,所述版本信息确定模块可以包括:输出信息确定子模块。其中,所述输出信息确定子模块配置为根据所述版本信息在所述第一函数中的位置对所述目标函数进行信息提取,以获取所述目标链接库的版本信息。
在一些实施例中,所述目标链接库包括第三函数,所述第三函数调用返回版本信息的返回函数。
在一些实施例中,所述版本信息提取模块还包括:第四函数确定子模块、调用确定子模块以及目标函数确定子模块。
其中,所述第四函数确定子模块配置为在所述目标二进制代码中确定与所述第三函数的函数名相同的第四函数。所述调用确定子模块可以配置为根据所述数据和函数的引用关系确定所述第四函数是否调用返回函数。所述目标函数确定子模块配置为所述第四函数调用返回函数,则所述第四函数为所述目标函数。
在一些实施例中,所述引用关系确定模块可以包括:中间表示子模块、控制流图确定子模块以及引用关系获取子模块。
其中,所述中间表示子模块配置为对所述目标二进制代码进行翻译,获得目标二进制代码的中间表示。所述控制流图确定子模块配置为根据所述目标二进制代码的中间表示获得函数调用图和控制流图。所述引用关系获取子模块配置为根据所述函数调用图和所述控制流图确定数据和函数的引用关系。
在一些实施例中,所述目标特征信息包括常量特征信息。
在一些实施例中,所述信息匹配模块可以包括:有效特征确定子模块、目标链接库确定子模块以及内存特征处理子模块。
其中,所诉有效特征确定子模块配置为将所述常量特征信息与所述链接库的常量特征库做匹配以确定有效特征。所述目标链接库确定子模块配置为根据所述有效特征在所述常量特征库中的比例确定所述目标链接库和候选链接库。所述内存特征处理子模块,配置为根据所述候选链接库的内存特征确定所述目标二进制代码调用的目标链接库
在一些实施例中,所述目标链接库确定子模块可以包括:目标链接库确定单元和候选链接库确定单元。
其中,所述目标链接库确定单元配置为若所述比例大于第一阈值,则所述常量特征库对应的链接库为所述目标链接库。所述候选链接库确定单元配置为若所述比例小于或等于所述第一阈值且大于第二阈值,则所述常量特征库对应的链接库为候选链接库。
在一些实施例中,所述常量特征信息包括第五函数名。
在一些实施例中,所述信息匹配模块还可以包括:第六函数名获取子模块、目标运行函数确定子模块、内存特征获取子模块以及内存特征匹配子模块。
其中,所述第六函数名获取子模块配置为获取所述候选链接库中的第六函数,运行所述第六函数生成所述候选链接库的内存特征。所述目标运行函数确定子模块配置为根据所述第五函数名在所述目标二进制代码中确定与所述第六函数匹配的目标运行函数;所述内存特征获取子模块配置为运行所述目标运行函数,获得目标内存特征。所述内存特征匹配子模块配置为将所述目标内存特征与所述候选链接库的内存特征做匹配,若匹配成功,则所述候选链接库为所述目标链接库。
在一些实施例中,所述链接库确定装置还可以包括:第一前缀信息获取模块、第二前缀信息确定模块以及后缀信息确定模块。
其中,所述第一前缀信息获取模块配置为获取所述目标链接库中版本信息的第一前缀信息。所述第二前缀信息确定模块配置为在所述目标二进制中确定与所述第一前缀信息匹配的第二前缀信息。所述后缀信息确定模块配置为根据所述第二前缀信息确定所述目标二进制代码调用的目标链接库的版本信息。
在一些实施例中,所述后缀信息确定模块可以包括:后缀信息获取子模块、命名规则获取子模块以及命名规则匹配子模块。
其中,所述后缀信息获取子模块配置为获取所述第二前缀信息的后缀信息。所述明明规则获取子模块配置为根据所述目标链接库的版本信息确定版本名称命名规则。所述命名规则匹配子模块配置为若所述后缀信息满足所述命名规则,则所述后缀信息为所述目标链接库的版本信息。
在一些实施例中,所述链接库检测装置还可以包括:正则匹配规则获取模块和字符串匹配子模块。
其中,所述政治匹配规则获取模块配置为获取所述目标链接库中版本信息所在字符串的正则匹配规则。所述字符串匹配子模块配置为根据所述正则匹配规则在所述目标二进制代码中确定目标字符串,并从所述目标字符串中提取目标链接库的版本信息。
本公开实施例提出一种电子设备,该电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项所述的链接库检测方法。
本公开实施例提出一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述任一项所述的链接库检测方法。
本公开某些实施例提供的链接库检测方法、装置及电子设备和计算机可读存储介质,一方面,通过将目标二进制代码的目标特征信息与链接库的特征信息做匹配,准确高效地确定了目标二进制代码调用的目标链接库;另一方面,通过对目标二进制代码的静态分析获得了目标二进制代码中数据以及函数的引用关系,并根据目标链接库对数据以及函数的引用关系进行分析,以从目标二进制代码中准确的获取目标链接库的版本信息。本公开提供的方案,能有效地确定目标二进制代码中调用的目标链接库以及目标链接库的版本信息。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。下面描述的附图仅仅是本公开的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了应用于本公开实施例的链接库检测方法或链接库检测装置的示例性系统架构的示意图。
图2是根据一示例性实施例示出的一种应用于链接库检测装置的计算机系统的结构示意图。
图3是根据一示例性实施例示出的一种链接库检测方法的流程图。
图4是图3中步骤S2在一示例性实施例中的流程图。
图5是图4中步骤S22在一示例性实施例中的流程图。
图6是图3中步骤S2在一示例性实施例中的流程图。
图7是图3中步骤S3在一示例性实施例中的流程图。
图8是图3中步骤S4在一示例性实施例中的流程图。
图9是图3中步骤S4在一示例性实施例中的流程图。
图10是根据示例性实施例示出的链接库检测方法的流程图。
图11是图10中步骤S7在一示例性实施例中的流程图。
图12是根据示例性实施例示出的链接库检测方法的流程图。
图13是根据一示例性实施例示出的一种链接库检测系统的示意图。
图14是根据一示例性实施例示出的一种链接库检测装置的框图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
本公开所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和步骤,也不是必须按所描述的顺序执行。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
本说明书中,用语“一个”、“一”、“该”、“所述”和“至少一个”用以表示存在一个或多个要素/组成部分/等;用语“包含”、“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”、“第二”和“第三”等仅作为标记使用,不是对其对象的数量限制。
下面结合附图对本公开示例实施方式进行详细说明。
图1示出了可以应用于本公开实施例的链接库检测方法或链接库检测装置的示例性系统架构的示意图。
如图1所示,系统架构100可以包括设备101、102、103,网络104和服务器105。网络104用以在设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。其中,设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机、台式计算机、可穿戴设备、虚拟现实设备、智能家居等等。
服务器105可以是提供各种服务的服务器,例如对用户利用设备101、102、103所进行操作的装置提供支持的后台管理服务器。后台管理服务器可以对接收到的请求等数据进行分析等处理,并将处理结果反馈给设备。
服务器105可例如获取目标二进制代码中的目标特征信息;服务器105可例如将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;服务器105可例如通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;服务器105可例如根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;服务器105可例如根据所述目标函数确定所述目标链接库的版本信息。
应该理解,图1中的设备、网络和服务器的数目仅仅是示意性的,服务器105可以是一个实体的服务器,还可以为多个服务器组成,根据实际需要,可以具有任意数目的设备、网络和服务器。
在一些实施例中,本公开实施例还可以由单个具有计算功能的电子设备完成,该电子设备不仅可以获取目标二进制代码,还可以根据目标二进制代码完成本公开实施例提供的技术方案。该电子设备可例如是:智能手机、平板电脑、膝上型便携计算机、台式计算机、可穿戴设备、虚拟现实设备、智能家居等,但本公开对此不作限制。
另外,本公开实施例还可以通过云计算完成,例如可以通过云计算向用户提供本公开实施例提供目标链接库匹配服务,但是本公开的对此不做限制。
下面参考图2,其示出了适于用来实现本申请实施例的设备的计算机系统200的结构示意图。图2示出的设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图2所示,计算机系统200包括中央处理单元(CPU)201,其可以根据存储在只读存储器(ROM)202中的程序或者从储存部分208加载到随机访问存储器(RAM)203中的程序而执行各种适当的动作和处理。在RAM 203中,还存储有系统200操作所需的各种程序和数据。CPU 201、ROM 202以及RAM 203通过总线204彼此相连。输入/输出(I/O)接口205也连接至总线204。
以下部件连接至I/O接口205:包括键盘、鼠标等的输入部分206;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分207;包括硬盘等的储存部分208;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分209。通信部分209经由诸如因特网的网络执行通信处理。驱动器210也根据需要连接至I/O接口205。可拆卸介质211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器210上,以便于从其上读出的计算机程序根据需要被安装入储存部分208。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分209从网络上被下载和安装,和/或从可拆卸介质211被安装。在该计算机程序被中央处理单元(CPU)201执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本申请所示的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块和/或子模块和/或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块和/或子模块和/或单元也可以设置在处理器中,例如,可以描述为:一种处理器包括发送单元、获取单元、确定单元和第一处理单元。其中,这些模块和/或子模块和/或单元的名称在某种情况下并不构成对该模块和/或子模块和/或单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备可实现功能包括:获取目标二进制代码中的目标特征信息;将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;根据所述目标函数确定所述目标链接库的版本信息。
需要理解的是,在本公开附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。为了方便理解,下面对本公开实施例中涉及的名词进行解释。
静态分析技术:一种在不运行程序代码的情况下,可以通过词法分析、语法分析、控制流分析、数据流分析等技术对二进制代码进行扫描,以验证二进制代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
函数调用图:可以用来表示程序代码中各个函数之间的调用关系。
控制流图(Control Flow Graph,CFG):静态分析产生的一种有向图,该图中的节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环。
基本代码块:是指程序顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句
数据流分析技术:通过对控制流图进行遍历,对代码在不同路径上的执行过程中,数据的赋值和存储、内存的读和写过程进行分析。
数据流图:数据流分析产生的结果,记录了代码在不同路径上的执行过程中,数据的赋值和存储、内存的读和写过程。
中间表示(Intermediate Representation,IR):一般来说,通常将编译器分为前端和后端。其中,前端会对所输入的程序进行词法分析、语法分析、语义分析,然后生成中间表达形式,也就是IR,后端会对IR进行优化,然后生成目标代码。
静态单赋值中间表示(Static Single Assignment IntermediateRepresentation,SSA IR):IR的某一种特殊形式,在静态单赋值中间表示中每一个变量仅被定义一次。
通用漏洞披露,又称常见弱点与漏洞,是一个与资讯安全有关的数据库,收集各种资安弱点及漏洞并给予编号以便于公众查阅。
可执行与可链接格式(Executable and Linkable Format,ELF),常被称为ELF格式,在计算机科学中,是一种用于可执行文件、目标文件、共享库和核心转储的标准文件格式。
可移植性可执行文件(Portable Executable,PE)是一种用于可执行文件、目标文件和动态链接库的文件格式。
图3是根据一示例性实施例示出的一种链接库检测方法的流程图。本公开实施例所提供的方法可以由任意具备计算处理能力的电子设备处理也可以由云计算处理,但本公开并不限定于此。
参照图3,本公开实施例提供的链接库检测方法可以包括以下步骤。
在步骤S1中,获取目标二进制代码中的目标特征信息。
在一些实施例中,可以通过编译器对目标源代码进行编译以获得目标二进制代码,该目标二进制代码可以存储在PE文件、ELF或其他格式文件中,本公开对此不作限制。
在一些实施例中,可以将目标二进制代码中编译前后不变的量作为目标特征信息。一般来说,该不变量可以是目标二进制代码中的字符串常量、数字常量等具有区别信息的特征,但本公开对此不作限制。
在一些实施例中,若目标二进制代码存储于PE文件或ELE文件中,可以从PE文件或ELE文件的头文件中提取字符串常量、数字常量等作为目标特征信息;若目标二进制代码存储于其他未知格式的二进制文件中,则可以从整个二进制文件中提取字符串常量和数字常量作为目标特征信息。
另外,还可以将运行目标二进制代码后在内存中留下的字符串常量或者数字常量等内存特征作为目标特征信息。
在步骤S2中,将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库。
在软件系统中,一个软件通常会包含一个或多个项目,也称为模块。软件系统中的模块需要调用第三方库(例如开源代码)或自行封装库。该第三方库或自行封装库可以以动态链接或静态链接的方式链接入目标二进制代码中,所以该第三方库或自行封装库可以是本公开实施例中的链接库。
可以理解的是,本公开实施例中的链接库是任意可以链接(包括动态链接和静态链接)至目标二进制代码中的代码,本公开对此不作限制。
在一些实施例中,可以预先为各个链接库分别构建各自的特征信息库,该特征信息库可以由二进制代码中的字符串常量、数字常量构成,也可以由运行二进制代码后在内存中留下的字符串常量、数字常量构成,本公开对此不作限制。
在一些实施例中,一个链接库可以包括该链接库对应的各个版本。例如,链接库a可以包括版本1链接库a、版本2链接库a以及版本3链接库a。因此,链接库的特征信息库可以包括各个版本的特征信息。
在一些实施例中,可以将目标二进制代码的目标特征信息与链接库的特征信息做匹配,将匹配成功(例如两个完全相等的特征可以认为是匹配成功)的特征作为有效特征。
在一些实施例中,当有效特征在链接库的特征信息库的比例超过第一阈值(例如60%)时,就可以认为目标二进制代码调用了该链接库。
另外,还可以运行目标二进制代码以获得目标二进制代码的内存特征,然后将目标二进制代码的内存特征与链接库的内存特征做匹配,若匹配成功(例如,存在相同的内存特征),则可以认为该链接库就是目标链接库。
在步骤S3中,通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系。
在一些实施例中,数据和函数的引用关系可以包括函数调用数据、函数调用函数的引用关系,本公开对此不作限制。
在一些实施例中,可以通过目标二进制引擎对目标二进制代码进行静态程序分析,以获得目标二进制代码的控制依赖图、函数调用图以及控制流图。其中,目标二进制引擎可以是IDA Pro(Interactive Disassembler Professional,交互式反汇编器专业版)、Binary Ninja(逆向平台)等,本公开对此不作限制。
通过对上述控制依赖图、函数调用图以及控制流图等的分析,可以获得目标二进制代码中数据与函数、函数与函数之间的引用关系。
一般来说,对目标二进制代码进行静态分析,可以将目标二进制代码翻译成一种中间表示,并获得中间表示下的分析结果(例如控制依赖图、函数调用图或者控制流图),该中间表示可以是SSA IR;当然也可以将目标二进制代码反汇编成汇编语言,以获得汇编语言下的分析结果(例如控制依赖图、函数调用图以及控制流图)。可以理解的是,通过其他语言下实现本公开提供的方法也在本公开的保护范围内,本公开对此不作限制。
为了便于静态分析,通常会将目标二进制代码翻译为中间表示(例如,静态单赋值中间表示),并对翻译获得的中间表示进行程序优化,例如常量折叠(constant folding)、常量传播(constant propagation)、强度削减(strength reduction)以及死代码删除(dead code elimination)等,本公开对此不作限制。
在本公开中,将以静态分析中把目标二进制代码翻译成SSA IR为例对实施例进行解释,但本公开并不限于此。
在步骤S4中,根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数。
在一些实施例中,当目标二进制代码调用的目标链接库确定之后还需要确定目标二进制代码调用的目标链接库的版本信息。
在一些实施例,在目标链接库中版本名称可能通过第一函数输出或者返回,该第一函数中可能会包括一些有区别特征的特征信息(例如第一符号特征信息)。
例如,目标链接库中的版本信息“7.60”可能通过如第一函数printf_chk(1LL,aSSSUageNmapSc,”Nmap”,“7.60”)输出,该第一函数printf_chk中包括第一符号特征信息“aSSSUageNmapSc”。
由于第一符号特征“aSSSUageNmapSc”在目标链接库被调用时不会发生改变,所以可以通过在目标二进制代码中定位与第一符号特征相等的第二符号特征以确定目标二进制代码中包括目标链接库版本信息的函数,以进一步的确定目标链接库的版本信息。
在步骤S5中,根据所述目标函数确定所述目标链接库的版本信息。
在一些实施例中,若第一函数是如printf_chk所示的输出函数,那么可以根据版本信息在第一函数中的位置在第二函数中提取中版本信息。例如,版本信息“7.60”在上述第一函数printf_chk中的第4个位置出输出,那么就可以提取第二函数中第四个位置出的信息作为目标链接库的版本信息。
本实施例提供的技术方案,通过将目标二进制代码与链接库的特征信息做匹配,确定了目标二进制代码调用的目标链接库,并通过静态分析技术从目标二进制代码中提取出目标链接库的版本信息。该方法,一方面通过不变特征量将链接库与目标二进制代码做匹配,以准确的确定了目标二进制代码调用的目标链接库;另一方面,通过静态分析技术从目标二进制代码中准确、高效地提取出目标链接库的版本信息。
图4是图3中步骤S2在一示例性实施例中的流程图。
在一些实施例中,目标二进制代码的目标特征信息可以由目标二进制代码的常量特征信息(可以是目标二进制代码中的字符串常量和数字常量)组成。
参考图4,上述步骤S2可以包括以下步骤。
在步骤S21中,将所述常量特征信息与所述链接库的常量特征库做匹配以确定有效特征。
在一些实施例中,可以将目标二进制代码的常量特征信息与链接库的常量特征库做匹配,若目标二进制代码中的常量特征信息与常量特征库的特征信息相同(或者存在包含与被包含的关系),则可以认为该常量特征信息为有效特征信息。
在步骤S22中,根据所述有效特征在所述常量特征库中的比例确定所述目标链接库和候选链接库。
在一些实施例中,可以预设第一阈值(例如60%)和第二阈值(例如50%),若有效特征在常量特征库中的比例大于该第一阈值,则可以认为该常量特征库对应的链接库是目标链接库,若有效特征在常量特征库中的比例大于第二阈值并且小于或等于第一阈值,则可以认为该常量特征库对应的链接库是候选链接库。
在步骤S23中,根据所述候选链接库的内存特征确定所述目标二进制代码调用的目标链接库。
在一些实施例中,候选链接库中可以包括一些运行后会在内存中产生具有区别特征信息的函数。例如,候选链接库可以包括一种会将字符串a和字符串b拼接后输出的函数,那么运行该函数后就会在内存中留下将字符串a和字符串b拼接后形成的字符串,该字符串就可以是一种内存特征。
可以理解的是,如果目标二进制代码调用了候选链接库,那么在运行目标二进制代码中后就会在内存中留下该候选链接库的内存特征信息。
因此,如果在二进制代码运行后留在内存中的内存特征包括候选链接库的内存特征库中的至少一个内存特征,那么就可以认为该候选链接库是目标二进制代码调用的目标链接库。
本实施例提供的技术方案,通过将将目标特征信息与链接库的特征信息库做匹配,确定了有效特征,并根据有效特征确定链路目标链接库。该方法,根据有效特征讲配率较高的目标链接库和匹配率相对偏低的候选链接库加以区分,并根据候选链接库的内存特征在候选链接库中进行精准判断以确定目标链接库。提高了海量链接库的检测效率,实现了快速检测目标二进制代码中使用的链接库。
图5是图4中步骤S22在一示例性实施例中的流程图。
参考图5,上述步骤S22可以包括以下步骤。
在步骤S221中,若所述比例大于第一阈值,则所述常量特征库对应的链接库为所述目标链接库。
在一些实施例中,如果目标特征信息与链接库的特征信息库比对后的有效特征与链接库的特征信息库极为接近,就可以认为目标二进制代码调用了该链接库。
在步骤S222中,若所述比例小于或等于所述第一阈值且大于第二阈值,则所述常量特征库对应的链接库为候选链接库。
在一些实施例,由于链接库可能会包括不同版本,每个版本又可能会包括不同的常量特征信息,有的版本的常量特征信息可能会比较多,有的版本的常量特征信息可能比较少。因此,如果仅仅依靠有效特征在特征信息库中的比例确定目标链接库,可能会由于被调用版本中的常量特征信息较少,导致目标二进制代码调用的目标链接库的漏报。
因此,本实施例为目标链接库的确定提供了一定的缓冲。即,如果有效特征在常量特征库中的比例小于或等于所述第一阈值且大于第二阈值,则认为该链接库是候选链接库,并可以根据候选链接库的内存特征库对候选链接库进行进一步的判断,以决定该候选链接库是否为目标链接库。
本公开实施例提供的技术方案,不仅根据第一阈值准确高效的确定了特征信息匹配率极高的目标链接库,还考虑将那些由于链接库中特征信息较少导致匹配率相对较低的链接库作为候选链接库,并对候选链接库进行进一步的分析,以从候选链接库中确定目标链接库。
图6是图3中步骤S2在一示例性实施例中的流程图。
在一些实施例中,目标二进制代码的常量特征信息可以包括各个函数的函数名(可以称之为第五函数名)。
参考图6,上述步骤S3还可以包括以下步骤。
在步骤S24中,获取所述候选链接库中的第六函数,运行所述第六函数生成所述候选链接库的内存特征。
在一些实施例中,候选链接库中可以包括一些运行后会在内存中产生具有区别特征信息的函数(可以认为该区别特征信息是唯一可识别的)。可以把这些运行后会在内存产生具有区别特征信息的函数称之为第六函数。
在一些实施例中,可以预先运行该第六函数以生成候选链接库的内存特征。
在步骤S25中,根据所述第五函数名在所述目标二进制代码中确定与所述第六函数名匹配的目标运行函数。
在一些实施例中,可以根据第六函数的函数名在目标二进制代码中确定目标函数,例如可以在目标二进制代码中确定与第六函数名相同的第五函数为目标运行函数。
在步骤S26中,运行所述运行目标函数,获得目标内存特征。
在一些实施例中,可以在模拟环境中运行目标二进制代码,并将运行后在内存中产生的字符串常量和数字常量作为目标内存特征。
在步骤S27中,将所述目标内存特征与所述候选链接库的内存特征做匹配,若匹配成功,则所述候选链接库为所述目标链接库。
可以理解的是,如果运行第五函数时产生的内存特征与运行第六函数产生的内存特征相同,那么就可以认为目标二进制代码中的第五函数为候选链接库中的函数,进一步的可以认为候选链接库被目标二进制代码调用。
本实施例提供的技术方案,首先通过目标二进制代码中的特征信息获得了特征匹配率极高的目标链接库以及匹配率在目标匹配范围内的候选链接库,并通过运行目标二进制代码后获得的内存特征信息在候选链接库中确定了目标链接库,有效的避免了漏报、错报的情况。
图7是图3中步骤S3在一示例性实施例中的流程图。
参考图7,上述步骤S3可以包括以下步骤。
在步骤S31中,对所述目标二进制代码进行翻译,获得目标二进制代码的中间表示。
一般来说,对目标二进制代码进行静态分析,可以将目标二进制代码翻译成一种中间表示,并获得中间表示下的分析结果(例如控制依赖图、函数调用图或者控制流图),该中间表示可以是SSA IR;当然也可以将目标二进制代码反汇编成汇编语言,以获得汇编语言下的分析结果(例如控制依赖图、函数调用图以及控制流图)。可以理解的是,通过其他语言下实现本本公开提供的漏洞检测方法也在本公开的保护范围内,本公开对此不作限制。
为了便于静态分析,通常会将目标二进制代码翻译为中间表示(例如,静态单赋值中间表示),并对翻译获得的中间表示进行程序优化,例如常量折叠、常量传播、强度削减以及死代码删除等,本公开对此不作限制。
在步骤S32中,根据所述目标二进制代码的中间表示获得函数调用图和控制流图。
在步骤S33中,根据所述函数调用图和所述控制流图确定数据和函数的引用关系。
本实施例提供的技术方案,通过中间表示对目标二进制代码进行分析,极大的提高了静态分析的准确率和效率。
图8是图3中步骤S4在一示例性实施例中的流程图。
在一些实施例中,目标链接库的版本名称可能存在于第一函数中(例如输出函数printf),但是由于目标二进制代码中可能包括多个printf函数,所以如果仅仅根据第一函数的名称在目标二进制代码中确定包括版本信息的函数,是无法准确获得版本信息的。
因此,可以根据第一函数中的一个唯一不变量在目标二进制代码中确定包括版本信息的第二函数,其中该唯一不变量可以是第一函数中的第一符号特征。
参考图8,上述步骤S4可以包括以下步骤。
在步骤S41中,在所述目标二进制代码中确定与所述第一符号特征匹配的第二符号特征。
例如,目标链接库中的版本信息“7.60”可能通过如第一函数printf_chk(1LL,aSSSUageNmapSc,”Nmap”,“7.60”)所示形式输出,可以在目标二进制代码中确定字符串“aSSSUageNmapSc”作为第二符号特征。
在步骤S42中,根据所述数据和函数的引用关系确定调用所述第二符号特征的第二函数。
由于在目标链接库中第一符号特征与版本名称可以存在于同一个函数中,所以理论上来讲由于第一符号特征是唯一的,所以如果确定了调用第二符号特征的函数,那么就可以认为该函数中包括版本信息。
在步骤S43中,若所述第二函数与所述第一函数具有相同的函数名,则所述第二函数就是所述目标函数。
但是,由于调用第二符号特征的函数也有可能有多个,所以需要对调用第二符号特征的第二函数进行进一步的确认,即确认第二函数与第一函数是否具有相同的函数名,如果第二函数与第一函数具有相同的函数名,则可以认为该第二函数就是目标二进制代码中包括目标链接库版本信息的函数。
在一些实施例中,当目标二进制代码中包括目标链接库版本信息的函数被确定之后,则可以根据版本信息在所述第一函数中的位置对所述目标函数进行信息提取,以获取所述目标二进制代码调用的目标链接库的版本信息。
在上述实例中,由于版本信息“7.60”在第一函数printf_chk中的第4个位置出输出,那么就可以提取第二函数中第四个位置出的信息作为目标链接库的版本信息。
本实施例提供的技术方案,通过第一符号特征与调用第一符号特征的第一函数之间调用关系在目标二进制代码中准确的确定了包括版本信息的目标函数,以便根据该目标函数可以准确的确定目标链接库的版本信息。
图9是图3中步骤S4在一示例性实施例中的流程图。
在一些实施例中,目标链接库包括第三函数,所述第三函数调用返回版本信息的返回函数
参考图9,上述步骤S4可以包括以下步骤。
在步骤S44中,在所述目标二进制代码中确定与所述第三函数的函数名相同的第四函数。
在一些实施例中,目标链接库可以通过第三函数返回版本信息,该第三函数可例如为:
int magic_version{
return 2010;%返回2010
}。
一般来说,在目标链接库中,如果通过第三函数(例如上述magic_version)返回版本信息,该第三函数在版本更新过程中一般不会发生改变。因此,可以通过函数名匹配,在目标二进制代码中确定与第三函数的函数名相等的第四函数。
在步骤S45中,根据所述数据和函数的引用关系确定所述第四函数是否调用返回函数。
在步骤S46中,若所述第四函数调用返回函数,则所述第四函数为所述目标函数。
在一些实施例中,若确定第四函数为目标函数,则可以获取第四函数的返回值为目标二进制代码调用的目标链接库的版本信息。
本实施例提供的技术方案,可以根据调用返回函数的第三函数的函数名直接在目标二进制代码中确定函数名相同的第四函数,并根据第四函数的返回值获取目标链接库的版本信息,该方法直接、便捷。
图10是根据示例性实施例示出的链接库检测方法的流程图。
在一些实施例中,版本名称也有可能以字符串的形式存在于目标链接库中中。例如,可能以“libpng version 1.2XX”形式存在于链接库中,其中“1.2XX”可以是目标链接库的版本名称,“libpng version”可以是该版本名称的前缀信息。当目标链接库以动态或静态形式链接至目标二进制代码时,该版本名称将会以字符串的形式存在于目标二进制代码中。
参考图10,上述链接库检测方法可以包括以下步骤。
在步骤S6中,获取所述目标链接库中版本信息的第一前缀信息。
在一些实施例中,可以通过目标链接库中的版本名称的前缀信息(不同版本信息的前缀信息可以一致)在目标二进制代码提取出目标链接库的版本信息。例如,在目标链接库中版本信息可能以“libpng version 1.2XX”,其中“1.2XX”可能是目标链接库的版本信息,“libpng version”可以是该版本信息的前缀信息。
在步骤S7中,在所述目标二进制中确定与所述第一前缀信息匹配的第二前缀信息。
在一些实施例中,可以通过第一前缀信息(例如“libpng version”)在目标二进制代码中确定与第一前缀信息相等的第二前缀信息。
在步骤S8中,根据所述第二前缀信息确定所述目标二进制代码调用的目标链接库的版本信息。
在一些实施例中,当第二前缀信息确定后,可以进一步的获取第二前缀信息所在的字符串,并提取该字符串后面的后缀信息作为目标二进制代码调用的目标链接库的版本信息。
图11是图10中步骤S7在一示例性实施例中的流程图。
在步骤S81中,获取所述第二前缀信息的后缀信息。
在步骤S82中,根据所述目标链接库的版本信息确定版本名称命名规则。
在一些实施例中,为了进一步的确定第二前缀信息对应的后缀信息是目标链接库的版本信息,可以进一步的获取目标链接库的版本信息的命名规则,并进一步判断后缀信息是否满足该命名规则。
在步骤S83中,若所述后缀信息满足所述命名规则,则所述后缀信息为所述目标链接库的版本信息。
例如,目标链接库中版本名称可能为“libpng version X.X.XXXX”,根据第一前缀信息“libpng version”可以在目标二进制代码中确定包括第二前缀信息“libpng version1.2.2010”,获取该第二前缀信息的后缀信息“1.2.2010”。经比对发现,“1.2.2010”的命名规则与“X.X.XXXX”一致,所以可以认为“1.2.2010”就是目标链接库的版本信息。
图12是根据示例性实施例示出的链接库检测方法的流程图。
在一些实施例中,还可以根据正则匹配的方式在目标二进制代码中确定目标链接库的版本信息。
参考图12,上述链接库检测方法可以包括以下步骤。
在步骤S9中,获取所述目标链接库中版本信息所在字符串的正则匹配规则。
在步骤S10中,根据所述正则匹配规则在所述目标二进制代码中确定目标字符串,并从所述目标字符串中提取目标链接库的版本信息。
例如,版本字符串可以类似”GNU Awk 3.2.1”,那么与“GNU Awk(\\d+\\.\\d+\\.\\d+)”进行正则匹配就能获取到”3.2.1”这个字符串,该字符串就可以是版本信息。
图13是根据一示例性实施例示出的一种链接库检测系统的示意图。
参考图13,上述链接库检测系统可以包括:二进制代码分析器131、目标特征信息匹配器132以及版本信息获取器133,其中二进制代码分析器131可以包括文件格式解析器、特征提取解析器以及静态分析解析器。
在一些实施例中,链接库检测系统对目标二进制代码进行连接库检测可以包括以下过程。
二进制代码分析器131接收目标二进制文件后文件格式解析器对目标二进制文件进行解析以从目标二进制文件中提取目标二进制代码,特征提取解析器从目标二进制代码中提取目标特征信息(包括但不限于目标常量特征和目标内存特征);静态分析解析器对目标二进制代码进行静态分析以获取目标二进制代码中数据和函数的引用关系;目标特征信息匹配器132通过目标二进制代码的常量特征信息与链接库的常量特征信息进行比对以确定目标链接库和候选链接库;目标特征信息匹配器132将目标二进制代码的目标内存特征信息与候选链接库的内存特征进行匹配以在候选链接库确定目标链接库;版本信息获取器133通过对目标二进制代码的静态分析结果进行分析,以从目标二进制代码中获取目标链接库的版本信息。
本实施例提供的技术方案,通过将目标二进制代码与链接库的特征信息做匹配,确定了目标二进制代码调用的目标链接库,并通过静态分析技术从目标二进制代码中提取出目标链接库的版本信息。该系统,一方面通过不变特征量将链接库与目标二进制代码做匹配,以准确的确定了目标二进制代码调用的目标链接库;另一方面,通过静态分析技术从目标二进制代码中准确、高效地提取出目标链接库的版本信息。
图14是根据一示例性实施例示出的一种链接库检测装置的框图。参照图14,本公开实施例提供的链接库检测装置1400可以包括:目标特征获取模块1401、信息匹配模块1402、引用关系确定模块1403、目标函数确定模块1404以及版本信息确定模块1405。
其中,所述目标特征获取模块1401可以配置为获取目标二进制代码中的目标特征信息。所述信息匹配模块1402可以配置为将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库。所述引用关系确定模块1403可以配置为通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系。所述目标函数确定模块1404可以配置为根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数。所述版本信息确定模块1405,配置为根据所述目标函数确定所述目标链接库的版本信息。
在一些实施例中,所述目标链接库包括第一函数,所述第一函数包括版本信息和第一符号特征。
在一些实施例中,所述目标函数确定模块1404可以包括:第二符号特征确定子模块、第二函数确定子模块以及函数名确定子模块。
其中,所述第二符号特征确定子模块可以配置为在所述目标二进制代码中确定与所述第一符号特征匹配的第二符号特征。所述第二函数确定子模块可以配置为根据所述数据和函数的引用关系确定调用所述第二符号特征的第二函数。所述函数名确定子模块可以配置为若所述第二函数与所述第一函数具有相同的函数名,则所述第二函数就是所述目标函数。
在一些实施例中,所述版本信息确定模块可以包括:输出信息确定子模块。其中,所述输出信息确定子模块可以配置为根据版本信息在所述第一函数中的位置对所述目标函数进行信息提取,以获取所述目标二进制代码调用的目标链接库的版本信息。
在一些实施例中,所述目标链接库包括第三函数,所述第三函数调用返回版本信息的返回函数。
在一些实施例中,所述版本信息提取模块还包括:第四函数确定子模块、调用确定子模块以及目标函数确定子模块。
其中,所述第四函数确定子模块可以配置为在所述目标二进制代码中确定与所述第三函数的函数名相同的第四函数。所述调用确定子模块可以配置为根据所述数据和函数的引用关系确定所述第四函数是否调用返回函数。所述目标函数确定子模块可以配置为若所述第四函数调用返回函数,则所述第四函数为所述目标函数。
在一些实施例中,所述引用关系确定模块1403可以包括:中间表示子模块、控制流图确定子模块以及引用关系获取子模块。
其中,所述中间表示子模块可以配置为对所述目标二进制代码进行翻译,获得目标二进制代码的中间表示。所述控制流图确定子模块可以配置为根据所述目标二进制代码的中间表示获得函数调用图和控制流图。所述引用关系获取子模块可以配置为根据所述函数调用图和所述控制流图确定数据和函数的引用关系。
在一些实施例中,所述目标特征信息包括常量特征信息。
在一些实施例中,所述信息匹配模块1402可以包括:有效特征确定子模块、目标链接库确定子模块以及内存特征处理子模块。
其中,所诉有效特征确定子模块可以配置为将所述常量特征信息与所述链接库的常量特征库做匹配以确定有效特征。所述目标链接库确定子模块可以配置为根据所述有效特征在所述常量特征库中的比例确定所述目标链接库和候选链接库。所述内存特征处理子模块,可以配置为根据所述候选链接库的内存特征确定所述目标二进制代码调用的目标链接库
在一些实施例中,所述目标链接库确定子模块可以包括:目标链接库确定单元和候选链接库确定单元。
其中,所述目标链接库确定单元可以配置为若所述比例大于第一阈值,则所述常量特征库对应的链接库为所述目标链接库。所述候选链接库确定单元可以配置为若所述比例小于或等于所述第一阈值且大于第二阈值,则所述常量特征库对应的链接库为候选链接库。
在一些实施例中,所述常量特征信息包括第一函数名。
在一些实施例中,所述信息匹配模块1402还可以包括:第六函数名获取子模块、目标运行函数确定子模块、内存特征获取子模块以及内存特征匹配子模块。
其中,所述第六函数名获取子模块可以配置为获取所述候选链接库中的第六函数,运行所述第六函数生成所述候选链接库的内存特征。所述目标运行函数确定子模块可以配置为根据所述第五函数名在所述目标二进制代码中确定与所述第六函数匹配的目标运行函数;所述内存特征获取子模块可以配置为运行所述目标运行函数,获得目标内存特征。所述内存特征匹配子模块可以配置为将所述目标内存特征与所述候选链接库的内存特征做匹配,若匹配成功,则所述候选链接库为所述目标链接库。
在一些实施例中,所述链接库确定装置还可以包括:第一前缀信息获取模块、第二前缀信息确定模块以及后缀信息确定模块。
其中,所述第一前缀信息获取模块可以配置为获取所述目标链接库中版本信息的第一前缀信息。所述第二前缀信息确定模块可以配置为在所述目标二进制中确定与所述第一前缀信息匹配的第二前缀信息。所述后缀信息确定模块可以配置为根据所述第二前缀信息确定所述目标二进制代码调用的目标链接库的版本信息。
在一些实施例中,所述后缀信息确定模块可以包括:后缀信息获取子模块、命名规则获取子模块以及命名规则匹配子模块。
其中,所述后缀信息获取子模块可以配置为获取所述第二前缀信息的后缀信息。所述明明规则获取子模块可以配置为根据所述目标链接库的版本信息确定版本名称命名规则。所述命名规则匹配子模块可以配置为若所述后缀信息满足所述命名规则,则所述后缀信息为所述目标链接库的版本信息。
在一些实施例中,所述链接库检测装置还可以包括:正则匹配规则获取模块和字符串匹配子模块。
其中,所述政治匹配规则获取模块可以配置为获取所述目标链接库中版本信息所在字符串的正则匹配规则。所述字符串匹配子模块可以配置为根据所述正则匹配规则在所述目标二进制代码中确定目标字符串,并从所述目标字符串中提取目标链接库的版本信息。
由于本公开的示例实施例的链接库检测装置1400的各个功能模块与上述链接库检测方法的示例实施例的步骤对应,因此在此不再赘述。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者智能设备等)执行根据本公开实施例的方法,例如图3的一个或多个所示的步骤。
此外,上述附图仅是根据本公开示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其他实施例。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未申请的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不限于这里已经示出的详细结构、附图方式或实现方法,相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。

Claims (14)

1.一种链接库确定方法,其特征在于,包括:
获取目标二进制代码中的目标特征信息;
将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;
通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;
根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;
根据所述目标函数确定所述目标链接库的版本信息。
2.根据权利要求1所述方法,其特征在于,所述目标链接库包括第一函数,所述第一函数包括版本信息和第一符号特征;其中,根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数,包括:
在所述目标二进制代码中确定与所述第一符号特征匹配的第二符号特征;
根据所述数据和函数的引用关系确定调用所述第二符号特征的第二函数;
若所述第二函数与所述第一函数具有相同的函数名,则所述第二函数就是所述目标函数。
3.根据权利要求1或2所述方法,其特征在于,根据所述目标函数确定所述目标链接库的版本信息,包括:
根据版本信息在所述第一函数中的位置对所述目标函数进行信息提取,以获取所述目标二进制代码调用的目标链接库的版本信息。
4.根据权利要求1所述方法,其特征在于,所述目标链接库包括第三函数,所述第三函数调用目标返回函数,所述目标返回函数返回版本信息;其中,根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数,包括:
在所述目标二进制代码中确定与所述第三函数的函数名相同的第四函数;
根据所述数据和函数的引用关系确定所述第四函数是否调用返回函数;
若所述第四函数调用返回函数,则所述第四函数为所述目标函数。
5.根据权利要求1所述方法,其特征在于,通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系,包括:
对所述目标二进制代码进行翻译,获得目标二进制代码的中间表示;
根据所述目标二进制代码的中间表示获得函数调用图和控制流图;
根据所述函数调用图和所述控制流图确定数据和函数的引用关系。
6.根据权利要求1所述方法,其特征在于,所述目标特征信息包括常量特征信息;其中,将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库,包括:
将所述常量特征信息与所述链接库的常量特征库做匹配以确定有效特征;
根据所述有效特征在所述常量特征库中的比例确定所述目标链接库和候选链接库;
根据所述候选链接库的内存特征确定所述目标二进制代码调用的目标链接库。
7.根据权利要求6所述方法,其特征在于,根据所述有效特征在所述常量特征库中的比例确定所述目标链接库和候选链接库,包括:
若所述比例大于第一阈值,则所述常量特征库对应的链接库为所述目标链接库;
若所述比例小于或等于所述第一阈值且大于第二阈值,则所述常量特征库对应的链接库为候选链接库。
8.根据权利要求6所述方法,其特征在于,所述常量特征信息包括第五函数名;其中,根据所述候选链接库的内存特征确定所述目标二进制代码调用的目标链接库,包括:
获取所述候选链接库中的第六函数,运行所述第六函数生成所述候选链接库的内存特征;
根据所述第五函数名在所述目标二进制代码中确定与所述第六函数匹配的目标运行函数;
运行所述目标运行函数,获得目标内存特征;
将所述目标内存特征与所述候选链接库的内存特征做匹配,若匹配成功,则所述候选链接库为所述目标链接库。
9.根据权利要求1所述方法,其特征在于,还包括:
获取所述目标链接库中版本信息的第一前缀信息;
在所述目标二进制中确定与所述第一前缀信息匹配的第二前缀信息;
根据所述第二前缀信息确定所述目标二进制代码调用的目标链接库的版本信息。
10.根据权利要求9所述方法,其特征在于,根据所述第二前缀信息确定所述目标二进制代码调用的目标链接库的版本信息,包括:
获取所述第二前缀信息的后缀信息;
根据所述目标链接库的版本信息确定版本名称命名规则;
若所述后缀信息满足所述命名规则,则所述后缀信息为所述目标链接库的版本信息。
11.根据权利要求1所述方法,其特征在于,还包括:
获取所述目标链接库中版本信息所在字符串的正则匹配规则;
根据所述正则匹配规则在所述目标二进制代码中确定目标字符串,并从所述目标字符串中提取目标链接库的版本信息。
12.一种链接库的确定装置,其特征在于,包括:
目标特征获取模块,配置为获取目标二进制代码中的目标特征信息;
信息匹配模块,配置为将所述目标特征信息与链接库的特征信息进行匹配,以确定所述目标二进制代码调用的目标链接库;
引用关系确定模块,配置为通过静态程序分析获得所述目标二进制代码中数据和函数的引用关系;
目标函数确定模块,配置为根据所述目标链接库对所述目标二进制代码中数据和函数的引用关系进行分析,在目标二进制代码中确定包括所述目标链接库版本信息的目标函数;
版本信息确定模块,配置为确定所述目标链接库的版本信息。
13.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一项所述的方法。
CN202010218854.2A 2020-03-25 2020-03-25 链接库检测方法、装置、电子设备和计算机可读存储介质 Pending CN111488573A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010218854.2A CN111488573A (zh) 2020-03-25 2020-03-25 链接库检测方法、装置、电子设备和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010218854.2A CN111488573A (zh) 2020-03-25 2020-03-25 链接库检测方法、装置、电子设备和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN111488573A true CN111488573A (zh) 2020-08-04

Family

ID=71794534

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010218854.2A Pending CN111488573A (zh) 2020-03-25 2020-03-25 链接库检测方法、装置、电子设备和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111488573A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112181370A (zh) * 2020-09-17 2021-01-05 武汉联影医疗科技有限公司 数据交互关系的生成方法、计算机设备和存储介质
CN113051565A (zh) * 2021-03-16 2021-06-29 深信服科技股份有限公司 恶意脚本的检测方法及装置、设备、存储介质
CN113742002A (zh) * 2021-09-10 2021-12-03 上海达梦数据库有限公司 一种动态库依赖关系获取方法、装置、设备及存储介质
CN114064114A (zh) * 2021-11-19 2022-02-18 云控智行科技有限公司 一种动态库生成方法及装置
CN116401147A (zh) * 2023-02-08 2023-07-07 深圳开源互联网安全技术有限公司 一种函数库引用版本检测方法、设备及存储介质

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112181370A (zh) * 2020-09-17 2021-01-05 武汉联影医疗科技有限公司 数据交互关系的生成方法、计算机设备和存储介质
CN113051565A (zh) * 2021-03-16 2021-06-29 深信服科技股份有限公司 恶意脚本的检测方法及装置、设备、存储介质
CN113051565B (zh) * 2021-03-16 2024-05-28 深信服科技股份有限公司 恶意脚本的检测方法及装置、设备、存储介质
CN113742002A (zh) * 2021-09-10 2021-12-03 上海达梦数据库有限公司 一种动态库依赖关系获取方法、装置、设备及存储介质
CN114064114A (zh) * 2021-11-19 2022-02-18 云控智行科技有限公司 一种动态库生成方法及装置
CN116401147A (zh) * 2023-02-08 2023-07-07 深圳开源互联网安全技术有限公司 一种函数库引用版本检测方法、设备及存储介质
CN116401147B (zh) * 2023-02-08 2024-05-03 深圳开源互联网安全技术有限公司 一种函数库引用版本检测方法、设备及存储介质

Similar Documents

Publication Publication Date Title
CN111488573A (zh) 链接库检测方法、装置、电子设备和计算机可读存储介质
CN111488579B (zh) 漏洞检测方法、装置、电子设备和计算机可读存储介质
CN112104709B (zh) 智能合约的处理方法、装置、介质及电子设备
US11126644B2 (en) Automatic discovery of locations of translated text in localized applications
US10360004B2 (en) Using dynamic information to refine control flow graphs
CN112015430A (zh) JavaScript代码翻译方法、装置、计算机设备及存储介质
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN114328208A (zh) 代码检测方法及装置、电子设备、存储介质
CN113254945A (zh) 基于污点分析的web漏洞静态检测方法、系统和介质
US9652358B1 (en) Type widening for source code analysis
CN113885876A (zh) 一种参数校验方法、装置、存储介质及计算机系统
CN113778897A (zh) 接口的自动测试方法、装置、设备及存储介质
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
CN115640279A (zh) 一种数据血缘关系的构建方法和装置
CN110297639B (zh) 用于检测代码的方法和装置
CN111338968A (zh) 项目的功能模块调试方法、装置、介质及电子设备
CN111400623A (zh) 用于搜索信息的方法和装置
CN116126347B (zh) 一种低代码应用程序的文件编译系统和方法
CN110532176B (zh) 一种智能合约的形式化验证方法、电子装置及存储介质
Habibi et al. Sharif-TaaWS: a tool to automate unit testing of web services
US20230315862A1 (en) Method and apparatus for identifying dynamically invoked computer code using literal values
CN112000573B (zh) 代码质量的监控方法、装置、计算机设备及介质
Xi API Parameter Recommendation Based on Documentation Analysis
CN117873482A (zh) 智能合约的代码验证方法、装置、设备及存储介质
CN114253526A (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