一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种动态链接库注入方法、装置、设备及存储介质与流程

2021-11-26 20:45:00 来源:中国专利 TAG:


1.本发明涉及动态链接库注入领域,尤其涉及一种动态链接库注入方法、装置、设备及存储介质。


背景技术:

2.现有技术中,通常依赖于调用操作系统提供的远程线程调用函数,在目标进程内创建一个新的线程,并以所述新的线程作为动态链接库注入操作的载体,实现动态链接库的注入。
3.但是这种动态链接库的注入方式在目标进程的内部执行,容易被目标进程感知,从而导致动态链接库注入的失败,并且这种注入方式需要获取目标进程的大量操作权限,从而提升了动态链接库的注入难度。


技术实现要素:

4.为了增加动态链接库注入的隐蔽性,提升动态链接库注入成功率,并且降低动态链接库注入对于目标进程操作权限的依赖度,本发明实施例提供一种动态链接库注入方法、装置、设备及存储介质。
5.一方面,本发明提供了一种动态链接库注入方法,所述方法包括:
6.打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限;
7.获取内存空间;
8.封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,将所述动态链接库的路径和所述加载函数存储在所述内存空间之中;
9.基于所述加载函数设置回调函数,所述回调函数用于在操作系统达到预设状态时,被所述操作系统自行调用以便于在目标进程中运行所述加载函数。
10.另一方面,本发明提供一种动态链接库注入装置,所述装置包括:
11.目标进程句柄获取模块,用于打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限;
12.内存空间获取模块,用于获取内存空间;
13.加载函数封装模块,用于封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,将所述动态链接库的路径和所述加载函数存储在所述内存空间之中;
14.回调函数设置模块,用于基于所述加载函数设置回调函数,所述回调函数用于在操作系统达到预设状态时,被所述操作系统自行调用以便于在目标进程中运行所述加载函数。
15.另一方面,本发明提供了一种计算机可读存储介质,其特征在于,所述计算机可读
存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或至少一段程序由处理器加载并执行以实现上述的一种动态链接库注入方法。
16.另一方面,本发明提供了一种动态链接库注入设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或至少一段程序由所述处理器加载并执行上述的一种动态链接库注入方法。
17.本发明提供了一种动态链接库注入方法、装置、设备及存储介质。本发明基于回调函数实现动态链接库的注入,所需的目标操作权限少,并且不需要在目标进程内创建远程线程,可以绕过目标进程内的线程管理与监控等限制措施,使用的回调函数相关信息披露较少,从而可以绕过目标进程的检测,提升逆向分析难度,进而使得动态链接库的注入成功率更高。
附图说明
18.为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
19.图1是本发明提供现有技术中进行动态链接库注入的方法流程示意图;
20.图2是本发明提供的一种动态链接库注入方法流程图;
21.图3是本发明提供的封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数流程图;
22.图4是本发明提供的构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行流程图;
23.图5是本发明提供的一种动态链接库注入方法执行示意图;
24.图6是本发明提供的一种动态链接库注入装置框图;
25.图7是本发明提供的加载函数封装模块框图;
26.图8是本发明提供的一种用于实现本发明实施例所提供的方法的设备的硬件结构示意图。
具体实施方式
27.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
28.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产
品或设备固有的其它步骤或单元。
29.为了使本发明实施例公开的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明实施例进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明实施例,并不用于限定本发明实施例。
30.以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。为了便于理解本发明实施例所述的技术方案及其产生的技术效果,本发明实施例首先对于相关专业名词进行解释:
31.dll:动态链接库(dynamic link library)。dll是一个包含可由多个程序,同时使用的代码和数据的库。在windows操作系统中,这种dll文件被称为应用程序拓展。
32.dll注入:将一个dll文件放入某个进程(目标进程)的地址空间里,使得其成为目标进程的一部分,dll注入技术可以用于在应用程序中添加/扩展其他扩展程序,对应用程序进行调试或进行逆向工程,当然,dll注入技术也可以被恶意利用以破坏目标程序。
33.api函数:api(application programming interface,应用程序接口)函数是一些预先定义的函数。操作系统除了协调应用程序的执行、内存分配、系统资源管理外,同时也是服务中心,调用这个服务中心的各种服务(每一种服务是一个api函数),可以帮助应用程序达到开启视窗、描绘图形、使用周边设备等目的。
34.windows操作系统:microsoftwindows操作系统是美国微软公司研发的一套操作系统,采用了图形化模式图形设备接口,更为人性化。随着计算机硬件和软件的不断升级,微软的windows也在不断升级,从架构的16位、32位再到64位,系统版本从最初的windows1.0到windows95、windows98、windows2000、windows xp、windows vista、windows7、windows8、windows8.1、windows10和windows server服务器企业级操作系统,不断持续更新。
35.句柄:windows操作系统中用来标识被应用程序所建立或使用的对象的唯一整数,windows操作系统使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,图形设备接口对象等各种资源。
36.汇编语言:一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构。
37.loader指令:载入指令,是一段特殊构造的汇编语言代码,在进行dll注入的过程中被写入到目标进程对应的空间中,用于加载dll文件。
38.现有技术中进行动态链接库注入的方法如图1所示,包括下述步骤:
39.s1.打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限。
40.事实上,目标操作权限集合的内容与使用的动态链接库注入方法相关,不同的方法需要获取不同的目标操作权限。现有技术中需要在目标进程中创建远程线程,并通过创建的远程线程实现动态链接库的注入。这种技术方案在windows操作系统中施行至少需要五种目标操作权限。具体地,这五种目标操作权限为:
41.process_create_thread:创建线程权限
42.process_query_information:查询信息权限
43.process_vm_operation:内存操作权限
44.process_vm_write:内存写入权限
45.process_vm_read:内存读取权限
46.在一个可行的实施方式中,在windows操作系统中可以通过调用openprocess函数打开目标进程来获取到目标进程的句柄。
47.s3.根据所述目标进程句柄创建远程线程,基于所述目标操作权限集合由所述远程线程加载动态链接库文件。
48.具体地,在windows操作系统中可以使用createremotethread函数或queueuserapc函数来实现远程线程的创建。queueuserapc函数的运行还额外需要thread_set_context权限。
49.具体地,在createremotethread函数使用时,底层调用rtlcreateuserthread函数和ntcreatethreadex函数实现远程线程的创建。在这一过程中需要使用到目标操作权限集合所对应的操作权限。
50.上述实现动态链接库注入的方法需要获取的目标进程权限多。如使用createremotethread需要提前获取目标进程的五种操作权限。进一步地,需要在目标进程内创建或使用远程线程执行代码来加载动态链接库文件,在此过程中容易被目标进程所感知。如果目标进程设置线程初始化回调,则将会拦截到createremotethread等函数所创建的新线程从而导致注入动态链接库注入失败。
51.为了增加动态链接库注入的隐蔽性,提升动态链接库注入成功率,并且降低动态链接库注入对于目标进程操作权限的依赖度,本发明实施例提供一种动态链接库注入方法,如图2所示,所述方法包括:
52.s101.打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限。
53.事实上,目标操作权限集合的内容与使用的动态链接库注入方法相关,不同的方法需要获取不同的目标操作权限。本发明实施例基于操作系统回调机制进行动态链接库的注入,其目标操作权限的需求相较于现有技术明显减少。
54.步骤s101中请求的目标操作权限集合的具体权限内容与后续步骤使用的方法有关,本发明实施例基于操作系统回调机制进行动态链接库的注入,所述目标操作权限集合至少包括process_set_information(设置进程信息权限)和process_vm_write两个权限。
55.在windows操作系统中可以通过调用openprocess函数打开目标进程来获取到目标进程的句柄,也可以通过openprocess函数来获取目标操作权限集合。
56.s103.获取内存空间。
57.本发明实施例中基于操作系统回调机制进行动态链接库的注入,所述内存空间可以用于存储所述基于操作系统回调机制进行动态链接库的注入的相关逻辑。在一个具体的实施例中,所述获取内存空间包括获取第一内存空间和第二内存空间,所述第一内存空间用于存储动态链接库路径信息,所述第二内存空间用于存储动态链接库注入逻辑。
58.在一个可行的实施方式中,可以通过在目标进程内分配内存空间达到获取内存空
间的目的。因为需要在目标进程中分配内存空间,因此,需要获取process_vm_operation权限。相应的,目标操作权限集合由三个元素构成,分别为process_set_information,process_vm_write和process_vm_operation。
59.为了得到目标句柄以及目标操作权限,可以通过下述代码来执行步骤s101:
60.hprocess=openprocess(process_set_information|process_vm_operation|process_vm_write,false,dwpid);
61.其中dwpid是目标进程标识,hprocess是获取到的目标进程句柄。
62.在openprocess调用之后会返回目标进程句柄,随后可以将所述目标进程句柄和需要的内存大小以及内存权限process_vm_operation传递给另一个windows操作系统api函数virtualallocex,以达到在目标进程中进行内存分配的目的。virtualallocex将会返回一个分配完成的内存空间的地址。
63.在另一个可行的实施方式中,可以在现有内存中获取内存空间。这种实施方式并不需要在目标内存中分配空间,因此,不需要获取process_vm_operation权限。相应的,目标操作权限集合由两个元素构成,分别为process_set_information和process_vm_write。
64.为了得到目标句柄以及目标操作权限,可以通过下述代码来执行步骤s101:
65.hprocess=openprocess(process_set_information|process_vm_write,false,dwpid);
66.其中dwpid是目标进程标识,hprocess是获取到的目标进程句柄。
67.本发明实施例中两种采用不同的内存获取方式最终实现动态链接库注入的方案所请求的目标操作权限集合可以不同,其对应的元素数量可以是两个或者三个,显然目标操作权限集合的元素数量远远低于现有技术实现动态链接库注入所需要的五个权限,大大减少了需要获取的权限数目,降低了动态链接库注入的要求。
68.s105.封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,将所述动态链接库的路径和所述加载函数存储在所述内存空间之中。
69.所述加载函数被写入动态链接库的路径,通过运行所述加载函数即实现所述动态链接库的注入。加载函数的构建是实现动态链接库注入的重点,本发明实施例中加载函数也被称作loader,loader需要被经过构造才能够正确地加载动态链接库。
70.在一个可行的实施例中所述封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,如图3所示,包括:
71.s1051.构建用于保存当前操作系统状态的第一函数段。
72.本发明实施例基于操作系统回调机制进行动态链接库的注入,当满足回调条件时,加载函数可以被直接运行,为了确保运行过程不对于操作系统的状态产生破坏,本发明实施例中首先保存当前操作系统的状态。
73.在windows 32位操作系统下可以使用pushad,pushfd保存寄存器信息,在windows 64位操作系统下可以使用push命令保存rax到r15这16个寄存器。
74.s1053.构建用于分配栈空间的第二函数段。
75.s1055.构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行。
76.在一个可行的实施例中,为了避免动态链接库被多次注入导致的异常,可以对第
三函数段进行改进,加入原子锁确保动态链接库只被注入一次。具体地,所述构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行,如图4所示,包括:
77.s10551.创建原子锁,所述原子锁用于确保所述动态链接库仅被加载一次。
78.在一个可行的实施方式中,本发明实施例提供了原子锁的伪代码:
79.判断原子锁[lock isopen]是否为0,不是0则不执行被原子锁保护的执行步骤;
[0080]
若所述原子锁[lock isopen]为0,则修改所述原子锁取值使其非零。
[0081]
所述原子锁用于达到这样一种技术效果,若所述原子锁对应的代码被首次运行,则可以成功运行被原子锁保护的执行步骤;若所述原子锁对应的代码被再次运行,则被原子锁保护的执行步骤均无法被执行,从而避免由原子锁保护的用于加载动态链接库的执行函数被重复执行。
[0082]
s10553.插入用于加载动态链接库的执行函数。
[0083]
在构建的栈空间中,所述第三函数段通过使用原子锁保证当前代码只被执行一次,然后通过运行所述执行函数实现动态链接库的加载,所述执行函数可以基于loadlibrary或ldrloaddll构建得到,loadlibrary和ldrloaddll均为windows操作系统函数,本发明实施例不做赘述。
[0084]
s1057.构建用于回收所述栈空间的第四函数段。
[0085]
s1059.构建用于根据保存的当前操作系统状态恢复操作系统状态的第五函数段。
[0086]
s10511.封装所述第一函数段、第二函数段、第三函数段、第四函数段、第五函数段得到加载函数。
[0087]
s107.基于所述加载函数设置回调函数,所述回调函数用于在操作系统达到预设状态时,被所述操作系统自行调用以便于在目标进程中运行所述加载函数。
[0088]
事实上,所述回调函数设置成功后,当操作系统达到预设状态时触发回调,所述回调函数中的加载函数即可被运行,从而完成动态链接库的注入。
[0089]
在windows操作系统中,可以将其系统函数ntsetinformationprocess函数作为回调函数,基于ntsetinformationprocess函数来设置目标进程的processinstrumentationcallback的内容信息,执行加载函数进而实现动态链接库的注入。
[0090]
ntsetinformationprocess函数是一个windows操作系统相关官方文档未公开的系统函数,因此,现有技术对于这个函数的使用方法和功能均披露不足。通过对于ntsetinformationprocess的研究,本发明实施例确定ntsetinformationprocess具有强大功能的api函数,可以通过调用此函数设置目标进程的各种关键信息,此函数接受四个参数:进程句柄、信息类别、信息内容和信息长度。
[0091]
为了基于回调函数运行加载函数以达到在目标进程中注入动态链接库的目的,本发明实施例中对于回调函数进行下述设置:
[0092]
(1)将所述目标进程句柄作为参数传递至所述回调函数;
[0093]
(2)设置信息类别中processinstrumentationcallback的值为40;
[0094]
(3)设置信息内容为所述加载函数的存储地址的指针;
[0095]
(4)根据操作系统设置信息长度。
[0096]
信息长度根据操作系统的不同有所不同,如windows7x86操作系统下为4,windows7x64操作系统下为8,windows10x86操作系统下为12,windows10x64操作系统下为16。通过设置40号信息,操作系统会在cpu处理器切换从r0到r3的特权指令级别时,读取ntsetinformationprocess设置的信息内容中的加载函数所在的地址并直接调用所述地址处的指令代码,从而使得构造的加载函数代码得到执行并最终实现dll注入。
[0097]
本发明实施例相较于现有技术中通过创建远程线程进行动态链接库注入的方案,其动态链接库的注入时机是明显不同的。如图5所示,本发明实施例设置了回调函数,只有当操作系统切换特权指令级别时,回调函数才能够得以执行,所述目标进程才能够被注入动态链接库。这种方案不需要在目标进程内创建线程,因此可以绕过目标进程内部针对线程创建的要求和拦截,绕过针对目标进程的线程数量和起始地址的检测,稳定性和隐蔽性更强。本发明实施例中的回调函数在microsoft windows7/window8/windows8.1/windows10的32位和64位操作系统均可以运行。
[0098]
本发明实施例公开的一种动态链接库注入方法,基于回调函数实现动态链接库的注入,所需的目标操作权限少,并且不需要在目标进程内创建远程线程,可以绕过目标进程内的线程管理与监控等限制措施,使用的回调函数相关信息披露较少,从而可以绕过目标进程的检测,提升逆向分析难度,进而使得动态链接库的注入成功率更高。
[0099]
本发明实施例公开一种动态链接库注入装置,如图6所示,所述装置包括:
[0100]
目标进程句柄获取模块201,用于打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限。
[0101]
所述目标操作权限集合至少包括process_set_information和process_vm_write两个权限。
[0102]
内存空间获取模块203,用于获取内存空间。
[0103]
具体地,所述内存空间获取模块203获取的内存空间包括第一内存空间和内存空间,所述第一内存空间用于存储动态链接库路径信息,所述第二内存空间用于存储动态链接库注入逻辑。
[0104]
本发明实施例中可以通过在目标进程内分配内存空间或者使用现有内存的方式获取内存空间。
[0105]
加载函数封装模块205,用于封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,将所述动态链接库的路径和所述加载函数存储在所述内存空间之中。
[0106]
回调函数设置模块207,用于基于所述加载函数设置回调函数,所述回调函数用于在操作系统达到预设状态时,被所述操作系统自行调用以便于在目标进程中运行所述加载函数。
[0107]
在windows操作系统中,可以将其系统函数ntsetinformationprocess函数作为回调函数,基于ntsetinformationprocess函数来设置为目标进程的processinstrumentationcallback的内容信息,执行加载函数进而实现动态链接库的注入。
[0108]
为了基于回调函数运行加载函数以达到在目标进程中注入动态链接库的目的,本
发明实施例中对于回调函数进行下述设置:
[0109]
(1)将所述目标进程句柄作为参数传递至所述回调函数;
[0110]
(2)设置信息类别中processinstrumentationcallback的值为40;
[0111]
(3)设置信息内容为所述加载函数的存储地址的指针;
[0112]
(4)根据操作系统设置信息长度。
[0113]
信息长度根据操作系统的不同有所不同,如windows7x86操作系统下为4,windows7x64操作系统下为8,windows10x86操作系统下为12,windows10x64操作系统下为16。通过设置40号信息,操作系统会在cpu处理器切换从r0到r3的特权指令级别时,读取ntsetinformationprocess设置的信息内容中的加载函数所在的地址并直接调用所述地址处的指令代码,从而使得构造的加载函数代码得到执行并最终实现dll注入。
[0114]
具体地,如图7所示,所述加载函数封装模块205,包括:
[0115]
第一函数段构建单元2051,用于构建用于保存当前操作系统状态的第一函数段。
[0116]
第二函数段构建单元2053,用于构建用于分配栈空间的第二函数段。
[0117]
第三函数段构建单元2055,用于构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行。
[0118]
具体地,所述第三函数段构建单元2055可以创建原子锁,所述原子锁用于确保所述动态链接库仅被加载一次;插入用于加载动态链接库的执行函数。
[0119]
第四函数段构建单元2057,用于构建用于回收所述栈空间的第四函数段。
[0120]
第五函数段构建单元2059,用于构建用于根据保存的当前操作系统状态恢复操作系统状态的第五函数段。
[0121]
封装单元20511,用于封装所述第一函数段、第二函数段、第三函数段、第四函数段、第五函数段得到加载函数。
[0122]
具体地,本发明实施例公开一种动态链接库注入装置与上述方法实施例均基于相同发明构思。详情请参见方法实施例,在此不再赘述。
[0123]
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质可以存储有多条指令。所述指令可以适于由处理器加载并执行本发明实施例所述的一种动态链接库注入方法,所述方法至少包括下述步骤:
[0124]
一种动态链接库注入方法,所述方法包括:
[0125]
打开目标进程以获取目标进程句柄,请求所述目标进程的目标操作权限集合,所述目标操作权限集合中的操作权限为进行动态链接库注入所需的操作权限;
[0126]
获取内存空间;
[0127]
封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,将所述动态链接库的路径和所述加载函数存储在所述内存空间之中;
[0128]
基于所述加载函数设置回调函数,所述回调函数用于在操作系统达到预设状态时,被所述操作系统自行调用以便于在目标进程中运行所述加载函数。
[0129]
在一个优选的实施例中,所述获取内存空间包括获取第一内存空间和第二内存空间,所述第一内存空间用于存储动态链接库路径信息,所述第二内存空间用于存储动态链接库注入逻辑。
[0130]
在一个优选的实施例中,所述获取内存空间包括在目标进程内分配内存空间;相
应的,所述目标操作权限集合由三个元素构成,分别为设置进程信息权限,内存写入权限和内存操作权限;
[0131]
或,
[0132]
所述获取内存空间包括在现有内存中获取内存空间;相应的,所述目标操作权限集合由两个元素构成,分别为设置进程信息权限和内存写入权限。
[0133]
在一个优选的实施例中,所述封装用于基于操作系统回调机制进行动态链接库的注入的相关逻辑,得到加载函数,包括:
[0134]
构建用于保存当前操作系统状态的第一函数段;
[0135]
构建用于分配栈空间的第二函数段;
[0136]
构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行;
[0137]
构建用于回收所述栈空间的第四函数段;
[0138]
构建用于根据保存的当前操作系统状态恢复操作系统状态的第五函数段;
[0139]
封装所述第一函数段、第二函数段、第三函数段、第四函数段、第五函数段得到加载函数。
[0140]
在一个优选的实施例中,所述构建用于基于操作系统回调机制加载动态链接库的第三函数段,所述第三函数段基于所述栈空间运行,包括:
[0141]
创建原子锁,所述原子锁用于确保所述动态链接库仅被加载一次;
[0142]
插入用于加载动态链接库的执行函数。
[0143]
在一个优选的实施例中,在windows操作系统中,将其系统函数ntsetinformationprocess函数作为回调函数,所述ntsetinformationprocess函数的四个参数分别为进程句柄、信息类别、信息内容和信息长度;所述基于所述加载函数设置回调函数,包括:
[0144]
设置进程句柄为所述目标进程句柄;
[0145]
设置信息类别,以使得当操作系统特权指令级别被切换时所述回调函数被执行;
[0146]
设置信息内容为所述加载函数的存储地址的指针;
[0147]
根据操作系统设置信息长度。
[0148]
进一步地,图8示出了一种用于实现本发明实施例所提供的方法的设备的硬件结构示意图,所述设备可以参与构成或包含本发明实施例所提供的装置或系统。如图8所示,设备10可以包括一个或多个(图中采用102a、102b,
……
,102n来示出)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。除此以外,还可以包括:显示器、输入/输出接口(i/o接口)、通用串行总线(usb)端口(可以作为i/o接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图8所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,设备10还可包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。
[0149]
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到设
备10(或移动设备)中的其他元件中的任意一个内。如本技术实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
[0150]
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中所述的方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的一种动态链接库注入方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至设备10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0151]
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括设备10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。
[0152]
显示器可以例如触摸屏式的液晶显示器(lcd),该液晶显示器可使得用户能够与设备10(或移动设备)的用户界面进行交互。
[0153]
需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0154]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0155]
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0156]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献