CN112612555A - 第三方库的调用链获取方法、装置、设备及存储介质 - Google Patents
第三方库的调用链获取方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112612555A CN112612555A CN202011551786.8A CN202011551786A CN112612555A CN 112612555 A CN112612555 A CN 112612555A CN 202011551786 A CN202011551786 A CN 202011551786A CN 112612555 A CN112612555 A CN 112612555A
- Authority
- CN
- China
- Prior art keywords
- call
- chain
- calling
- msgsend
- party library
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及研发管理技术领域,公开了一种第三方库的调用链获取方法,包括:获取目标应用对应的系统架构提供的符号表;查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;输出所有所述钩子函数获取得到的所述调用链。本申请还涉及区块链技术领域。本申请还公开了一种第三方库的调用链获取装置、计算机设备以及计算机可读存储介质。本申请提高了获取静态库中的调用方法对应的调用链的效率。
Description
技术领域
本申请涉及研发管理技术领域,尤其涉及一种第三方库的调用链获取方法、第三方库的调用链获取装置、计算机设备以及计算机可读存储介质。
背景技术
目前,一些应用软件都支持对第三方应用的功能的调用,而为了实现这一过程,需要将第三方应用对应的SDK(软件开发工具包)作为第三方库,接入到需要调用第三方应用功能的应用中。这时,当本应用的工程师出于应用安全的考虑或其他一些测试需求,需要对从外部接入的第三方库中的方法调用进行分析时,则需要获取到这些方法具体的调用链,才能进行分析工作。
但是,对于基于静态库构建的第三方库,由于静态库在工程中参与编译后,都是融入到宿主工程里的,这就使得静态库提供的方法调难以被查询,也就难以获取到这些方法的调用链。现在一般是利用函数交换方法逐一导出静态库中所有的函数声明,进而获取静态库中的方法调用的相关信息,但这个过程相当繁琐和低效。
上述内容仅用于辅助理解本申请的技术方案,并不代表承认上述内容是现有技术。
发明内容
本申请的主要目的在于提供一种第三方库的调用链获取方法、第三方库的调用链获取装置、计算机设备以及计算机可读存储介质,旨在解决如何提高获取目标应用接入的静态库中的调用方法对应的调用链的效率的问题。
为实现上述目的,本申请提供一种第三方库的调用链获取方法,包括以下步骤:
获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
输出所有所述钩子函数获取得到的所述调用链。
进一步地,所述输出所有所述钩子函数获取得到的所述调用链的步骤之后,还包括:
检测所述调用链是否涉及对所述目标应用的关键接口的调用;
检测到所述调用链涉及对所述关键接口的调用时,根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法。
进一步地,所述根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法的步骤包括:
检测所述调用链对应的第三方库是否具有所述关键接口的调用权限;
若否,根据所述调用链和所述关键接口生成告警信息,和/或,禁用所述调用链对应的调用方法。
进一步地,所述根据所述调用链和所述关键接口生成告警信息的步骤之后,还包括:
输出所述告警信息至关联设备,所述告警信息包括所述调用权限对应的获取请求;
接收到所述关联设备基于所述告警信息发送的确定响应时,将所述调用权限赋予所述调用链对应的第三方库;
接收到所述关联设备基于所述告警信息发送的否定响应时,禁用所述调用链对应的调用方法。
进一步地,所述禁用所述调用链对应的调用方法的步骤之后,还包括:
检测所述第三方库是否存在未禁用的调用方法;
若否,删除所述第三方库。
进一步地,所述执行所述符号表对应的调用请求任务,以调用所述钩子函数的步骤之后,还包括:
根据所有所述钩子函数获取得到的所述调用链生成调用链表;
将所述调用链表发送至存储服务端以块链式的账本进行存储。
进一步地,所述查询所述符号表中所有的objc_msgSend方法的步骤包括:
利用MachOView工具查询所述符号表中所有的objc_msgSend方法;或者,
利用爬虫脚本查询所述符号表中所有的objc_msgSend方法。
为实现上述目的,本申请还提供一种第三方库的调用链获取装置,所述第三方库的调用链获取装置包括:
获取模块,用于获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
处理模块,用于查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
执行模块,用于执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
输出模块,用于输出所有所述钩子函数获取得到的所述调用链。
为实现上述目的,本申请还提供一种计算机设备,所述计算机设备包括:
所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的第三方库的调用链获取程序,所述第三方库的调用链获取程序被所述处理器执行时实现如上述第三方库的调用链获取方法的步骤。
为实现上述目的,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有第三方库的调用链获取程序,所述第三方库的调用链获取程序被处理器执行时实现如上述第三方库的调用链获取方法的步骤。
本申请提供的第三方库的调用链获取方法、第三方库的调用链获取装置、计算机设备以及计算机可读存储介质,通过将objc_msgSend方法的调用重定位为相应的钩子函数,实现利用钩子函数快速获取objc_msgSend方法映射的第三方库调用方法对应的调用链,并可适用于基于静态库构建的第三方库中,从而提高了获取目标应用接入的静态库中的调用方法对应的调用链的效率。
附图说明
图1为本申请一实施例中第三方库的调用链获取方法步骤示意图;
图2为本申请一实施例的第三方库的调用链获取装置示意框图;
图3为本申请一实施例的计算机设备的结构示意框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,在一实施例中,所述第三方库的调用链获取方法包括:
步骤S10、获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
步骤S20、查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
步骤S30、执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
步骤S40、输出所有所述钩子函数获取得到的所述调用链。
本实施例中,实施例的执行终端可以是一种计算机设备,也可以是一种第三方库的调用链获取装置。
如步骤S10所述:目标应用为接入有第三方库(即第三方应用对应的SDK软件开发工具包)的应用,其中,所述第三方库为静态库。需要说明的是,用于运行目标应用的操作系统对应系统架构所提供的库文件即为第一方库,目标应用本软件工程项目中的库文件即为第二方库,故而目标应用接入的第三方应用对应的SDK(或者库文件),即为第三方库;静态库是指在软件工程项目中,将公共代码编译为库文件,然后在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。
可选的,目标应用可以是装载在终端上,也可以是装载在与终端建立有通信连接,并供终端测试或调试的设备上。其中,目标应用对应的系统架构为即为装载目标应用的终端或设备对应的操作系统的系统架构。以下以该操作系统为iOS系统为例进行说明。
可选的,iOS系统的系统架构提供的符号表,即为iOS符号表。需要说明的是,符号表是内存地址与方法名(或者函数名)、文件名、行号的映射表。
在iOS系统上,采用Objective-c语言编写的APP(Application)中所有的Objective-c的函数调用,最底层都是转为对objc_msend方法(c方法的一种)的调用。而在iOS系统中,任意的可运行程序(包括静态库、动态库、重定向文件等)都是Mach-O文件格式的(这个格式主要是用来定义,某个文件是什么,怎么被系统执行等等),在Mach-O文件格式中,任何的不属于本文件中实现的方法,例如objc_msend方法(这个方法的具体实现是在系统库中的),都会在iOS符号表中记录。因此,当目标应用和第三方库是采用Objective-c语言编写时,则第三方库中所有的调用方法都会映射为对应的objc_msgSend方法,并以objc_msgSend方法的方式被记录在iOS符号表中。
可选的,终端可以是接收到针对目标应用接入的第三方库中的调用方法对应的调用链获取指令时,则获取目标应用对应的系统架构提供的符号表,此时获取得到的符号表已将第三方库中的调用方法以objc_msgSend方法的形式记录着。
如步骤S20所述:由于获取到的符号表中除了记录有objc_msgSend方法外,还记录有一些其他的方法,因此,需要先对符号表中的objc_msgSend方法进行查询操作。
可选的,终端可以利用预先编写的爬虫脚本,通过抓取符号表中的objc_msgSend方法对应的方法名“objc_msgSend”,进而查询得到符号表中所有的objc_msgSend方法,及objc_msgSend方法记录在符号表中的位置。
可选的,由于iOS系统中可执行程序(包括objc_msgSend方法)属于Mach-O文件格式,因此终端可以利用MachOView工具查询Mach-O文件格式信息,进而得到其中为objc_msgSend方法对应的Mach-O文件,即可得知符号表中记载的所有的objc_msgSend方法,及objc_msgSend方法记录在符号表中的位置。
可选的,终端预先编写有钩子(HOOK)函数,当终端在符号表中查询得到objc_msgSend方法的同时,则根据该objc_msgSend方法对应的方法名在符号表中位置,将该位置上的objc_msgSend方法对应的方法名替换为钩子函数对应的方法名(或称函数名),并利用钩子函数挂起其所替换的objc_msgSend方法,即可将该objc_msgSend方法在符号表中对应的调用请求指向于钩子函数,这样符号表中原用于针对该objc_msgSend方法的调用请求,即转化为用于针对钩子函数(相当于拦截原来的objc_msgSend方法,转而执行相应的钩子函数)。
其中,钩子函数对应的方法名的字段长度,需与objc_msgSend方法对应的方法名的字段长度保持一致。例如,objc_msgSend方法对应的方法名为“objc_msgSend”,因此可将钩子函数对应的方法名定义为“dyna_msgSend”。
需要说明的是,钩子函数属于一种消息处理机制,“钩子”实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。应用程序可以通过钩子函数截获处理一些特定的消息或是其他一些特定事件。在钩子函数中,每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。
因此,利用钩子函数挂起objc_msgSend方法,即可将钩子函数针对的特定信息(即钩子函数所要截获的信息),指定为该objc_msgSend方法被执行时,期间涉及到的消息传递的过程。
如步骤S30所述:当终端将符号表中记录的所有的objc_msgSend方法均替换为钩子函数时,则可以运行目标应用对应的软件工程,从而执行所述符号表对应的调用请求任务。
在调用请求任务执行时,目标应用所在的操作系统会通过这个符号表中记录的方法名来调用符号表中记录的方法。而由于符号表中记录的所有的objc_msgSend方法的方法名均替换为钩子函数对应的方法名,因此原来用于调用objc_msgSend方法的调用请求,就会改为调用用于挂起该objc_msgSend方法的钩子函数。
进一步地,当钩子函数被调用时,则会启动信息截获任务,并执行被其所挂起的objc_msgSend方法,这样该objc_msgSend方法所映射的第三方库的调用方法(即与该objc_msgSend方法对应的调用方法)就会被调用(或者被执行),然后该调用方法被调用的期间,所涉及到的消息传递的过程(包括消息传递过程中涉及到节点(例如应用程序接口)、所涉及的应用程序接口反馈的结果、消息传递到各个节点的时间等),均会被钩子函数所拦截,钩子函数在此基础上根据所截获的相关数据,即可获取得到该调用方法被调用时所涉及到的调用链(或称调用路径)。
如步骤S40所述:终端利用钩子函数获取到第三方库的调用方法对应的调用链时,钩子函数还会获取该调用方法具体的方法名,然后将该调用方法的方法名和调用链关联输出至终端。
可选的,当终端获取到所有钩子函数输出的调用方法对应的调用链时,可以根据所有调用链和调用链关联的调用方法的方法名,生成调用链表。然后终端再将调用链表输出显示,或将调用链表输出至相关工程师的关联设备,以统一输出所有的调用链,使得相关工程师可以基于此对第三方库中的方法调用进行分析。
在一实施例中,通过将objc_msgSend方法的调用重定位为相应的钩子函数,实现利用钩子函数快速获取objc_msgSend方法映射的第三方库调用方法对应的调用链,并可适用于基于静态库构建的第三方库中,从而提高了获取目标应用接入的静态库中的调用方法对应的调用链的效率。
在一实施例中,在上述实施例基础上,所述输出所有所述钩子函数获取得到的所述调用链的步骤之后,还包括:
步骤S50、检测所述调用链是否涉及对所述目标应用的关键接口的调用;
步骤S51、检测到所述调用链涉及对所述关键接口的调用时,根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法。
本实施例中,终端获取到第三方库中所有调用方法对应的调用链后,可以进一步检测这些调用链对应的调用过程是否有涉及对目标应用的关键接口的调用。其中,所述关键接口可以是目标应用的相关开发人员预先定义的应用程序接口。
可选的,终端也可以是预先检测目标应用的应用程序接口中是否存在涉及到敏感数据的接口,并将涉及到敏感数据的应用程序接口作为关键接口。其中,所述敏感数据可以是用户的姓名、手机号、身份证、贷款产品、家庭住址等一些用户敏感信息,也可以是安全等级高的系统关键数据。
可选的,当终端检测到有调用链对应的调用过程涉及到对关键接口的调用时,说明该调用链可能涉及调用风险,则终端可以根据该调用链和调用链涉及的关键接口,生成告警信息,并将告警信息输出至相关工程师的关联设备,以供相关工程师对该调用链作进一步的风险分析,从而及时工程师采取相关风控操作,以保证目标应用的安全性,避免数据泄漏的情况发生。
和/或,当终端检测到有调用链对应的调用过程涉及到对关键接口的调用时,可以直接禁用该调用连接对应的调用方法,以保证目标应用的安全性,避免数据泄漏的情况发生。
可选的,当终端未检测到调用链对应的调用过程涉及到对关键接口的调用时,则终端可以不作处理。
这样,实现了自动对获取到的调用链进行风险分析,并采取相应的风控操作,在提高了目标应用调用第三方库的安全性的同时,还在一定程度上节省了人工分析调用链的成本,并提高了对调用链进行风险分析的效率。
在一实施例中,在上述实施例基础上,所述根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法的步骤包括:
步骤S60、检测所述调用链对应的第三方库是否具有所述关键接口的调用权限;
步骤S61、若否,根据所述调用链和所述关键接口生成告警信息,和/或,禁用所述调用链对应的调用方法。
本实施例中,当终端检测到有调用链对应的调用过程涉及到对关键接口的调用时,也可以先进一步检测该调用链对应的调用方法所属的第三方库是否具有该关键接口的调用权限。
可选的,当终端检测到第三方库关联的调用权限中,存在该关键接口的调用权限时,则终端可以不作处理;当终端检测到第三方库不具有该关键接口的调用权限时,则说明该第三方库是未经允许擅自调用该关键接口的,例如通过系统漏洞实现对该关键接口的调用,则此时终端可以执行所述根据所述调用链和所述关键接口生成告警信息的步骤,和/或,执行所述禁用所述调用链对应的调用方法的步骤。
这样,可以减小目标应用在允许第三方库的调用时,容易遭到非法入侵的风险。
在一实施例中,在上述实施例基础上,所述根据所述调用链和所述关键接口生成告警信息的步骤之后,还包括:
步骤S70、输出所述告警信息至关联设备,所述告警信息包括所述调用权限对应的获取请求;
步骤S71、接收到所述关联设备基于所述告警信息发送的确定响应时,将所述调用权限赋予所述调用链对应的第三方库;
步骤S72、接收到所述关联设备基于所述告警信息发送的否定响应时,禁用所述调用链对应的调用方法。
本实施例中,当终端检测到有调用链对应的调用过程涉及到对关键接口的调用,以及检测到该调用链对应的第三方库并不存在该关键接口的调用权限时,说明该调用链涉及调用风险,则终端可以根据该调用链和调用链涉及的关键接口,生成告警信息(此时先不禁用该调用链对应的调用方法)。而且终端所生成的告警信息中,还可以包括该关键接口的调用权限对应的获取请求。
进一步地,终端将生成的告警信息输出至相关工程师的关联设备,以供相关工程师对该调用链作进一步的风险分析。
当工程师通过关联设备接收到告警信息时,若是认为告警信息中描述的调用链属于低风险(或者不具备风险),可对该调用链对应的调用方法所属的的第三方库授予该关键接口的调用权限时,则可以通过关联设备向终端反馈所述告警信息的确定响应;若工程师认为告警信息中描述的调用链属于高风险,则可以通过关联设备向终端反馈所述告警信息的否定响应。
可选的,当终端接收到所述关联设备基于所述告警信息发送的确定响应时,则可以将告警信息中描述的关键接口对应的调用权限与调用链对应调用方法所属的第三方库关联,以将该调用权限赋予该第三方库。
可选的,当终端接收到所述关联设备基于所述告警信息发送的否定响应时,或者,终端在预设时长内未接收到所述关联设备基于所述告警信息发送的肯定响应时,则终端可以直接禁用该调用连接对应的调用方法,以保证目标应用的安全性,避免数据泄漏的情况发生。其中,所述预设时长的取值可以根据实际情况需要设置,本实施例对此不作限定。
这样,提高了目标应用对第三方库的调用链进行风险分析的效率的同时,还保证了目标应用调用第三方库的安全性。
在一实施例中,在上述实施例基础上,所述禁用所述调用链对应的调用方法的步骤之后,还包括:
步骤S80、检测所述第三方库是否存在未禁用的调用方法;
步骤S81、若否,删除所述第三方库。
本实施例中,当终端禁用了调用链对应的调用方法后,可以进一步检测该调用方法所属的第三方库中是否还存在未禁用的调用方法。
可选的,当终端检测到第三方库中还存在未禁用的调用方法时,则终端可以不作处理;当终端检测到第三方库中不存在未禁用的调用方法时,则终端可以直接将该第三方库进行删除,从而减少该第三方库对内存的占用,以及提高目标应用的安全性。
当然,终端在删除第三方库之前,可以输出提示信息,以提示用户该第三方库中已不存在未禁用的调用方法,可将该第三方库删除,以节省内存。当终端接收到提示信息的确认响应时,则将不存在未禁用的调用方法的第三方库删除。
这样,在保证了目标应用的安全性的同时,还能达到有效节约内存的目的。
在一实施例中,在上述实施例基础上,所述执行所述符号表对应的调用请求任务,以调用所述钩子函数的步骤之后,还包括:
步骤S90、根据所有所述钩子函数获取得到的所述调用链生成调用链表;
步骤S91、将所述调用链表发送至存储服务端以块链式的账本进行存储。
本实施例中,终端与基于区块链技术构建的存储服务端建立有通信连接。
当终端获取到所有钩子函数输出的调用方法对应的调用链时,可以根据所有调用链和调用链关联的调用方法的方法名,生成调用链表,并将调用链表发送至存储服务端。
可选的,当存储服务端接收到终端发送的调用链表时,则将调用链表以块链式的账本存储到区块链网络中。账本(Ledger),是区块链(也称为账本数据)和与区块链同步的状态数据库的统称。其中,区块链是以文件系统中的文件的形式来记录交易;状态数据库是以不同类型的键(Key)值(Value)对的形式来记录区块链中的交易,用于支持对区块链中交易的快速查询。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
可选的,当终端接收到关联设备发送的调用链表获取指令时,则向存储服务端转发调用链表获取指令,存储服务端接收到调用链表获取指令后,则将调用链表反馈至终端,由终端转发至关联设备,或者存储服务端接收到调用链表获取指令后,也可以直接将调用链表下发至所述关联设备。
这样,提高了对第三方库中的调用方法对应的调用链存储的安全性,避免因调用链泄露导致目标应用存在安全漏洞,进而提高了目标应用的安全性。
在一实施例中,在上述实施例基础上,所述查询所述符号表中所有的objc_msgSend方法的步骤包括:
步骤21、利用MachOView工具查询所述符号表中所有的objc_msgSend方法;或者,
步骤S22、利用爬虫脚本查询所述符号表中所有的objc_msgSend方法。
本实施例中,由于iOS系统中可执行程序(包括objc_msgSend方法)属于Mach-O文件格式,因此终端可以利用MachOView工具查询Mach-O文件格式信息,进而得到其中为objc_msgSend方法对应的Mach-O文件,即可得知符号表中记载的所有的objc_msgSend方法,及objc_msgSend方法记录在符号表中的位置。
或者,终端也可以利用预先编写的爬虫脚本,通过抓取符号表中的objc_msgSend方法对应的方法名“objc_msgSend”,进而查询得到符号表中所有的objc_msgSend方法,及objc_msgSend方法记录在符号表中的位置。
这样,提高了查询符号表中的objc_msgSend方法的效率的同时,还能有效节约人工查询的成本。
参照图2,本申请实施例中还提供一种第三方库的调用链获取装置10,包括:
获取模块11,用于获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
处理模块12,用于查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
执行模块13,用于执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
输出模块14,用于输出所有所述钩子函数获取得到的所述调用链。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于第三方库的调用链获取程序。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种第三方库的调用链获取方法。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
此外,本申请还提出一种计算机可读存储介质,所述计算机可读存储介质包括第三方库的调用链获取程序,所述第三方库的调用链获取程序被处理器执行时实现如以上实施例所述的第三方库的调用链获取方法的步骤。可以理解的是,本实施例中的计算机可读存储介质可以是易失性可读存储介质,也可以为非易失性可读存储介质。
综上所述,为本申请实施例中提供的第三方库的调用链获取方法、第三方库的调用链获取装置、计算机设备和存储介质,通过将objc_msgSend方法的调用重定位为相应的钩子函数,实现利用钩子函数快速获取objc_msgSend方法映射的第三方库调用方法对应的调用链,并可适用于基于静态库构建的第三方库中,从而提高了获取目标应用接入的静态库中的调用方法对应的调用链的效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM通过多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种第三方库的调用链获取方法,其特征在于,包括:
获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
输出所有所述钩子函数获取得到的所述调用链。
2.如权利要求1所述的第三方库的调用链获取方法,其特征在于,所述输出所有所述钩子函数获取得到的所述调用链的步骤之后,还包括:
检测所述调用链是否涉及对所述目标应用的关键接口的调用;
检测到所述调用链涉及对所述关键接口的调用时,根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法。
3.如权利要求2所述的第三方库的调用链获取方法,其特征在于,所述根据所述调用链和所述关键接口生成告警信息,和/或禁用所述调用链对应的调用方法的步骤包括:
检测所述调用链对应的第三方库是否具有所述关键接口的调用权限;
若否,根据所述调用链和所述关键接口生成告警信息,和/或,禁用所述调用链对应的调用方法。
4.如权利要求3所述的第三方库的调用链获取方法,其特征在于,所述根据所述调用链和所述关键接口生成告警信息的步骤之后,还包括:
输出所述告警信息至关联设备,所述告警信息包括所述调用权限对应的获取请求;
接收到所述关联设备基于所述告警信息发送的确定响应时,将所述调用权限赋予所述调用链对应的第三方库;
接收到所述关联设备基于所述告警信息发送的否定响应时,禁用所述调用链对应的调用方法。
5.如权利要求2-4中任一项所述的第三方库的调用链获取方法,其特征在于,所述禁用所述调用链对应的调用方法的步骤之后,还包括:
检测所述第三方库是否存在未禁用的调用方法;
若否,删除所述第三方库。
6.如权利要求1所述的第三方库的调用链获取方法,其特征在于,所述执行所述符号表对应的调用请求任务,以调用所述钩子函数的步骤之后,还包括:
根据所有所述钩子函数获取得到的所述调用链生成调用链表;
将所述调用链表发送至存储服务端以块链式的账本进行存储。
7.如权利要求1所述的第三方库的调用链获取方法,其特征在于,所述查询所述符号表中所有的objc_msgSend方法的步骤包括:
利用MachOView工具查询所述符号表中所有的objc_msgSend方法;或者,
利用爬虫脚本查询所述符号表中所有的objc_msgSend方法。
8.一种第三方库的调用链获取装置,其特征在于,包括:
获取模块,用于获取目标应用对应的系统架构提供的符号表,所述符号表用于将所述目标应用接入的第三方库中的调用方法记录为objc_msgSend方法;
处理模块,用于查询所述符号表中所有的objc_msgSend方法,并利用钩子函数挂起查询得到的objc_msgSend方法,以将所述objc_msgSend方法在所述符号表中的调用请求指向于所述钩子函数;
执行模块,用于执行所述符号表对应的调用请求任务,以调用所述钩子函数,其中,所述钩子函数在调用时,执行所述钩子函数挂起的objc_msgSend方法,并获取所述objc_msgSend方法对应的所述调用方法的调用链;
输出模块,用于输出所有所述钩子函数获取得到的所述调用链。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的第三方库的调用链获取程序,所述第三方库的调用链获取程序被所述处理器执行时实现如权利要求1至7中任一项所述的第三方库的调用链获取方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有第三方库的调用链获取程序,所述第三方库的调用链获取程序被处理器执行时实现如权利要求1至7中任一项所述的第三方库的调用链获取方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011551786.8A CN112612555A (zh) | 2020-12-24 | 2020-12-24 | 第三方库的调用链获取方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011551786.8A CN112612555A (zh) | 2020-12-24 | 2020-12-24 | 第三方库的调用链获取方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112612555A true CN112612555A (zh) | 2021-04-06 |
Family
ID=75244872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011551786.8A Pending CN112612555A (zh) | 2020-12-24 | 2020-12-24 | 第三方库的调用链获取方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612555A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955090A (zh) * | 2023-09-19 | 2023-10-27 | 四川集鲜数智供应链科技有限公司 | 一种链式服务的调用链监控系统及方法 |
-
2020
- 2020-12-24 CN CN202011551786.8A patent/CN112612555A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955090A (zh) * | 2023-09-19 | 2023-10-27 | 四川集鲜数智供应链科技有限公司 | 一种链式服务的调用链监控系统及方法 |
CN116955090B (zh) * | 2023-09-19 | 2023-11-28 | 四川集鲜数智供应链科技有限公司 | 一种链式服务的调用链监控系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109446068B (zh) | 接口测试方法、装置、计算机设备和存储介质 | |
CN108833355B (zh) | 数据处理方法、装置、计算机设备和计算机可读存储介质 | |
CN112632575A (zh) | 业务系统的权限管理方法、装置、计算机设备及存储介质 | |
CN111835756B (zh) | App隐私合规检测方法、装置、计算机设备及存储介质 | |
WO2020233092A1 (zh) | 智能合约调用方法、装置、设备和存储介质 | |
CN111475376B (zh) | 处理测试数据的方法、装置、计算机设备和存储介质 | |
CN109726134B (zh) | 接口测试方法和系统 | |
CN110224855B (zh) | 微服务实例的注册方法、装置、计算机设备及存储介质 | |
CN111090581B (zh) | 智能合约测试方法、装置、计算机设备和存储介质 | |
CN104573435A (zh) | 用于终端权限管理的方法和终端 | |
CN108400978B (zh) | 漏洞检测方法、装置、计算机设备和存储介质 | |
CN110083384B (zh) | 应用程序编程接口创建方法以及装置 | |
CN108768960A (zh) | 病毒检测方法、装置、存储介质及计算机设备 | |
CN109254765B (zh) | 定时任务管理方法、装置、计算机设备及存储介质 | |
CN112698820A (zh) | 存储器和交换机统一监控管理方法、装置和计算机设备 | |
CN109768962B (zh) | 防火墙策略生成方法、装置、计算机设备及存储介质 | |
CN112612555A (zh) | 第三方库的调用链获取方法、装置、设备及存储介质 | |
CN108322458A (zh) | Web应用入侵检测方法、系统、计算机设备和存储介质 | |
CN110162310B (zh) | 插件接口测试方法及装置、计算机设备及存储介质 | |
CN110443039A (zh) | 插件安全性的检测方法、装置以及电子设备 | |
CN111865927B (zh) | 基于系统的漏洞处理方法、装置、计算机设备和存储介质 | |
CN112667499A (zh) | 页面组件的测试方法、装置、计算机设备及存储介质 | |
CN110602051B (zh) | 基于共识协议的信息处理方法及相关装置 | |
CN112383536B (zh) | 防火墙验证方法、装置、计算机设备及存储介质 | |
CN106856477B (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 |