CN115248919A - 一种函数接口的调用方法、装置、电子设备及存储介质 - Google Patents
一种函数接口的调用方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115248919A CN115248919A CN202110457688.6A CN202110457688A CN115248919A CN 115248919 A CN115248919 A CN 115248919A CN 202110457688 A CN202110457688 A CN 202110457688A CN 115248919 A CN115248919 A CN 115248919A
- Authority
- CN
- China
- Prior art keywords
- function
- target
- address
- function interface
- interface
- 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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- 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/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- 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/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- 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/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Bioethics (AREA)
- Virology (AREA)
- Computational Linguistics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种函数接口的调用方法、装置、电子设备及存储介质,涉及计算机技术领域,方法包括:通过处理进程接收目标程序发送的函数接口调用请求,并对函数接口调用请求携带的目标函数名进行验证;其中,目标函数名是基于目标函数接口的原始函数名加密获得的;若确定目标函数名验证通过,则基于目标函数名和预先配置的第一映射关系,确定目标函数名对应的目标地址索引信息;其中,第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;根据目标地址索引信息,获得目标函数接口对应的原始地址;基于原始地址,对目标函数接口进行调用。本申请可以防止目标程序被恶意窃取信息、攻击破坏等,以提高目标程序的安全性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种函数接口的调用方法、装置、电子设备及存储介质。
背景技术
操作系统(operation system,OS)是管理计算机硬件与软件资源的计算机程序,可以作为应用程序与计算机硬件系统之间的接口,客户端通过操作系统的协助,可以快速、有效、安全、可靠地操纵计算机硬件系统中的各类资源,以处理自身的程序。
操作系统向编程人员提供了应用程序与操作系统的接口,简称函数接口,应用程序通过调用一系列的系统函数接口,可在执行中访问操作系统中的资源和获取操作系统的服务,它也是应用程序能获取操作系统服务的唯一途径。
相关技术中,应用程序在调用函数接口时,容易被恶意程序进行钩子处理或劫持,从而被恶意窃取核心信息或者攻击破坏,导致应用程序的安全性低。
发明内容
本申请实施例提供一种函数接口的调用方法、装置、电子设备及存储介质,用于防止目标程序被恶意窃取信息、攻击破坏等,可以提高目标程序的安全性。
第一方面,本申请实施例提供一种函数接口的调用方法,包括:
通过处理进程接收目标程序发送的函数接口调用请求,并对所述函数接口调用请求携带的目标函数名进行验证;其中,所述目标函数名是基于目标函数接口的原始函数名加密获得的;
若确定所述目标函数名验证通过,则基于所述目标函数名和预先配置的第一映射关系,确定所述目标函数名对应的目标地址索引信息;其中,所述第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;
根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址;
基于所述原始地址,对所述目标函数接口进行调用。
第二方面,本申请实施例提供一种函数接口的调用装置,包括:
函数名验证模块,用于通过处理进程接收目标程序发送的函数接口调用请求,并对所述函数接口调用请求携带的目标函数名进行验证;其中,所述目标函数名是基于目标函数接口的原始函数名加密获得的;
地址索引确定模块,用于若确定所述目标函数名验证通过,则基于所述目标函数名和预先配置的第一映射关系,确定所述目标函数名对应的目标地址索引信息;其中,所述第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;
地址获取模块,用于根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址;
调用模块,用于基于所述原始地址,对所述目标函数接口进行调用。
在一种可能的实施例中,所述函数接口调用请求中还携带所述目标函数接口所属的目标函数库的目标库名,其中,所述目标库名是基于所述目标函数库的原始库名加密获得的;
则所述装置还包括库名验证模块,用于:
对所述目标函数库的目标库名进行验证,并确定所述目标库名验证通过。
在一种可能的实施例中,所述函数名验证模块,还用于:
在预先配置的各个函数接口的函数名中,匹配所述目标函数名;其中,所述各个函数接口的函数名,是将所述各个函数接口的原始函数名各自加密获得的;
若匹配到所述目标函数名,则确定所述目标函数名验证通过。
在一种可能的实施例中,所述装置还包括定义模块,用于:
基于所述目标函数名,定义所述目标函数接口的函数原型。
在一种可能的实施例中,所述装置还包括:
加载模块,用于通过目标加载进程将所述目标函数接口所属的目标函数库加载至内存,并获取所述目标函数库中的各个函数接口的原始地址;其中,所述目标函数库对应有函数名列表,所述函数名列表中的各个函数接口的函数名,是基于所述各个函数接口的原始函数名加密获得的;
地址索引配置模块,将所述各个函数接口的原始地址存储后,确定所述各个函数接口的函数名各自对应的地址索引信息;
第一映射关系配置模块,用于建立所述各个函数接口的函数名,以及所述各个函数接口各自对应的地址索引信息之间的所述第一映射关系,将所述第一映射关系进行存储。
在一种可能的实施例中,所述地址索引配置模块,还用于:
采用所述各个函数接口的函数名,分别对所述各个函数接口的原始地址进行加密,得到各个函数接口地址;
将所述各个函数接口地址存储至地址列表中;
根据所述各个函数接口地址各自在所述地址列表中的存储位置,确定所述各个函数接口的函数名各自对应的地址索引信息。
在一种可能的实施例中,所述装置还包括第二映射关系配置模块,用于:
建立所述各个函数接口地址以及各个解密密钥的所述第二映射关系,将所述第二映射关系进行存储。
在一种可能的实施例中,所述装置还包括加密模块,用于:
预先采用第一加密函数,将所述目标函数库的原始库名进行加密,得到所述目标函数库的目标库名;以及
预先采用第二加密函数,分别将所述目标函数库中的各个函数接口的原始函数名进行加密,得到所述各个函数接口的函数名。
在一种可能的实施例中,所述第一加密函数和所述第二加密函数均可以采用以下任意一种:
单哈希函数、双哈希函数、对称加密函数、非对称加密函数。
在一种可能的实施例中,所述加载模块,还用于:
获取通过所述目标加载进程加载的所述目标函数库的第一文件信息;其中,所述第一文件信息包括第一文件时间戳以及第一文件校验和;
获取通过操作系统加载的原始目标函数库的第二文件信息;其中,所述原始目标函数库中保存有所述各个函数接口的原始函数名,所述第二文件信息包括第二文件时间戳以及第二文件校验和;
若确定所述第一文件信息与所述第二文件信息一致,则通过所述目标加载进程将所述目标函数库存储至内存。
第三方面,本申请实施例提供一种电子设备,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行第一方面任一所述方法的步骤。
第四方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行第一方面任一所述方法的步骤。
由于本申请实施例采用上述技术方案,至少具有如下技术效果:
在接收到目标程序发送的函数接口调用请求时,首先对函数接口调用请求携带的目标函数名进行验证,该目标函数名是基于目标函数接口的原始函数名加密获得的;如果目标函数名验证通过,则可以根据各个函数名和各个地址索引信息之间的对应关系,获得目标函数名对应的目标地址索引信息,即得到目标函数接口对应的目标地址索引信息;然后根据该目标地址索引信息,可以获得目标函数接口对应的原始地址;最后基于该原始地址,对目标函数接口进行调用。
由于目标程序的函数接口调用请求中,携带的是加密后的目标函数名,当恶意程序对目标程序调用的目标函数接口进行钩子处理或劫持时,并不知道目标函数接口的原始函数名,即无法获知目标程序调用的目标函数接口具体是哪一个函数接口;即使恶意程序花费大量时间获取到目标函数接口的原始函数名,由于不知道各个函数名和各个地址索引信息之间的对应关系,进而不能获得目标地址索引信息,也就无法获得目标函数接口对应的原始地址,从而难以完成对目标程序的敏感资源与信息的获取,可以防止目标程序被恶意窃取信息、攻击破坏等,以提高目标程序的安全性。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种函数接口的调用方法的应用场景示意图;
图2为本申请实施例提供的一种函数接口的第一映射关系的存储流程图;
图3为本申请实施例提供的一种目标函数库的加载流程图;
图4为本申请实施例提供的一种函数接口地址的存储流程图;
图5为本申请实施例提供的一种函数接口的调用方法的流程图;
图6为本申请实施例提供的另一种函数接口的调用方法的流程图;
图7为本申请实施例提供的另一种函数接口的调用方法的流程图;
图8为本申请实施例提供的一种函数接口的调用流程的示意图;
图9为本申请实施例提供的一种函数接口的调用逻辑的示意图;
图10为本申请实施例提供的一种函数接口的调用装置的结构框图;
图11为本申请实施例提供的另一种函数接口的调用装置的结构框图;
图12为本申请实施例提供的另一种函数接口的调用装置的结构框图;
图13为本申请实施例提供的一种电子设备的结构示意图;
图14为本申请实施例提供的另一种电子设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
为了便于本领域技术人员更好地理解本申请的技术方案,下面对本申请涉及的名词进行介绍。
函数接口:操作系统提供给目标程序调用的接口,目标程序可以通过调用该接口,获得操作系统内核提供的服务。例如,目标程序可以通过调用文件系统相关的函数接口,请求操作系统打开文件、关闭文件或读写文件等;还可以通过调用时钟相关的函数接口,获得系统时间或者设置系统时间等。
函数库:即函数接口库,本申请实施例中可以指包含多种函数接口的函数模块。操作系统通常可以针对多种服务,提供多种函数模块。
下文中所用的词语“示例性”的意思为“用作例子、实施例或说明性”。作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
文中的术语“第一”、“第二”仅用于描述目的,而不能理解为明示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
相关技术中,目标程序在调用函数接口时,容易被恶意程序进行钩子处理或劫持,以被恶意窃取核心信息或者攻击破坏。例如,函数接口NtOpenKey提供的服务是打开一个现有的注册表项,假如恶意程序对函数接口NtOpenKey进行钩子处理或劫持,即可对目标程序所操作的注册表内容进行截取与攻击。由于操作系统加载函数库中的各个函数接口后,各个函数接口的内存地址是固定的,所以恶意程序容易完成对函数接口的钩子处理或劫持。
有鉴于此,本申请实施例提供一种函数接口的调用方法、装置、电子设备及存储介质,在接收到目标程序发送的函数接口调用请求时,首先对函数接口调用请求携带的目标函数名进行验证,该目标函数名是基于目标函数接口的原始函数名加密获得的;如果目标函数名验证通过,则可以根据各个函数名和各个地址索引信息之间的对应关系,获得目标函数名对应的目标地址索引信息,即得到目标函数接口对应的目标地址索引信息;然后根据该目标地址索引信息,可以获得目标函数接口对应的原始地址;最后基于该原始地址,对目标函数接口进行调用。使得恶意程序难以完成对目标程序的敏感资源与信息的获取,从而防止目标程序被恶意窃取信息、攻击破坏等,可以提高目标程序的安全性。
下面结合图1所示的一种函数接口的调用方法的应用场景示意图,对本申请实施例的应用场景可能涉及的设备进行示例介绍。
如图1所示,本申请实施例提供的函数接口的调用方法可以应用于终端设备110。终端设备110中可以安装操作系统111和目标程序112,其中,目标程序112可以指各种应用软件,例如社交类软件、即时通信类软件、浏览器类软件等等。操作系统111提供了各种函数库,每种函数库中可以包含多种函数接口。
示例性的,在windows操作系统中,函数接口库(下面简称函数库)可以是动态链接库(Dynamic Link Library,DLL),具体可以包括多种DLL库,每种DLL库又包括多种函数接口,每种函数接口可以实现相应的功能。例如,ntdll.dll库,是Windows系统从用户空间到内核空间的入口,位于Kernel32.dll和user32.dll中的所有win32接口都是调用ntdll.dll中的函数接口实现的;USER32.DLL库,包括windows管理有关的函数接口,如消息、菜单、光标、计时器、通信等函数接口;GDI32.DLL库,是图形设备接口库,包括设备输出有关的函数接口,如大多数绘图、显示场景、图元文件、坐标及其字体等函数接口;COMDLG32.DLL库,是提供一些附加函数接口的库,包括通用对话框、文件压缩、版本控制的支持等函数接口;还可以包括其他多种DLL库,在此不一一列举。
在具体实施中,目标程序112在运行过程中可以通过调用相应的函数接口,访问操作系统中相应的资源和获取操作系统的相应服务。
例如,终端设备110可以通过加载进程114将操作系统提供的各个函数库加载至内存,每个函数库中包含各种函数接口;终端设备110可以通过处理进程113接收目标程序112发送的函数接口调用请求,进而对函数接口调用请求进行验证,然后获得相应的函数接口的原始地址,以实现对相应的函数接口的调用。
其中,在本申请实施例中,终端设备110为用户使用的电子设备,该电子设备可以是个人计算机、手机、平板电脑、笔记本、电子书阅读器、智能家居等具有一定计算能力并且运行有各种应用程序的计算机设备。
应当说明的是,图1是对函数接口的调用方法的应用场景进行示例介绍,实际本申请实施例中的方法可以适用的应用场景并不限于此,例如,函数接口的调用方法也可以应用于服务器。
基于上述的应用场景,下面对本申请实施例的函数接口的调用方法进行介绍。
本申请实施例中,函数接口的调用方法可以由终端设备执行,例如图1中的终端设备110。在执行函数接口的调用方法之前,终端设备需要对操作系统提供的目标函数库进行配置,后续可以对配置后的目标函数库进行加载,进而实现函数接口的调用。具体地,可以获取目标函数库中的各个函数接口的原始函数名,并对各个原始函数名进行加密,得到加密后的各个函数名,形成目标函数库的函数名列表。另外,还可以对目标函数库的原始库名进行加密,得到加密后的目标库名。
需要说明的是,目标函数库可以是操作系统提供的函数库,可以包括一个或多个;当目标函数库有多个时,针对每个目标函数库,可以采用上述加密方式进行配置,得到配置后的目标函数库。
在一些实施例中,对目标函数库进行配置,可以通过如下步骤实现:
(1)预先采用第一加密函数,将目标函数库的原始库名进行加密,得到目标函数库的目标库名。
(2)预先采用第二加密函数,分别将目标函数库中的各个函数接口的原始函数名进行加密,得到各个函数接口的函数名。
该步骤中,可以采用反汇编器,例如交互式反汇编器(InteractiveDisassembler,IDA),打开目标函数库所在的文件,遍历获取目标函数库的各个函数接口的函数原型列表,并保存该函数原型列表。其中,函数原型也叫函数声明或者引用说明,是一条程序语句,它由函数返回类型、函数名和参数表构成,函数原型的表示形式可以为:返回类型function(参数表)。
根据函数原型列表可以获得各个函数接口的原始函数名,然后采用第二加密函数将各个函数接口的原始函数名进行加密,得到加密后的各个函数接口的函数名,即得到目标函数库的函数名列表。
另外,将上述函数原型列表中的各个原始函数名替换为加密后的各个函数名,即可以得到加密后的各个函数名对应的函数原型列表,以便后续在调用过程中定义函数接口的函数原型。
其中,第一加密函数和第二加密函数均可以采用以下任意一种:
单哈希函数、双哈希函数、对称加密函数、非对称加密函数。
本申请实施例中,单哈希函数可以采用已有的哈希算法中的任意一种实现,双哈希函数可以采用已有的哈希算法中的任意两种实现。例如,已有的哈希算法可以包括:BKDR(Brian Kernighan-Dennis Ritchie)哈希算法,FNV(Fowler-Noll-Vo)哈希算法、信息摘要算法5(Message-Digest Algorithm 5,MD5),安全散列算法1(Secure Hash Algorithm 1,SHA1)等等;其中,BKDR哈希算法、FNV哈希算法属于字符串哈希算法,是比较简单快捷的哈希算法。
对称加密函数可以采用已有的对称加密算法中的任意一种实现、非对称加密函数可以采用已有的非对称加密算法中的任意一种实现。例如,对称加密算法可以包括:数据加密标准(Data Encryption Standard,DES)算法、高级加密标准(Advanced EncryptionStandard,AES)算法等等;非对称加密算法可以包括:椭圆曲线密码学(Elliptic CurveCryptography,ECC)算法、数字签名算法等等。
下面以采用第二加密函数对各个函数接口的原始函数名进行加密为例,对加密过程进行示例性介绍。
示例性的,第二加密函数可以采用双哈希函数,例如,双哈希函数采用BKDR哈希算法和FNV哈希算法,针对各个函数接口中的每个函数接口的原始函数名,可以通过其中一种哈希算法加密原始函数名的上半部分,通过另一种哈希算法加密原始函数名的下半部分,得到加密后的函数名。例如,加密后的函数名可以是哈希值,每个函数接口可以对应一个唯一的哈希值。
需要说明的是,第一加密函数和第二加密函数可以相同,也可以不同,并且,不限于上述加密函数,本申请实施例可以采用任意加密函数。
进一步地,本申请实施例通过上述步骤(1)和步骤(2)配置完目标函数库后,可以将该目标数据库加载至内存,以便后续对目标函数库中的函数接口进行调用。
在一些实施例中,本申请实施例提供的一种函数接口的调用方法,可以应用于终端设备,也可以应用于服务器,下面以应用于终端设备为例进行说明。如图2所示,函数接口的调用方法可以包括如下步骤:
步骤S201,通过目标加载进程将目标函数库加载至内存,并获取目标函数库中的各个函数接口的原始地址;其中,目标函数库对应有函数名列表,函数名列表中的各个函数接口的函数名,是基于各个函数接口的原始函数名加密获得的。
该步骤中,目标加载进程可以是终端设备中用于加载上述目标函数库的进程。在操作系统启动时,可以通过目标加载进程加载目标函数库,首先获得目标函数库所在文件的基地址,其中,基地址是每个段的起始地址,又称段地址;一般地,目标程序要找到内存中所存储的数据,需要通过段地址+偏移地址的形式,来确定所需要的数据在内存中的位置,以便读取。
在获取目标函数库所在文件的基地址后,目标加载进程可以创建一块与目标函数库所在文件的镜像文件大小相同的内存,依次把文件头、节头以及内存对齐方式复制到创建的内存中,并修复重定位表、导入表等信息;其中,重定位表用于在文件加载到内存中时,进行内存地址的修正,导入表中记录了导入的目标函数库中的各个函数接口,将各个函数接口用各自对应的函数名进行表示。
在创建上述内存之后,可以将所创建内存的属性设置为可读写,可执行,通过自定义的模块结构进行保存;获得目标函数库所依赖的所有函数接口句柄,并形成句柄列表,将该句柄列表通过上述自定义的模块结构保存。其中,函数接口句柄是一种间接调用函数的方式。将自定义的模块结构保存到共享内存模块链中,以便后续调用函数接口时,从共享内存模块链读取自定义的模块结构中的内容。
通过上述过程,目标加载进程可以将目标函数库加载至内存,然后获取目标函数库中的各个函数接口位于内存中的原始地址,即各个函数接口的执行代码所在的内存地址。
通常情况下,操作系统在启动时,还可以将未配置的目标函数库(下面称为原始目标函数库)加载至内存,原始目标函数库采用原始库名,且所包含的各个函数接口采用各自的原始函数名。目标加载进程加载的目标函数库可以与操作系统加载的原始目标函数库并存。
因此,为了保证目标加载进程加载的目标函数库,与操作系统加载的原始目标函数库匹配,如图3所示,步骤S201中通过目标加载进程将目标函数接口所属的目标函数库加载至内存,还可以包括如下步骤:
步骤S2011,获取通过目标加载进程加载的目标函数库的第一文件信息;其中,第一文件信息包括第一文件时间戳以及第一文件校验和。
其中,第一文件时间戳可以是目标函数库的文件创建时间和修改时间,第一文件校验和可以采用循环冗余校验(Cyclic Redundancy Check,CRC)技术获得;其中,CRC是一种根据网络数据包或计算机文件等数据,产生简短的固定位数校验码的信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。
通过目标加载进程加载目标函数库时,可以获得目标函数库所在文件的第一文件时间戳以及第一文件校验和。
步骤S2012,获取通过操作系统加载的原始目标函数库的第二文件信息;其中,原始目标函数库中保存有各个函数接口的原始函数名,第二文件信息包括第二文件时间戳以及第二文件校验和。
该步骤中,可以获取操作系统加载的原始目标函数库的原生基地址,遍历操作系统文件目录,查找到原始目标函数库所在的文件,读取该文件的内容,获取第二文件信息。
步骤S2013,若确定第一文件信息与第二文件信息一致,则通过目标加载进程将目标函数库存储至内存,并获取目标函数库中的各个函数接口的原始地址。
具体地,如果第一文件信息与第二文件信息一致,说明目标加载进程加载的目标函数库和操作系统加载的原始目标函数库匹配,此时,可以通过目标加载进程将目标函数库存储至内存。
如果第一文件信息与第二文件信息不一致,说明目标加载进程加载的目标函数库和操作系统加载的原始目标函数库不匹配,这可能是由于打了windows补丁或其他原因等,此时,目标加载进程停止操作。
步骤S202,将各个函数接口的原始地址存储后,确定各个函数接口的函数名各自对应的地址索引信息。
在具体实施中,为了便于查找各个函数接口的原始地址,可以将各个函数接口的原始地址存储后,建立各个函数接口的函数名各自对应的地址索引信息。
示例性的,将各个函数接口的原始地址存储至原始地址列表中,具体地,可以将各个函数接口的原始地址,按照本申请上述实施例中的导入表中各个函数接口的排列顺序进行存储,得到原始地址列表。例如,各个函数接口包括函数接口1、函数接口2、函数接口3、函数接口4、函数接口5,将这5个函数接口的原始地址存储至如表1所示的原始地址列表中。
表1
1 | 函数接口1的原始地址 |
2 | 函数接口2的原始地址 |
3 | 函数接口3的原始地址 |
4 | 函数接口4的原始地址 |
5 | 函数接口5的原始地址 |
根据表1可以确定5个函数接口的原始地址在原始地址列表中的存储位置,即分别为1、2、3、4、5,可以将各个存储位置作为5个函数接口对应的地址索引信息,将各个函数接口采用各自对应的函数名表示,即可以得到5个函数接口的函数名对应的地址索引信息,如表2所示。这样,以便后续在函数接口调用时,根据地址索引信息查找对应的函数接口的原始地址。
表2
函数接口1的函数名 | 1 |
函数接口2的函数名 | 2 |
函数接口3的函数名 | 3 |
函数接口4的函数名 | 4 |
函数接口5的函数名 | 5 |
为了进一步提高各个函数接口的原始地址的安全性,可以将各个函数接口的原始地址进行加密,然后将加密后的各个函数接口地址进行存储。
因此,在一种可能的实施方式中,如图4所示,步骤S202可以通过如下步骤实现:
步骤S2021,基于各个函数接口的函数名,分别获得各个函数接口的原始地址加密后的各个函数接口地址。
具体地,本申请上述实施例中,在加载目标函数库时,可以获得导入表,该导入表中记录了导入的目标函数库中的各个函数接口的函数名,即可以获得函数名列表;根据各个函数接口的函数名,可以分别计算对应的各个函数接口地址。例如,根据某个函数接口的函数名可以确定该函数接口的起始地址。
因此,通过遍历上述函数名列表,可以将每个函数名对应的起始地址加上相应的偏移值,获得相应的函数名对应的函数接口地址,从而获得各个函数接口地址;其中,相应的偏移值可以根据对应的函数接口确定,因为每个函数接口的格式是固定的。由上述可知,各个函数接口的函数名是加密的,所以,根据各个函数接口的函数名计算的各个函数接口地址,也是各个函数接口的原始地址加密后的各个地址。本申请实施例中,各个函数接口采用加密的函数名,进而获得加密的函数接口地址,可以防止被恶意程序截取。
步骤S2022,将各个函数接口地址存储至地址列表中。
该步骤中,可以将获得的各个函数接口地址,按照导入表中各个函数接口的函数名的排列顺序进行存储,得到地址列表。
例如,还以上述5个函数接口为例,这5个函数接口对应的5个函数接口地址分别为:函数接口地址1、函数接口地址2、函数接口地址3、函数接口地址4、函数接口地址5,将这些地址按照顺序存储到地址列表中,例如表3所示,得到各个函数接口地址在地址列表中的存储位置。
表3
步骤S2023,根据各个函数接口地址各自在地址列表中的存储位置,确定各个函数接口的函数名各自对应的地址索引信息。
例如,由表1可知,函数接口地址1、函数接口地址2、函数接口地址3、函数接口地址4、函数接口地址5,在地址列表中的存储位置分别为1、2、3、4、5,可以将存储位置作为地址索引信息。
步骤S203,建立各个函数接口的函数名,以及各个函数接口各自对应的地址索引信息之间的第一映射关系,将第一映射关系进行存储。
由上述可知,各个函数接口的函数名,是将各个函数接口的原始名加密后获得的。以表3中的各个函数接口的函数名各自对应的地址索引信息为例,可以建立如表4所示的第一映射关系。
表4
函数接口1的函数名 | 1 |
函数接口2的函数名 | 2 |
函数接口3的函数名 | 3 |
函数接口4的函数名 | 4 |
函数接口5的函数名 | 5 |
这样,在后续的函数接口调用过程中,根据接收到的某个函数接口的函数名,基于表4所示的第一映射关系,可以确定该函数接口的函数名对应的地址索引信息,然后根据确定的地址索引信息,可以从表3中获得对应的函数接口地址,这个函数接口地址是该函数接口的原始地址加密后的地址。
进一步地,在获得各个函数接口地址后,可以建立各个函数接口地址以及各个解密密钥的第二映射关系,将第二映射关系进行存储。
其中,每个函数接口地址对应一个唯一的解密密钥,通过一个解密密钥可以将对应的一个函数接口地址进行解密,获得对应的函数接口的原始地址。
例如,以上述表3中的各个函数接口地址为例,可以建立如表5所示的第二映射关系。
表5
函数接口地址1 | 解密密钥1 |
函数接口地址2 | 解密密钥2 |
函数接口地址3 | 解密密钥3 |
函数接口地址4 | 解密密钥4 |
函数接口地址5 | 解密密钥5 |
这样,在后续的函数接口调用过程中,基于上述第二映射关系,可以确定某个函数接口地址对应的解密密钥,然后根据确定的解密密钥,可以将该函数接口地址进行解密。
在一种可能的实施方式中,为了提高解密密钥的安全性,在建立各个函数接口地址以及各个解密密钥的第二映射关系时,可以将各个函数接口地址与各自对应的解密密钥进行异或操作,得到各个异或结果,然后获得各个函数接口地址与各自对应的异或结果的对应关系,将该对应关系作为上述第二映射关系。在获取某个函数接口地址对应的解密密钥时,可以先获得对应的异或结果,再对异或结果进行逆运算,获得解密密钥。
上述异或操作方式只是一种示例性的实施方式,本申请实施例还可以采用其他操作方式,例如,还可以将各个函数接口的函数名与各自对应的解密密钥进行异或操作,然后将得到的各个异或结果与各个函数接口地址对应保存,本申请实施例在此不作限定。
本申请实施例中,可以将上述表3、表4和表5单独保存,也可以将表3、表4和表5存储在一个表中,然后保存到全局地址链中。在后续的函数接口调用过程中,可以根据某个函数接口的函数名,确定对应的地址索引信息,然后根据地址索引信息从全局地址链中获取相应的函数接口地址,以及对应的解密密钥。
需要说明的是,由于每次加载目标函数库时,各个函数接口的原始地址都是动态变化的,因此,每次加载目标函数库后,都需要重新执行本申请实施例中的上述各个操作,这样,可以很大程度上提升目标程序的安全性。
本申请实施例中,针对目标函数库的每个原始函数接口生成一个相对应的加密的函数接口,每个加密的函数接口可以采用唯一的解密密钥进行解密,然后实现该函数接口的调用。
基于上述实施例,下面结合图5对本申请实施例提供的一种函数接口的调用方法进行介绍,该方法可以应用于终端设备,也可以应用于服务器,下面以应用于终端设备为例进行说明。
参照图5所示,本申请实施例提供的一种函数接口的调用方法,可以包括如下步骤:
步骤S501,通过处理进程接收目标程序发送的函数接口调用请求,并对函数接口调用请求携带的目标函数名进行验证;其中,目标函数名是基于目标函数接口的原始函数名加密获得的。
其中,目标程序可以是终端设备中安装的各种应用软件,例如前面提到的社交类软件、即时通信类软件、浏览器类软件等,在此不作限定。目标函数接口可以是上述目标函数库中的任意一个函数接口,目标函数库中的每个函数接口具有相应的函数名,目标程序在调用某个函数接口时,可以在函数接口调用请求中携带所调用的函数接口的函数名。
如图6所示,步骤S501中,在通过处理进程接收到目标程序发送的函数接口调用请求后,对函数接口调用请求携带的目标函数名进行验证,可以通过如下步骤实现:
步骤S5011,获取目标程序的携带目标函数名的函数接口调用请求,并在预先配置的各个函数接口的函数名中,匹配目标函数名;其中,各个函数接口的函数名,是将各个函数接口的原始函数名各自加密获得的。
在一种可能的实施方式中,可以建立各个函数接口的函数名对应的函数名列表,然后遍历函数名列表,查找是否存在目标函数名。
步骤S5012,若匹配到目标函数名,则确定目标函数名验证通过。
进一步地,函数接口调用请求中,还可以携带目标函数接口所属的目标函数库的目标库名,其中,目标库名是基于目标函数库的原始库名加密获得的;
因此,通过处理进程接收到目标程序发送的函数接口调用请求之后,在对函数接口调用请求携带的目标函数名进行验证之前,还可以执行如下步骤:
对目标函数库的目标库名进行验证,并确定目标库名验证通过。
具体地,验证接收到的目标库名是否与预先配置的目标函数库的目标库名一致,如果一致,则验证通过。这样,可以进一步提高函数接口调用的安全性,从而提高目标程序的安全性。
步骤S502,若确定目标函数名验证通过,则基于目标函数名和预先配置的第一映射关系,确定目标函数名对应的目标地址索引信息;其中,第一映射关系表征各个函数名和各个地址索引信息之间的对应关系。
本申请上述实施例中介绍了预先配置的第一映射关系,例如上述表2所示的第一映射关系,在此不再赘述。在接收到目标函数名时,基于该第一映射关系,可以获得目标函数名对应的目标地址索引信息。
在具体实施中,在调用目标函数接口之前,需要定义该目标函数接口的函数原型,以实现目标函数接口的调用。因此,在确定目标函数名验证通过之后,在执行下述步骤S503之前,还可以执行如下步骤:
基于目标函数名,定义目标函数接口的函数原型。
其中,目标函数接口的函数原型可以由目标函数接口的函数返回类型、目标函数名和参数表构成。具体地,目标函数接口的函数原型,可以根据本申请上述实施例中的各个函数接口的函数名对应的函数原型列表确定。
步骤S503,根据目标地址索引信息,获得目标函数接口对应的原始地址。
其中,目标地址索引信息可以是目标函数接口对应的原始地址的存储位置,由本申请上述实施例可知,可以预先将各个函数接口的原始地址存储至原始地址列表中,然后根据各个函数接口的原始地址在原始地址列表中的存储位置,确定各个函数接口对应的地址索引信息。
步骤S504,基于原始地址,对目标函数接口进行调用。
该步骤中,在获取到目标函数接口的原始地址后,可以基于该原始地址获得目标函数接口的代码,并执行该目标函数接口的代码,以实现目标程序的相应功能。例如,目标函数接口为NtOpenKey,调用NtOpenKey,即可以打开一个现有的注册表项。
本申请实施例中,由于目标程序的函数接口调用请求中,携带的是加密后的目标函数名,当恶意程序对目标程序调用的目标函数接口进行钩子处理或劫持时,并不知道目标函数接口的原始函数名,即无法获知目标程序调用的目标函数接口具体是哪一个函数接口;即使恶意程序花费大量时间获取到目标函数接口的原始函数名,由于不知道各个函数名和各个地址索引信息之间的对应关系,进而不能获得目标地址索引信息,也就无法获得目标函数接口对应的原始地址,从而难以完成对目标程序的敏感资源与信息的获取,可以防止目标程序被恶意窃取信息、攻击破坏等,以提高目标程序的安全性。
在一些实施例中,为了进一步提高各个函数接口的原始地址的安全性,可以预先将各个函数接口的原始地址进行加密,然后将加密后的各个函数接口地址存储至地址列表中。如图7所示,步骤S503可以包括下步骤:
步骤S5031,根据目标地址索引信息,从预先配置的地址列表中获得目标函数接口地址;其中,目标函数接口地址是对目标函数接口的原始地址加密后的地址。
本申请上述实施例中介绍了预先配置的地址列表,例如上述表1所示的地址列表,在此不再赘述。
步骤S5032,基于目标函数接口地址和预先配置的第二映射关系,确定目标函数接口地址对应的目标解密密钥;其中,第二映射关系表征各个函数接口地址和各个解密密钥的对应关系。
本申请上述实施例中介绍了预先配置的第二映射关系,例如上述表3所示的第二映射关系,在此不再赘述。
步骤S5033,根据目标解密密钥对目标函数接口地址进行解密,得到目标函数接口的原始地址。
本申请实施例中,每个函数接口地址对应一个唯一的解密密钥,目标程序调用特定的函数接口时,针对特定的函数接口可以使用特定的解密密钥进行地址解密,获得解密后的原始地址后,再进行调用。
接下来,以图8所示的函数接口的调用流程为例,对本申请实施例的函数接口的调用方法进行具体介绍。
示例性的,本申请上述实施例中的目标函数库为ntdll.dll库,预先将ntdll.dll库中的各个函数接口的原始函数名,采用双哈希函数进行加密,得到各个函数接口对应的哈希值,可以理解为本申请上述实施例中的各个函数接口的函数名;并且,将ntdll.dll库的原始库名也采用双哈希函数进行加密,得到ntdll.dll库对应的哈希值,可以理解为本申请上述实施例中的目标函数库的目标库名。
如图8所示,通过处理进程执行函数接口的调用流程,具体可以包括以下步骤:
步骤S801,通过处理进程接收目标程序发送的调用请求,该调用请求中携带第一哈希值和第二哈希值。
其中,第一哈希值是ntdll.dll库对应的哈希值,第二哈希值是目标程序所调用的,ntdll.dll库中的目标函数接口对应的哈希值。
步骤S802,判断第一哈希值是否匹配成功,如果是,则继续执行步骤S803;如果否,则执行步骤S810。
该步骤中,将第一哈希值与ntdll.dll库对应的哈希值进行比较,如果相同,则判定第一哈希值匹配成功。
步骤S803,遍历ntdll.dll库中的各个函数接口的哈希值列表,匹配第二哈希值。
其中,各个函数接口的哈希值列表,可以理解为本申请上述实施例中的各个函数接口的函数名列表。
步骤S804,判断第二哈希值是否匹配成功,如果是,则继续执行步骤S805;如果否,则执行步骤S810。
具体地,如果上述哈希值列表中存在第二哈希值,则判定第二哈希值匹配成功。
步骤S805,定义第二哈希值对应的目标函数接口的函数原型。
其中,目标函数接口的函数原型可以由目标函数接口的函数返回类型、目标函数名和参数表构成。具体地,目标函数接口的函数原型,可以根据预先获得的函数原型列表确定,该函数原型列表包括ntdll.dll库中的各个函数接口的函数原型,其中各个函数接口采用各自对应的哈希值表示。
步骤S806,根据第二哈希值,确定目标地址索引信息。
该步骤中,可以基于预先配置的各个哈希值与和各个地址索引信息之间的对应关系,即本申请上述实施例中的第一映射关系,确定第二哈希值对应的目标地址索引信息。
步骤S807,根据目标地址索引信息,从地址列表中获得目标函数接口地址。
其中,地址列表中存储了各个函数接口地址,根据目标地址索引信息,便于从地址列表中获得目标函数接口地址。
步骤S808,采用目标函数接口地址对应的目标解密密钥,对该目标函数接口地址进行解密。
基于预先配置的各个函数接口地址与和各个解密密钥之间的对应关系,即本申请上述实施例中的第二映射关系,可以确定目标函数接口地址对应的目标解密密钥。
步骤S808,调用解密后的目标函数接口的原始地址。
步骤S910,退出。
进一步地,以图9所示的函数接口的调用逻辑示意图,对本申请实施例的函数接口的调用方法进行示例性介绍。
示例性的,上述图8中的第一哈希值为000123,第二哈希值为000456,如图9所示,目标程序可以向终端设备的处理进程发送000123和000456,处理进程接收到000123和000456时,首先对000123进行验证,如果000123验证不通过,则禁止调用相应的目标函数接口;如果000123验证通过,则继续对000456进行验证;如果000456验证不通过,则禁止调用相应的目标函数接口;如果000456验证通过,则根据000456获得目标地址索引信息,进而根据目标地址索引信息获得目标函数接口地址,并采用目标解密密钥对目标函数接口地址进行解密,最后调用解密后的原始地址。
本申请实施例中,由于目标程序的函数接口调用请求中,携带的是目标函数库对应的第一哈希值,和目标函数接口对应的第二哈希值,当恶意程序对目标程序调用的目标函数接口进行钩子处理或劫持时,并不知道目标函数接口的原始函数名,即无法获知目标程序调用的目标函数接口具体是哪一个函数接口;即使恶意程序花费大量时间获取到目标函数接口的原始函数名,由于不知道各个函数接口的哈希值和各个地址索引信息之间的对应关系,进而不能获得目标地址索引信息,也就无法获得目标函数接口对应的原始地址,从而难以完成对目标程序的敏感资源与信息的获取,可以防止目标程序被恶意窃取信息、攻击破坏等,以保护目标程序的安全。
进一步地,根据目标地址索引信息,首先获得的是目标函数接口地址,需要采用目标解密密钥对目标函数接口地址进行解密,最后调用解密后的原始地址,从而进一步提高目标程序调用函数接口的安全性。
本申请实施例中,通过对操作系统提供的各个函数接口进行加密处理,并加载加密后的各个函数接口后,再进行调用,从而形成一个调用框架,使目标程序无需直接调用函数接口的原始函数名,也能执行对应的函数接口的效果,提高了目标程序的安全性,避免目标程序被恶意程序以动态跟踪或静态扫描方式进行攻击。
本申请实施例的函数接口的调用方法可应用于客户端的任意应用场景。例如,客户端调用相应的函数接口,在输入框自动循环执行非物理键盘的输入时,例如,输入框可以是密码输入框或者其他输入框等,可以采用本申请实施例的上述函数接口的调用方法,以提高输入的安全性。
基于相同的发明构思,本申请实施例提供一种函数接口的调用装置,该装置解决问题的原理与上述实施例的函数接口的调用方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。参照图10所示,该函数接口的调用装置可以包括函数名验证模块101、地址索引确定模块102、地址获取模块103和调用模块104。
函数名验证模块101,用于通过处理进程接收目标程序发送的函数接口调用请求,并对函数接口调用请求携带的目标函数名进行验证;其中,目标函数名是基于目标函数接口的原始函数名加密获得的;
地址索引确定模块102,用于若确定目标函数名验证通过,则基于目标函数名和预先配置的第一映射关系,确定目标函数名对应的目标地址索引信息;其中,第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;
地址获取模块103,用于根据目标地址索引信息,获得目标函数接口对应的原始地址;
调用模块104,用于基于原始地址,对目标函数接口进行调用。
在一种可能的实施例中,地址获取模块103,还可以用于:
根据目标地址索引信息,从预先配置的地址列表中获得目标函数接口地址;其中,目标函数接口地址是对目标函数接口的原始地址加密后的地址;
基于目标函数接口地址和预先配置的第二映射关系,确定目标函数接口地址对应的目标解密密钥;其中,第二映射关系表征各个函数接口地址和各个解密密钥的对应关系;
根据目标解密密钥对目标函数接口地址进行解密,得到目标函数接口的原始地址。
在一种可能的实施例中,函数接口调用请求中还携带目标函数接口所属的目标函数库的目标库名,其中,目标库名是基于目标函数库的原始库名加密获得的;
如图11所示,装置还可以包括库名验证模块100,用于:
对目标函数库的目标库名进行验证,并确定目标库名验证通过。
在一种可能的实施例中,函数名验证模块101,还可以用于:
在预先配置的各个函数接口的函数名中,匹配目标函数名;其中,各个函数接口的函数名,是将各个函数接口的原始函数名各自加密获得的;
若匹配到目标函数名,则确定目标函数名验证通过。
在一种可能的实施例中,装置还可以包括定义模块105,用于:
基于目标函数名,定义目标函数接口的函数原型。
在一种可能的实施例中,如图12所示,装置可以还包括:
加载模块1201,用于通过目标加载进程将目标函数接口所属的目标函数库加载至内存,并获取目标函数库中的各个函数接口的原始地址;其中,目标函数库对应有函数名列表,函数名列表中的各个函数接口的函数名,是基于各个函数接口的原始函数名加密获得的;
地址索引配置模块1202,将各个函数接口的原始地址存储后,确定各个函数接口的函数名各自对应的地址索引信息;
第一映射关系配置模块1203,用于建立各个函数接口的函数名,以及各个函数接口各自对应的地址索引信息之间的第一映射关系,将第一映射关系进行存储。
在一种可能的实施例中,地址索引配置模块1202,还可以用于:
采用第一加密函数,分别对各个函数接口的原始地址进行加密,得到各个函数接口地址;
将各个函数接口地址存储至地址列表中;
根据各个函数接口地址各自在地址列表中的存储位置,确定各个函数接口的函数名各自对应的地址索引信息。
在一种可能的实施例中,装置还可以包括第二映射关系配置模块1204,用于:
建立各个函数接口地址以及各个解密密钥的第二映射关系,将第二映射关系进行存储。
在一种可能的实施例中,装置还可以包括加密模块1200,用于:
预先采用第一加密函数,将目标函数库的原始库名进行加密,得到目标函数库的目标库名;以及
预先采用第二加密函数,分别将目标函数库中的各个函数接口的原始函数名进行加密,得到各个函数接口的函数名。
在一种可能的实施例中,第一加密函数、第一加密函数和第二加密函数均可以采用以下任意一种:
单哈希函数、双哈希函数、对称加密函数、非对称加密函数。
在一种可能的实施例中,加载模块1201,还可以用于:
获取通过目标加载进程加载的目标函数库的第一文件信息;其中,第一文件信息包括第一文件时间戳以及第一文件校验和;
获取通过操作系统加载的原始目标函数库的第二文件信息;其中,原始目标函数库中保存有各个函数接口的原始函数名,第二文件信息包括第二文件时间戳以及第二文件校验和;
若第一文件信息与第二文件信息一致,则通过目标加载进程将目标函数库存储至内存。
为了描述的方便,以上各部分按照功能划分为各模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件或硬件中实现。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
关于上述实施例中的装置,其中各个模块的具体执行方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
在介绍了本申请示例性实施方式的函数接口的调用方法和装置之后,接下来,介绍本申请实施例的一示例性实施方式的电子设备。
图13是根据一示例性实施例示出的一种电子设备1300的框图,该电子设备包括:处理器1301和存储器1302;其中,存储器1302用于存储处理器1301可执行指令;处理器1301被配置为执行指令,以实现本申请实施例中的函数接口的调用方法,例如图5中所示的步骤。
接下来,介绍本申请实施例的另一示例性实施方式的电子设备1400。
在一些可能的实施方式中,电子设备1400可以包括至少一个处理单元、以及至少一个存储单元。其中,存储单元存储有程序代码,当程序代码被处理单元执行时,使得处理单元执行本申请实施例上述描述的函数接口的调用方法中的步骤。例如,处理单元可以执行如图5中所示的步骤。
下面参照图14来描述根据本申请的这种实施方式的电子设备1400。图14显示的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图14所示,电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:上述至少一个处理单元1401、上述至少一个存储单元1402、连接不同系统组件(包括存储单元1402和处理单元1401)的总线1403。
总线1403表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元1402可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1421和/或高速缓存存储器1422,还可以进一步包括只读存储器(ROM)1423。
存储单元1402还可以包括具有一组(至少一个)程序模块1424的程序/实用工具1425,这样的程序模块1424包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备也可以与一个或多个外部设备1404(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与生成装置交互的设备通信,和/或与使得该生成装置能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1405进行。并且,电子设备还可以通过网络适配器1406与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1406通过总线1403与用于生成装置的其它模块通信。应当理解,尽管图中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
本申请实施例还提供了一种计算机存储介质,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中的函数接口的调用方法。
在一些可能的实施方式中,本申请提供的函数接口的调用方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的函数接口的调用方法的步骤,例如,所述计算机设备可以执行如图5所示的步骤S501~S504中的函数接口的调用流程。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (15)
1.一种函数接口的调用方法,其特征在于,包括:
通过处理进程接收目标程序发送的函数接口调用请求,并对所述函数接口调用请求携带的目标函数名进行验证;其中,所述目标函数名是基于目标函数接口的原始函数名加密获得的;
若确定所述目标函数名验证通过,则基于所述目标函数名和预先配置的第一映射关系,确定所述目标函数名对应的目标地址索引信息;其中,所述第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;
根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址;
基于所述原始地址,对所述目标函数接口进行调用。
2.如权利要求1所述的方法,其特征在于,所述根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址,包括:
根据所述目标地址索引信息,从预先配置的地址列表中获得目标函数接口地址;其中,所述目标函数接口地址是对所述目标函数接口的原始地址加密后的地址;
基于所述目标函数接口地址和预先配置的第二映射关系,确定所述目标函数接口地址对应的目标解密密钥;其中,所述第二映射关系表征各个函数接口地址和各个解密密钥的对应关系;
根据所述目标解密密钥对所述目标函数接口地址进行解密,得到所述目标函数接口的原始地址。
3.如权利要求1所述的方法,其特征在于,所述函数接口调用请求中还携带所述目标函数接口所属的目标函数库的目标库名,其中,所述目标库名是基于所述目标函数库的原始库名加密获得的;
则所述对所述函数接口调用请求携带的目标函数名进行验证之前,还包括:
对所述目标函数库的目标库名进行验证,并确定所述目标库名验证通过。
4.如权利要求1至3任一项所述的方法,其特征在于,所述对所述函数接口调用请求携带的目标函数名进行验证,包括:
在预先配置的各个函数接口的函数名中,匹配所述目标函数名;其中,所述各个函数接口的函数名,是将所述各个函数接口的原始函数名各自加密获得的;
若匹配到所述目标函数名,则确定所述目标函数名验证通过。
5.如权利要求1至3任一项所述的方法,其特征在于,若确定所述目标函数名验证通过之后,在所述根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址之前,还包括:
基于所述目标函数名,定义所述目标函数接口的函数原型。
6.如权利要求1至3任一项所述的方法,其特征在于,所述通过处理进程接收目标程序发送的函数接口调用请求之前,还包括:
通过目标加载进程将所述目标函数接口所属的目标函数库加载至内存,并获取所述目标函数库中的各个函数接口的原始地址;其中,所述目标函数库对应有函数名列表,所述函数名列表中的各个函数接口的函数名,是基于所述各个函数接口的原始函数名加密获得的;
将所述各个函数接口的原始地址存储后,确定所述各个函数接口的函数名各自对应的地址索引信息;
建立所述各个函数接口的函数名,以及所述各个函数接口各自对应的地址索引信息之间的所述第一映射关系,将所述第一映射关系进行存储。
7.如权利要求6所述的方法,其特征在于,所述将所述各个函数接口的原始地址存储后,确定所述各个函数接口的函数名各自对应的地址索引信息,包括:
基于所述各个函数接口的函数名,分别获得所述各个函数接口的原始地址加密后的各个函数接口地址;
将所述各个函数接口地址存储至地址列表中;
根据所述各个函数接口地址各自在所述地址列表中的存储位置,确定所述各个函数接口的函数名各自对应的地址索引信息。
8.如权利要求7所述的方法,其特征在于,所述方法还包括:
建立所述各个函数接口地址以及各个解密密钥的所述第二映射关系,将所述第二映射关系进行存储。
9.如权利要求7所述的方法,其特征在于,通过目标加载模块将所述目标函数接口所属的目标函数库加载至内存之前,所述方法还包括:
预先采用第一加密函数,将所述目标函数库的原始库名进行加密,得到所述目标函数库的目标库名;以及
预先采用第二加密函数,分别将所述目标函数库中的各个函数接口的原始函数名进行加密,得到所述各个函数接口的函数名。
10.如权利要求9所述的方法,其特征在于,所述第一加密函数和所述第二加密函数均可以采用以下任意一种:
单哈希函数、双哈希函数、对称加密函数、非对称加密函数。
11.如权利要求6所述的方法,其特征在于,通过目标加载进程将所述目标函数接口所属的目标函数库加载至内存,包括:
获取通过所述目标加载进程加载的所述目标函数库的第一文件信息;其中,所述第一文件信息包括第一文件时间戳以及第一文件校验和;
获取通过操作系统加载的原始目标函数库的第二文件信息;其中,所述原始目标函数库中保存有所述各个函数接口的原始函数名,所述第二文件信息包括第二文件时间戳以及第二文件校验和;
若确定所述第一文件信息与所述第二文件信息一致,则通过所述目标加载进程将所述目标函数库存储至内存。
12.一种函数接口的调用装置,其特征在于,包括:
函数名验证模块,用于通过处理进程接收目标程序发送的函数接口调用请求,并对所述函数接口调用请求携带的目标函数名进行验证;其中,所述目标函数名是基于目标函数接口的原始函数名加密获得的;
地址索引获取模块,用于若确定所述目标函数名验证通过,则基于所述目标函数名和预先配置的第一映射关系,确定所述目标函数名对应的目标地址索引信息;其中,所述第一映射关系表征各个函数名和各个地址索引信息之间的对应关系;
地址获取模块,用于根据所述目标地址索引信息,获得所述目标函数接口对应的原始地址;
调用模块,用于基于所述原始地址,对所述目标函数接口进行调用。
13.如权利要求12所述的装置,其特征在于,所述地址获取模块,还用于:
根据所述目标地址索引信息,从预先配置的地址列表中获得目标函数接口地址;其中,所述目标函数接口地址是对所述目标函数接口的原始地址加密后的地址;
基于所述目标函数接口地址和预先配置的第二映射关系,确定所述目标函数接口地址对应的目标解密密钥;其中,所述第二映射关系表征各个函数接口地址和各个解密密钥的对应关系;
根据所述目标解密密钥对所述目标函数接口地址进行解密,得到所述目标函数接口的原始地址。
14.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行权利要求1-11任一项所述方法的步骤。
15.一种计算机可读存储介质,其特征在于,其包括程序代码,当所述程序代码在电子设备上运行时,所述程序代码用于使所述电子设备执行权利要求1-11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110457688.6A CN115248919A (zh) | 2021-04-27 | 2021-04-27 | 一种函数接口的调用方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110457688.6A CN115248919A (zh) | 2021-04-27 | 2021-04-27 | 一种函数接口的调用方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115248919A true CN115248919A (zh) | 2022-10-28 |
Family
ID=83697309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110457688.6A Pending CN115248919A (zh) | 2021-04-27 | 2021-04-27 | 一种函数接口的调用方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115248919A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700838A (zh) * | 2023-06-09 | 2023-09-05 | 广州万彩信息技术有限公司 | 一种as语言接口函数、音视频处理方法和系统 |
CN116719871A (zh) * | 2023-06-29 | 2023-09-08 | 上海中汇亿达金融信息技术有限公司 | 交易管理系统的数据交互方法、装置及系统 |
CN117076010A (zh) * | 2023-09-15 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
-
2021
- 2021-04-27 CN CN202110457688.6A patent/CN115248919A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116700838A (zh) * | 2023-06-09 | 2023-09-05 | 广州万彩信息技术有限公司 | 一种as语言接口函数、音视频处理方法和系统 |
CN116700838B (zh) * | 2023-06-09 | 2024-02-02 | 广州万彩信息技术有限公司 | 一种as语言接口函数、音视频处理方法和系统 |
CN116719871A (zh) * | 2023-06-29 | 2023-09-08 | 上海中汇亿达金融信息技术有限公司 | 交易管理系统的数据交互方法、装置及系统 |
CN116719871B (zh) * | 2023-06-29 | 2024-03-19 | 上海中汇亿达金融信息技术有限公司 | 交易管理系统的数据交互方法、装置及系统 |
CN117076010A (zh) * | 2023-09-15 | 2023-11-17 | 腾讯科技(深圳)有限公司 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
CN117076010B (zh) * | 2023-09-15 | 2024-01-19 | 腾讯科技(深圳)有限公司 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12052356B2 (en) | Method and apparatus for data storage and verification | |
EP3044901B1 (en) | Keying infrastructure | |
EP1942431B1 (en) | Software or other information integrity verification using variable block length and selection | |
US8572692B2 (en) | Method and system for a platform-based trust verifying service for multi-party verification | |
US9270467B1 (en) | Systems and methods for trust propagation of signed files across devices | |
CN115248919A (zh) | 一种函数接口的调用方法、装置、电子设备及存储介质 | |
US20200372183A1 (en) | Digitally Signing Software Packages With Hash Values | |
US10783277B2 (en) | Blockchain-type data storage | |
CN113221166A (zh) | 一种获取区块链数据的方法、装置、电子设备及存储介质 | |
US11409868B2 (en) | Ransomware detection and mitigation | |
CN111222176B (zh) | 基于区块链的云存储持有性证明方法、系统及介质 | |
US11275835B2 (en) | Method of speeding up a full antivirus scan of files on a mobile device | |
CN107924440B (zh) | 用于管理容器的方法、系统和计算机可读介质 | |
CN111400771A (zh) | 目标分区的校验方法及装置、存储介质、计算机设备 | |
CN114896621B (zh) | 应用服务的获取方法、加密方法、装置、计算机设备 | |
CN113056739A (zh) | 到瞬态、非持久性存储电路中的文件系统的验证和安装 | |
CN111046440B (zh) | 一种安全区域内容的篡改验证方法及系统 | |
CN113536361A (zh) | 一种可信基准库的实现方法、装置及计算设备 | |
US11822663B2 (en) | Supervisor-based firmware hardening | |
US20230259606A1 (en) | Asset Access Control Method, Apparatus, Device, and Medium | |
WO2023212838A1 (en) | Fast signature generation and verification | |
US11392696B1 (en) | Systems and methods for detecting code implanted into a published application | |
US20220414266A1 (en) | Signing files based on file security credentials | |
CN112163224A (zh) | 一种安卓软件完整性校验方法和装置 | |
CN114428956A (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 |