CN103530118B - 将自定义dll注入目标进程的方法及装置 - Google Patents
将自定义dll注入目标进程的方法及装置 Download PDFInfo
- Publication number
- CN103530118B CN103530118B CN201310462428.3A CN201310462428A CN103530118B CN 103530118 B CN103530118 B CN 103530118B CN 201310462428 A CN201310462428 A CN 201310462428A CN 103530118 B CN103530118 B CN 103530118B
- Authority
- CN
- China
- Prior art keywords
- dll
- loading
- function
- target process
- self
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 313
- 238000000034 method Methods 0.000 title claims abstract description 294
- 230000006870 function Effects 0.000 claims abstract description 342
- 230000008569 process Effects 0.000 claims description 251
- 238000012360 testing method Methods 0.000 claims description 14
- 238000001514 detection method Methods 0.000 claims description 12
- 238000011084 recovery Methods 0.000 claims description 7
- 230000000694 effects Effects 0.000 abstract description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 230000002596 correlated effect Effects 0.000 description 4
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种将自定义DLL注入目标进程的方法及装置,属于计算机技术领域。所述方法包括:创建目标进程;在目标进程开始运行之前,修改加载函数,使得在目标进程开始运行并调用加载函数后跳转至指定内存中;在目标进程开始运行并调用加载函数后,调用加载函数的真实函数体,由加载函数的真实函数体将自定义DLL加载至目标进程。本发明通过创建一个目标进程,并在该目标进程运行其他代码之前,先将自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种将自定义DLL注入目标进程的方法及装置。
背景技术
随着WINDOWS应用的飞速发展,WINDOWS API编程得到了广泛的普及和应用,为了更好地收集一些系统运行时的数据,可以通过HOOK API(HOOKApplication Programming Interface,具有钩子功能的应用程序编程接口)的方式对系统在应用层的程序进行HOOK(钩子)处理以拦截需要的数据。
目前,通过HOOK API拦截需要的数据时,首先需要将编写有可实现功能的DLL(DynamicLinkLibrary,动态链接库)注入到被HOOK的目标进程中。一种在应用层中将DLL注入目标进程的方法,可以包括:首先编写一个可以实现所需功能的自定义DLL,比如,如果想要HOOK目标进程中符合条件的数据,则该自定义DLL的代码段中可以包括用于获取目标进程中符合该条件的数据的代码,这里所讲的目标进程为想要HOOK的进程;然后通过钩子函数SetWindowsHookEx将该自定义DLL注入到目标进程中。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:由于钩子函数SetWindowsHookEx是基于消息的,每次注入的时机会受到其他条件的限制,所以在将自定义DLL注入到目标进程时,该目标进程可能已经执行了一段时间,因此这段时间产生的数据是无法被HOOK到的。由此可知,通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在执行时产生的数据。
发明内容
为了解决现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,本发明实施例提供了一种将自定义DLL注入目标进程的方法及装置。所述技术方案如下:
第一方面,提供了一种。将自定义DLL注入目标进程的方法,所述方法,包括:
创建目标进程;
在所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
在所述目标进程开始运行并调用所述加载函数后,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
在第一方面的第一种可能的实施方式中,在所述目标进程开始运行并调用所述加载函数之后,还包括:
检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL,所述依赖DLL为所述自定义DLL运行时所需要调用的非NTDLL的DLL;
若检测结果为所述自定义DLL运行时仅需要调用NTDLL,则直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤。
结合第一方面或者第一方面的第一种可能的实施方式,在第二种可能的实施方式中,在所述检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL之后,还包括:
若检测结果为所述自定义DLL运行时需要调用NTDLL以及依赖DLL,则判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
若判断结果为所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完,则直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤;
若判断结果为所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完,则利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体加载所述目标进程中即将需要加载的DLL。
结合第一方面、第一方面的第一种可能的实施方式或者第一方面的第二种可能的实施方式,在第三种可能的实施方式中,所述判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完,包括:
判断预存的判断列表中是否存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,所述判断列表中保存有已经被加载至所述目标进程中的所述自定义DLL运行时需要调用的依赖DLL的名称;
若判断结果为预存的判断列表中存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
若判断结果为预存的判断列表中不存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式或者第一方面的第三种可能的实施方式,在第四种可能的实施方式中,在所述修改用于加载DLL的加载函数之前,还包括:
在所述目标进程中分配具有可读写执行权限的所述指定内存;
将所述加载代码写入到所述指定内存中。
结合第一方面、第一方面的第一种可能的实施方式、第一方面的第二种可能的实施方式、第一方面的第三种可能的实施方式或者第一方面的第四种可能的实施方式,在第五种可能的实施方式中,所述修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中,包括:
获取用于加载DLL的加载函数的地址;
根据所述加载函数的地址获取所述加载函数中的所述起始代码;
将所述加载函数中的所述起始代码拷贝至指定位置;
将获取到的所述加载函数中的所述起始代码修改为用于将所述目标进程的执行点从所述加载函数的起始代码跳转至所述指定内存中的代码;
所述利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程,包括:
利用拷贝在所述指定位置的所述加载函数中的所述起始代码恢复所述加载函数;
利用恢复后的所述加载函数中的函数体将所述自定义DLL加载至所述目标进程的所述指定内存中。
第二方面,提供了一种将自定义DLL注入目标进程的装置,其特征在于,所述装置,包括:
创建模块,用于创建目标进程;
修改模块,用于在所述创建模块创建的所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
第一加载模块,用于在所述目标进程开始运行并调用所述加载函数后,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
在第二方面的第一种可能的实施方式中,所述装置,还包括:
检测模块,用于检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL,所述依赖DLL为所述自定义DLL运行时所需要调用的非NTDLL的DLL;
第一执行模块,用于在所述检测模块的检测结果为所述自定义DLL运行时仅需要调用NTDLL时,直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤。
结合第二方面或者第二方面的第一种可能的实施方式,在第二种可能的实施方式中,所述装置,还包括:
判断模块,用于在所述检测模块的检测结果为所述自定义DLL运行时需要调用NTDLL以及依赖DLL时,判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
第二执行模块,用于在所述判断模块的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完时,直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤;
第二加载模块,用于在所述判断模块的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完时,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体加载所述目标进程中即将需要加载的DLL。
结合第二方面、第二方面的第一种可能的实施方式或者第二方面的第二种可能的实施方式,在第三种可能的实施方式中,所述判断模块,包括:
判断单元,用于判断预存的判断列表中是否存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,所述判断列表中保存有已经被加载至所述目标进程中的所述自定义DLL运行时需要调用的依赖DLL的名称;
第一判定单元,用于在所述判断单元的判断结果为预存的判断列表中存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
第二判定单元,用于在所述判断单元的判断结果为预存的判断列表中不存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式或者第二方面的第三种可能的实施方式,在第四种可能的实施方式中,所述装置,还包括:
分配模块,用于在所述创建模块创建的所述目标进程中分配具有可读写执行权限的所述指定内存;
写入模块,用于将所述加载代码写入到所述分配模块分配的所述指定内存中。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式、第二方面的第三种可能的实施方式或者第二方面的第四种可能的实施方式,在第五种可能的实施方式中,所述修改模块,包括:
地址获取单元,用于获取用于加载DLL的加载函数的地址;
起始代码获取单元,用于根据所述地址获取单元获取到的所述加载函数的地址获取所述加载函数中的所述起始代码;
拷贝单元,用于将所述起始代码获取单元获取到的所述加载函数中的所述起始代码拷贝至指定位置;
修改单元,用于将所述起始代码获取单元获取到的获取到的所述加载函数中的所述起始代码修改为用于将所述目标进程的执行点从所述加载函数的起始代码跳转至所述指定内存中的代码;
所述第一加载模块,包括:
恢复单元,用于利用所述拷贝单元拷贝在所述指定位置的所述加载函数中的所述起始代码恢复所述加载函数;
加载单元,用于利用所述恢复单元恢复后的所述加载函数中的函数体将所述自定义DLL加载至所述目标进程的所述指定内存中。
本发明实施例提供的技术方案带来的有益效果是:
通过创建一个目标进程,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例中提供的将自定义DLL注入目标进程的方法的流程图;
图2是本发明另一个实施例中提供的将自定义DLL注入目标进程的方法的流程图;
图3是本发明中部分实施例中提供的修改加载函数的方法的流程图;
图4是本发明部分实施例中提供的利用预先设定在该指定内存中的加载代码调用该加载函数的真实函数体的方法的流程图;
图5是本发明部分实施例中提供的判断自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完的方法的流程图;
图6是本发明一个实施例中提供的将自定义DLL注入目标进程的装置的结构示意图;
图7是本发明另一个实施例中提供的将自定义DLL注入目标进程的装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
为了便于描述,首先对本发明实施例所涉及的相关知识进行详细描述。
为了获取目标进程运行时的数据,通常可以将用于HOOK该目标进程运行时产生的数据的钩子代码注入到该目标进程中,根据实际需要的功能,钩子代码的内容可能会很多,由于将DLL注入至目标进程的过程比较简单,为了减少钩子代码注入目标进程中的难度,通常可以将钩子代码中的内容写入到一个自定义的DLL中,然后将该自定义的DLL注入至目标进程。目前通常是利用HOOKAPI将DLL注入至目标进程的,但由于HOOK API在注入DLL的时机会受到各种限制,因此在将自定义的DLL注入至目标进程之后,该目标进程可能已经运行了一段时间,所以该自定义的DLL并不能获取到目标进程在这段时间运行时产生的数据。为了解决这个问题,本发明引入了一种新的将自定义DLL注入目标进程的方法,该方法可以在目标进程建立之后,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中,这样可以在第一时间将自定义DLL注入目标进程,从而可以达到获取该目标进程运行时的所有数据的效果。
下面通过多个实施例对将自定义DLL注入目标进程的方法进行详细说明。
请参见图1所示,其示出了本发明一个实施例中提供的将自定义DLL注入目标进程的方法的流程图。该将自定义DLL注入目标进程的方法可以包括:
101,创建目标进程;
目标进程可以为想要监控的进程。
在实际应用中,可以通过用于创建进程的函数CreatProcess来创建一个进程,并可以将该进程作为目标进程。
102,在目标进程开始运行之前,修改用于加载DLL的加载函数,使得在目标进程开始运行并调用加载函数后,将目标进程的执行点从加载函数的起始代码跳转至目标进程中预先分配好的指定内存中;
在实际应用中,用于加载DLL的加载函数可以为LdrLoadDLL。
在目标进程开始运行之前,先修改用于加载DLL的加载函数,通常可以修改该加载函数的起始代码,将该起始代码修改为可以用于跳转至目标进程中预先分配好的指定内存中的代码。这样,当目标进程需要调用该加载函数时,目标进程中的执行点先执行该加载函数中的起始代码,由于起始代码已经被修改为可以用于跳转至目标进程中预先分配好的指定内存中的代码,因此,该执行点会跳转至该指定内存中,也即该指定内存中的代码开始执行相关操作。
这里所讲的目标进程中的执行点为目标进程在运行时正在执行的位置,当执行点在某一个位置时,则读取该位置处的代码,并根据读取的代码进行相关的操作。
103,在目标进程开始运行并调用加载函数后,利用预先设定在指定内存中的加载代码调用加载函数的真实函数体,由加载函数的真实函数体将自定义DLL加载至目标进程。
这里所讲的加载函数的真实函数体为在修改用于加载DLL的加载函数前加载函数中具有的函数体。也就是说,加载函数的真实函数体为原有的加载函数所具有的函数体,该函数体中的起始代码仍为修改前的代码。
较优的,在目标进程开始运行并调用加载函数之后,还包括:
检测自定义DLL运行时是否需要调用NTDLL以及依赖DLL,依赖DLL为自定义DLL运行时所需要调用的非NTDLL的DLL;
若检测结果为自定义DLL运行时仅需要调用NTDLL,则直接执行利用预先设定在指定内存中的加载代码调用加载函数的真实函数体,由加载函数的真实函数体将自定义DLL加载至目标进程的步骤。
较优的,在检测自定义DLL运行时是否需要调用NTDLL以及依赖DLL之后,还包括:
若检测结果为自定义DLL运行时需要调用NTDLL以及依赖DLL,则判断自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
若判断结果为自定义DLL运行时需要调用的所有依赖DLL全部被加载完,则直接执行利用预先设定在指定内存中的加载代码调用加载函数的真实函数体,由加载函数的真实函数体将自定义DLL加载至目标进程的步骤;
若判断结果为自定义DLL运行时需要调用的所有依赖DLL未被全部加载完,则利用预先设定在指定内存中的加载代码调用加载函数的真实函数体,由加载函数的真实函数体加载目标进程中即将需要加载的DLL。
较优的,判断自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完,包括:
判断预存的判断列表中是否存在自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,判断列表中保存有已经被加载至目标进程中的自定义DLL运行时需要调用的依赖DLL的名称;
若判断结果为预存的判断列表中存在自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
若判断结果为预存的判断列表中不存在自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
较优的,在修改用于加载DLL的加载函数之前,还包括:
在目标进程中分配具有可读写执行权限的指定内存;
将加载代码写入到指定内存中。
较优的,修改用于加载DLL的加载函数,使得在目标进程开始运行并调用加载函数后,将目标进程的执行点从加载函数的起始代码跳转至目标进程中预先分配好的指定内存中,包括:
获取用于加载DLL的加载函数的地址;
根据加载函数的地址获取加载函数中的起始代码;
将加载函数中的起始代码拷贝至指定位置;
将获取到的加载函数中的起始代码修改为用于将目标进程的执行点从加载函数的起始代码跳转至指定内存中的代码;
利用预先设定在指定内存中的加载代码调用加载函数的真实函数体,由加载函数的真实函数体将自定义DLL加载至目标进程,包括:
利用拷贝在指定位置的加载函数中的起始代码恢复加载函数;
利用恢复后的加载函数中的函数体将自定义DLL加载至目标进程的指定内存中。
综上所述,本发明实施例提供的将自定义DLL注入目标进程的方法,通过创建一个目标进程,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
请参见图2所示,其示出了本发明另一个实施例中提供的将自定义DLL注入目标进程的方法的流程图。该将自定义DLL注入目标进程的方法可以包括:
201,创建目标进程;
目标进程为需要监控的进程。
在实际应用中,可以根据用于创建进程的函数CreatProcess来创建一个进程,并可以将该进程作为目标进程。
202,在该目标进程开始运行之前,在该目标进程中分配具有可读写执行权限的指定内存;
为了能够保证自定义DLL可以被第一时间注入至该目标进程,通常会在创建目标进程之后,先将该目标进程设置为暂停状态,也即创建后的目标进程暂时不运行,这样便可以保证在将自定义DLL加载至目标进程之前,目标进程中的其他代码也不能运行。在实际应用中,可以通过创建进程的函数CreatProcess以及CREAT_SUSPENDED参数创建一个具有暂停状态的目标进程。
在该目标进程开始运行之前,即当该目标进程的运行状态为暂停状态时,则可以首先为该目标进程中分配一个具有可读写执行权限的指定内存,该指定内存可以用于存放自定义的代码,比如自定义的加载代码或最终加载的自定义DLL等。
通常可以通过分配函数VirtualAllocEx往该目标进程中分配一块内存。
203,将加载代码写入到该指定内存中;
这里所讲的加载代码可以为ShellCode,由于在将具有所需功能的自定义DLL注入至目标进程之前,需要先进行一些在注入过程必须的初始化的操作,此时可以将ShellCode先写入至该指定内存中,以便该ShellCode进行相关的初始化的操作。ShellCode的功能可以根据需要自行设定。
通常可以通过函数WriteProcessMemory将ShellCode写入到该目标进程的指定内存中。
204,修改用于加载DLL的加载函数,使得在该目标进程开始运行并调用该加载函数后,将该目标进程的执行点从该加载函数的起始代码跳转至该目标进程中预先分配好的指定内存中;
由于在目标进程开始运行之后,首先需要调用加载函数以加载需要的DLL,为了使得目标进程在运行时能够预先执行上述的加载代码,以便于该加载代码能够在第一时间将自定义DLL加载至该目标进程中,因此需要将加载函数进行修改,以便目标进程在调用该加载函数时,将该目标进程的执行点立即从该加载函数的起始代码跳转至指定内存中的起始位置。
这里所讲的目标进程中的执行点为目标进程在运行时正在执行的位置,当执行点在某一个位置时,则读取该位置处的代码,并根据读取的代码进行相关的操作。
需要说明的是,由于在指定内存中目前还没有注入其他的内容,因此加载代码的起始位置应该是与指定内存的起始位置相同或相近,在执行点跳转至指定内存中的起始位置之后,加载代码则可以执行相关的操作,比如下面的步骤205至207。
请参见图3所示,其示出了本发明中部分实施例中修改加载函数的方法的流程图,具体可以包括:
204a,获取用于加载DLL的加载函数的地址;
在实际应用中,用于加载DLL的加载函数可以为LdrLoadDLL,通常可以通过GetProcAddress函数获取加载函数LdrLoadDLL的地址。
204b,根据该加载函数的地址获取该加载函数中的起始代码;
起始代码即为从该加载函数的地址(这里所讲的地址为加载函数的起始地址)起的一段代码,这段代码可以为一句代码,也可以为若干句代码(这里所讲的“若干句”表示两句或两句以上)。由于加载函数的第一句代码通常都比较短,该句代码所占的地址可能不足以填写用于将该目标进程的执行点从该加载函数的起始代码跳转至该指定内存中的代码,所以,此时可以修改该加载函数中前若干句代码以用于填写用于将该目标进程的执行点从该加载函数的起始代码跳转至该指定内存中的代码。
204c,将该加载函数中的起始代码拷贝至指定位置;
由于后续需要利用真实的加载函数来加载DLL,所以如果直接改加载函数中的代码的话,后续中就无法正常使用真实的加载函数加载DLL,因此需要在修改加载函数中的起始代码之前,先要将该段起始代码拷贝到一个指定的位置(即指定位置),以便后续在需要该加载函数加载DLL时,利用指定位置中的起始代码恢复该加载函数。
204d,将获取到的该加载函数中的起始代码修改为用于将该目标进程的执行点从该加载函数的起始代码跳转至该指定内存中的代码。
这样修改之后,如果目标进程开始调用加载函数,则执行点开始读取加载函数的起始代码,由于起始代码已经被修改为将执行点从该加载函数的起始代码跳转至该指定内存中的代码,所以该执行点可以直接跳转至指定内存中的代码继续执行,此时,指定内存中的代码开始进行相关操作。
205,在该目标进程开始运行并调用该加载函数后,检测自定义DLL运行时是否需要调用NTDLL以及依赖DLL,该依赖DLL为该自定义DLL运行时所需要调用的非NTDLL的DLL;
NTDLL中通常可以包含NTAPI函数,这些NTAPI函数通常需要被API函数(比如HOOK API函数)调用,也就是说,NTDLL为较底层的DLL。
通常自定义DLL在实现需要的功能时,可能需要调用其他的DLL(比如NTDLL或者其他非NTDLL的DLL),因此为了保证自定义DLL可以正常运行,还需要将该自定义DLL运行时需要调用的DLL均加载至目标进程中。
206,若检测结果为该自定义DLL运行时仅需要调用NTDLL,则利用预先设定在该指定内存中的加载代码调用该加载函数的真实函数体,由该加载函数的真实函数体将该自定义DLL加载至该目标进程;
加载函数的真实函数体为在进行步骤204之前所具有的函数体。
请参见图4所示,其示出了本发明部分实施例中提供的利用预先设定在该指定内存中的加载代码调用该加载函数的真实函数体的方法的流程图,具体可以包括:
206a,利用拷贝在指定位置的该加载函数中的起始代码恢复该加载函数;
但由于经过上述步骤204已经对加载函数的函数体进行了修改,因此如果想要调用加载函数的真实函数体,还需要对修改后的加载函数的函数体进行恢复。比如,可以将上述指定位置中的起始代码重新替代加载函数中现有的起始代码,此时恢复后的加载函数中则具有了原来的真实函数体。
206b,利用恢复后的该加载函数中的函数体将自定义DLL加载至目标进程的该指定内存中。
207,若检测结果为自定义DLL运行时需要调用NTDLL以及依赖DLL,则判断该自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
由于自定义DLL运行时还需要其他的依赖DLL,因此需要将这些DLL都加载至目标进程中,为了减少目标进程中其他代码先调用这些依赖DLL的时机,以保证最终注入至目标进程中的自定义DLL可以获取到目标进程执行时所有的数据,可以在将所有依赖DLL均被加载后再加载自定义DLL,因此首先需要对已经加载的依赖DLL进行判断。请参见图5所示,其示出了本发明部分实施例中提供的判断自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完的方法的流程图,具体可以包括:
207a,判断预存的判断列表中是否存在该自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,该判断列表中保存有已经被加载至目标进程中的该自定义DLL运行时需要调用的依赖DLL的名称;
举例来讲,首先可以获取寄存器中[ESP+8]位置处指向的结构体PUNICODE_STRING,然后获取该结构体中的Buffer字段,检测该字段中正在加载的DLL是否为自定义DLL运行时需要调用的依赖DLL,如果是,则将该依赖DLL的名称加入到预存的判断列表中。这样,判断列表中就会保存有已经被加载至目标进程中的依赖DLL的名称。
207b,若判断结果为预存的判断列表中存在该自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定该自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
207c,若判断结果为预存的判断列表中不存在该自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定该自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
208,若判断结果为该自定义DLL运行时需要调用的所有依赖DLL未被全部加载完,则利用预先设定在该指定内存中的加载代码调用该加载函数的真实函数体,由该加载函数的真实函数体加载该目标进程中即将需要加载的DLL。
若判断结果为该自定义DLL运行时需要调用的所有依赖DLL全部被加载完,则执行步骤206。
综上所述,本发明实施例提供的将自定义DLL注入目标进程的方法,通过创建一个目标进程,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
请参见图6所示,其示出了本发明一个实施例中提供的将自定义DLL注入目标进程的装置的流程图。该将自定义DLL注入目标进程的装置可以包括:创建模块601、修改模块602和第一加载模块303。
创建模块601,用于创建目标进程;
修改模块602,用于在所述创建模块601创建的所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
第一加载模块603,用于在所述目标进程开始运行并调用所述加载函数后,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
综上所述,本发明实施例提供的将自定义DLL注入目标进程的装置,通过创建一个目标进程,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
请参见图7所示,其示出了本发明另一个实施例中提供的将自定义DLL注入目标进程的装置的流程图。该将自定义DLL注入目标进程的装置可以包括:创建模块701、修改模块702和第一加载模块703。
创建模块701,用于创建目标进程;
修改模块702,用于在所述创建模块701创建的所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
第一加载模块703,用于在所述目标进程开始运行并调用所述加载函数后,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
较优的,该将自定义DLL注入目标进程的装置还可以包括:检测模块704和第一执行模块705。
检测模块704,用于检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL,所述依赖DLL为所述自定义DLL运行时所需要调用的非NTDLL的DLL;
第一执行模块705,用于在所述检测模块704的检测结果为所述自定义DLL运行时仅需要调用NTDLL时,直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤。
较优的,该将自定义DLL注入目标进程的装置还可以包括:判断模块706、第二执行模块707和第二加载模块708。
判断模块706,用于在所述检测模块的检测结果为所述自定义DLL运行时需要调用NTDLL以及依赖DLL时,判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
第二执行模块707,用于在所述判断模块706的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完时,直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤;
第二加载模块708,用于在所述判断模块706的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完时,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体加载所述目标进程中即将需要加载的DLL。
较优的,判断模块706还可以包括:判断单元706a、第一判定单元706b、第二判定单元706c。
判断单元706a,用于判断预存的判断列表中是否存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,所述判断列表中保存有已经被加载至所述目标进程中的所述自定义DLL运行时需要调用的依赖DLL的名称;
第一判定单元706b,用于在所述判断单元706a的判断结果为预存的判断列表中存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
第二判定单元706c,用于在所述判断单元706a的判断结果为预存的判断列表中不存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
较优的,该将自定义DLL注入目标进程的装置还可以包括:分配模块709,写入模块710。
分配模块709,用于在所述创建模块创建的所述目标进程中分配具有可读写执行权限的所述指定内存;
写入模块710,用于将所述加载代码写入到所述分配模块709分配的所述指定内存中。
较优的,修改模块702可以包括:地址获取单元702a、起始地址获取单元702b、拷贝单元702c和修改单元702d。
地址获取单元702a,用于获取用于加载DLL的加载函数的地址;
起始代码获取单元702b,用于根据所述地址获取单元702a获取到的所述加载函数的地址获取所述加载函数中的所述起始代码;
拷贝单元702c,用于将所述起始代码获取单元702b获取到的所述加载函数中的所述起始代码拷贝至指定位置;
修改单元702d,用于将所述起始代码获取单元702b获取到的获取到的所述加载函数中的所述起始代码修改为用于将所述目标进程的执行点从所述加载函数的起始代码跳转至所述指定内存中的代码。
第一加载模块703还可以包括:恢复单元703a和加载单元703b。
恢复单元703a,用于利用所述拷贝单元拷贝在所述指定位置的所述加载函数中的所述起始代码恢复所述加载函数;
加载单元703b,用于利用所述恢复单元703a恢复后的所述加载函数中的函数体将所述自定义DLL加载至所述目标进程的所述指定内存中。
综上所述,本发明实施例提供的将自定义DLL注入目标进程的装置,通过创建一个目标进程,并在该目标进程运行其他代码之前,先将可实现所需功能的自定义DLL注入至该目标进程中;解决了现有技术中通过现有的注入方法进行HOOK操作时,不能完全获取到目标进程在运行时产生的数据的问题,达到了可以在第一时间将自定义DLL注入,从而可以获取该目标进程运行时的所有数据的效果。
需要说明的是:上述实施例提供的将自定义DLL注入目标进程的装置在将自定义DLL注入目标进程时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将自定义程序和目标进程的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的将自定义DLL注入目标进程的装置与将自定义DLL注入目标进程的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种将自定义DLL注入目标进程的方法,其特征在于,所述方法,包括:
创建目标进程;
在所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
在所述目标进程开始运行并调用所述加载函数后,检测自定义DLL运行时是否需要调用NTDLL以及依赖DLL,所述依赖DLL为所述自定义DLL运行时所需要调用的非NTDLL的DLL;
若检测结果为所述自定义DLL运行时需要调用NTDLL以及依赖DLL,则判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
若判断结果为所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完,则利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
2.根据权利要求1所述的方法,其特征在于,在所述检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL之后,还包括:
若检测结果为所述自定义DLL运行时仅需要调用NTDLL,则直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤。
3.根据权利要求1所述的方法,其特征在于,在所述判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完之后,还包括:
若判断结果为所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完,则利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体加载所述目标进程中即将需要加载的DLL。
4.根据权利要求1所述的方法,其特征在于,所述判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完,包括:
判断预存的判断列表中是否存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,所述判断列表中保存有已经被加载至所述目标进程中的所述自定义DLL运行时需要调用的依赖DLL的名称;
若判断结果为预存的判断列表中存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
若判断结果为预存的判断列表中不存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,则判定所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
5.根据权利要求1至4中任一所述的方法,其特征在于,在所述修改用于加载DLL的加载函数之前,还包括:
在所述目标进程中分配具有可读写执行权限的所述指定内存;
将所述加载代码写入到所述指定内存中。
6.根据权利要求5所述的方法,其特征在于,所述修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中,包括:
获取用于加载DLL的加载函数的地址;
根据所述加载函数的地址获取所述加载函数中的所述起始代码;
将所述加载函数中的所述起始代码拷贝至指定位置;
将获取到的所述加载函数中的所述起始代码修改为用于将所述目标进程的执行点从所述加载函数的起始代码跳转至所述指定内存中的代码;
所述利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程,包括:
利用拷贝在所述指定位置的所述加载函数中的所述起始代码恢复所述加载函数;
利用恢复后的所述加载函数中的函数体将所述自定义DLL加载至所述目标进程的所述指定内存中。
7.一种将自定义DLL注入目标进程的装置,其特征在于,所述装置,包括:
创建模块,用于创建目标进程;
修改模块,用于在所述创建模块创建的所述目标进程开始运行之前,修改用于加载DLL的加载函数,使得在所述目标进程开始运行并调用所述加载函数后,将所述目标进程的执行点从所述加载函数的起始代码跳转至所述目标进程中预先分配好的指定内存中;
第一加载模块,用于在所述目标进程开始运行并调用所述加载函数后,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程;
所述装置,还包括:
检测模块,用于检测所述自定义DLL运行时是否需要调用NTDLL以及依赖DLL,所述依赖DLL为所述自定义DLL运行时所需要调用的非NTDLL的DLL;
判断模块,用于在所述检测模块的检测结果为所述自定义DLL运行时需要调用NTDLL以及依赖DLL时,判断所述自定义DLL运行时需要调用的所有依赖DLL是否全部被加载完;
所述第一加载模块,还用于在所述判断模块的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完时,执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤;
其中,所述加载函数的真实函数体为在所述修改用于加载DLL的加载函数前所述加载函数中具有的函数体。
8.根据权利要求7所述的装置,其特征在于,所述装置,还包括:
第一执行模块,用于在所述检测模块的检测结果为所述自定义DLL运行时仅需要调用NTDLL时,直接执行利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体将所述自定义DLL加载至所述目标进程的步骤。
9.根据权利要求7所述的装置,其特征在于,所述装置,还包括:
第二加载模块,用于在所述判断模块的判断结果为所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完时,利用预先设定在所述指定内存中的加载代码调用所述加载函数的真实函数体,由所述加载函数的真实函数体加载所述目标进程中即将需要加载的DLL。
10.根据权利要求9所述的装置,其特征在于,所述判断模块,包括:
判断单元,用于判断预存的判断列表中是否存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称,其中,所述判断列表中保存有已经被加载至所述目标进程中的所述自定义DLL运行时需要调用的依赖DLL的名称;
第一判定单元,用于在所述判断单元的判断结果为预存的判断列表中存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL全部被加载完;
第二判定单元,用于在所述判断单元的判断结果为预存的判断列表中不存在所述自定义DLL运行时需要调用的所有的依赖DLL的名称时,判定所述自定义DLL运行时需要调用的所有依赖DLL未被全部加载完。
11.根据权利要求7至10中任一所述的装置,其特征在于,所述装置,还包括:
分配模块,用于在所述创建模块创建的所述目标进程中分配具有可读写执行权限的所述指定内存;
写入模块,用于将所述加载代码写入到所述分配模块分配的所述指定内存中。
12.根据权利要求11所述的装置,其特征在于,所述修改模块,包括:
地址获取单元,用于获取用于加载DLL的加载函数的地址;
起始代码获取单元,用于根据所述地址获取单元获取到的所述加载函数的地址获取所述加载函数中的所述起始代码;
拷贝单元,用于将所述起始代码获取单元获取到的所述加载函数中的所述起始代码拷贝至指定位置;
修改单元,用于将所述起始代码获取单元获取到的获取到的所述加载函数中的所述起始代码修改为用于将所述目标进程的执行点从所述加载函数的起始代码跳转至所述指定内存中的代码;
所述第一加载模块,包括:
恢复单元,用于利用所述拷贝单元拷贝在所述指定位置的所述加载函数中的所述起始代码恢复所述加载函数;
加载单元,用于利用所述恢复单元恢复后的所述加载函数中的函数体将所述自定义DLL加载至所述目标进程的所述指定内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310462428.3A CN103530118B (zh) | 2013-09-30 | 2013-09-30 | 将自定义dll注入目标进程的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310462428.3A CN103530118B (zh) | 2013-09-30 | 2013-09-30 | 将自定义dll注入目标进程的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103530118A CN103530118A (zh) | 2014-01-22 |
CN103530118B true CN103530118B (zh) | 2017-01-11 |
Family
ID=49932158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310462428.3A Active CN103530118B (zh) | 2013-09-30 | 2013-09-30 | 将自定义dll注入目标进程的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103530118B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885776A (zh) * | 2014-03-24 | 2014-06-25 | 广州华多网络科技有限公司 | 程序加速方法及其装置 |
CN104978237B (zh) * | 2014-04-11 | 2019-03-19 | 腾讯科技(深圳)有限公司 | 修复动态链接库文件的方法和装置 |
CN104123492A (zh) * | 2014-07-21 | 2014-10-29 | 蓝盾信息安全技术有限公司 | 一种Windows的进程保护方法 |
CN104156481A (zh) * | 2014-08-26 | 2014-11-19 | 北京软安科技有限公司 | 基于动态链接库注入的Android加密通信检测装置和方法 |
CN105808536B (zh) * | 2014-12-27 | 2021-01-12 | 北京奇虎科技有限公司 | 一种文件处理方法和装置 |
US9798537B2 (en) * | 2015-09-14 | 2017-10-24 | Mastercard International Incorporated | Isolating applications with a segmented architecture |
CN106886712B (zh) * | 2015-12-16 | 2021-03-19 | 北京奇虎科技有限公司 | 安装程序的方法及装置 |
CN105843640B (zh) * | 2016-03-21 | 2017-11-14 | 武汉斗鱼网络科技有限公司 | 一种动态链接库的注入方法及装置 |
CN105955762A (zh) * | 2016-04-19 | 2016-09-21 | 北京金山安全软件有限公司 | 一种注入动态链接库文件的方法、装置及电子设备 |
CN107370774A (zh) * | 2016-05-11 | 2017-11-21 | 鼎泰生物科技(海南)有限公司 | 一种共享血糖测试数据的方法和装置 |
CN105956475A (zh) * | 2016-05-17 | 2016-09-21 | 北京金山安全软件有限公司 | Dll文件的拦截处理方法、装置及电子设备 |
CN106095416B (zh) * | 2016-06-01 | 2020-10-09 | 腾讯科技(深圳)有限公司 | 一种在应用程序中的跳转处理方法、装置及智能终端 |
CN106708556B (zh) * | 2016-07-19 | 2019-04-16 | 腾讯科技(深圳)有限公司 | 数据显示方法及装置 |
CN106293967A (zh) * | 2016-08-03 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种远程注入代码的方法及系统 |
CN106406852B (zh) * | 2016-08-25 | 2019-10-01 | 北京北信源软件股份有限公司 | 一种将多dll注入目标进程的优化管理方法 |
CN106407800A (zh) * | 2016-09-20 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种hook的方法及终端设备 |
CN106778269B (zh) * | 2016-12-01 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN108228411A (zh) * | 2016-12-14 | 2018-06-29 | 北京国双科技有限公司 | 一种app界面监测的方法及移动终端 |
CN107172445B (zh) * | 2017-03-31 | 2020-01-03 | 武汉斗鱼网络科技有限公司 | 一种获取数据的方法及装置 |
CN107479874B (zh) * | 2017-07-11 | 2021-04-16 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
CN107688747B (zh) * | 2017-09-01 | 2019-11-08 | 武汉倚天剑科技有限公司 | Windows环境下一种可配置和集成的Hook系统及其方法 |
CN110046497B (zh) * | 2018-01-16 | 2023-06-20 | 腾讯科技(深圳)有限公司 | 一种函数挂钩实现方法、装置和存储介质 |
CN108595958B (zh) * | 2018-05-09 | 2021-05-04 | 北京奇虎科技有限公司 | 一种用于实现跨进程注入的方法、装置及终端 |
CN109542413B (zh) * | 2018-10-25 | 2021-11-19 | 腾讯科技(成都)有限公司 | 数据的处理方法、装置、存储介质和电子装置 |
CN111291474B (zh) * | 2020-01-20 | 2023-06-16 | 南方电网科学研究院有限责任公司 | 一种电磁暂态仿真自定义建模及二次开发方法 |
CN116861413A (zh) * | 2023-06-21 | 2023-10-10 | 云袭网络技术河北有限公司 | 一种注入内核保护进程的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7243342B2 (en) * | 2002-06-11 | 2007-07-10 | Intel Corporation | Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time |
CN101252578A (zh) * | 2008-04-02 | 2008-08-27 | 电子科技大学 | 基于固有子序列模式分解的主机入侵检测方法 |
CN102034050A (zh) * | 2011-01-25 | 2011-04-27 | 四川大学 | 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法 |
CN102073496A (zh) * | 2010-12-29 | 2011-05-25 | 浙大网新科技股份有限公司 | 对调用dll导出函数进行拦截跟踪的方法 |
-
2013
- 2013-09-30 CN CN201310462428.3A patent/CN103530118B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7243342B2 (en) * | 2002-06-11 | 2007-07-10 | Intel Corporation | Methods and apparatus for determining if a user-defined software function is a memory allocation function during compile-time |
CN101252578A (zh) * | 2008-04-02 | 2008-08-27 | 电子科技大学 | 基于固有子序列模式分解的主机入侵检测方法 |
CN102073496A (zh) * | 2010-12-29 | 2011-05-25 | 浙大网新科技股份有限公司 | 对调用dll导出函数进行拦截跟踪的方法 |
CN102034050A (zh) * | 2011-01-25 | 2011-04-27 | 四川大学 | 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法 |
Non-Patent Citations (2)
Title |
---|
动态嵌入式木马检测方法研究;夏丽;《中国优秀硕士学位论文全文数据库 信息科技辑》;20091115(第11期);I138-64 * |
远程线程注入技术在监控系统中的应用;王峥 等;《计算机技术与发展》;20100331;第20卷(第03期);第207-210页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103530118A (zh) | 2014-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103530118B (zh) | 将自定义dll注入目标进程的方法及装置 | |
CN108765158B (zh) | 一种基于区块链的智能合约引擎系统及其合约执行方法 | |
CN1329836C (zh) | 定位程序异常的方法 | |
JP2005293578A (ja) | 属性を介して制御されるテストケース継承 | |
US7984332B2 (en) | Distributed system checker | |
CN101645020A (zh) | 虚拟操作系统创建方法 | |
US20090293073A1 (en) | Automating asynchronous programming in single threaded systems | |
CN103198122B (zh) | 重启内存数据库的方法和装置 | |
CN107766252A (zh) | 测试脚本自动化执行方法、装置、设备以及存储介质 | |
CN104461746B (zh) | 一种基于Android系统的内存空间优化方法及系统 | |
CN105022620B (zh) | 一种基于移动平台的应用软件开发方法 | |
CN105512562B (zh) | 一种漏洞挖掘方法、装置及电子设备 | |
CN101814020A (zh) | 一种基于嵌入式的程序快速执行方法及系统 | |
CN104424030A (zh) | 多进程操作共享内存的方法和装置 | |
US8424107B2 (en) | Selectively exposing base class libraries based on application execution context | |
EP2511820A1 (en) | Bypassing user mode redirection | |
CN103914288B (zh) | 判断控件状态的方法 | |
CN103632099B (zh) | 未导出的Native API函数获取方法及装置 | |
CN103309696B (zh) | 一种Java卡扩展库更新方法、装置和Java卡 | |
CN106708556B (zh) | 数据显示方法及装置 | |
CN114996955A (zh) | 一种云原生混沌工程实验的靶场环境构建方法及装置 | |
CN109657458A (zh) | Ios中保护钥匙串数据的方法、存储介质、设备及系统 | |
CN105630526A (zh) | 脚本的加载控制方法及装置 | |
CN109086173A (zh) | 一种操作系统的设备测试方法、装置和存储介质 | |
CN113672908A (zh) | 定点插桩方法、相关装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 511446 Guangzhou City, Guangdong Province, Panyu District, South Village, Huambo Business District Wanda Plaza, block B1, floor 28 Applicant after: Guangzhou Huaduo Network Technology Co., Ltd. Address before: 510655, Guangzhou, Whampoa Avenue, No. 2, creative industrial park, building 3-08, Applicant before: Guangzhou Huaduo Network Technology Co., Ltd. |
|
COR | Change of bibliographic data | ||
GR01 | Patent grant | ||
GR01 | Patent grant |