1.本发明实施例涉及网络信息安全技术领域,尤其涉及一种恶意代码检测方法、装置、电子设备和存储介质。
背景技术:2.目前,powershell恶意代码的检测方法主要是静态检测方法,通常包含两种。一种是反恶意软件扫描接口(anti-malware scan interface,以下简称“amsi”),是微软从windows 10开始引入的一种机制。powershell会使用amsi.dll的导出函数来扫描用户输入。如果判断这些数据无害,则用户输入数据就会被执行,否则就会阻止执行操作。另一种是通过解混淆进行检测的方法,该方法将执行的表达式进行解混淆,然后匹配特定恶意代码特征库来判断是否是恶意代码。
3.amsi具有一定的防护作用,但是对混淆的恶意代码检出率低,并且绕过amsi的方法已被广泛利用。后者对加密混淆的代码有一定的检出率,然而恶意代码的混淆方式也在不断升级,导致检出率无法满足要求。
技术实现要素:4.基于现有技术的上述情况,本发明实施例的目的在于提供一种恶意代码检测方法、装置、电子设备和存储介质,以提升对于powershell恶意代码的检测能力。
5.为达到上述目的,根据本发明的一个方面,提供了一种恶意代码检测方法,包括:
6.生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;
7.获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑;
8.执行脚本命令时,通过所调用目标函数中的挂钩与恶意代码检测的逻辑判断该脚本命令是否存在恶意代码。
9.进一步的,根据以下步骤生成并加载自定义程序集:
10.采用预设的派生类取代默认的应用程序域管理器以生成所述自定义程序集,所述派生类的初始化部分包含挂钩代码;
11.将所述自定义程序集注册到全局程序集缓存;
12.将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名,以加载所述自定义程序集。
13.进一步的,所述获取目标函数的机器码内存地址包括:
14.获取目标函数所在类类型,以获取该目标函数的句柄;
15.根据该目标函数的句柄编译所述目标函数,以获取该目标函数的机器码内存地址。
16.进一步的,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑包括:
17.根据所获取的目标函数的机器码内存地址,在目标函数处安装挂钩,以使目标函数跳转到预定义的挂钩函数,所述挂钩函数包含对应目标函数的恶意代码检测逻辑;
18.在预定义的跳板函数处安装挂钩,所述跳板函数使得当挂钩函数执行完恶意代码检测后,调回原始的目标函数。
19.进一步的,所述通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,包括:
20.获取输入参数的地址;若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数;
21.或者,
22.通过栈回溯判断目标函数的上层函数是否是具有下载功能的函数,并通过该目标函数的参数获取网络连接的地址;若是,并且该地址不在预设的白名单范围内,则判断为恶意代码;否则,执行调回该目标函数继续执行;
23.或者,
24.获取目标函数的目标字段名称和该目标字段的设置值;若该目标字段的设置值为真,则判定为恶意操作;若否,则继续执行该目标函数;
25.或者,
26.获取目标函数调用的所有api函数;通过对所述所有api函数进行分析以判定是否为恶意操作。
27.根据本发明的第二个方面,提供了一种恶意代码检测装置,包括自定义程序集生成及加载模块、挂钩安装模块和判断模块;其中,
28.所述自定义程序集生成及加载模块,用于生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;
29.所述挂钩安装模块,用于获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑;
30.所述判断模块,用于执行脚本命令时,通过所调用目标函数中的挂钩与恶意代码检测的逻辑判断该脚本命令是否存在恶意代码。
31.进一步的,所述自定义程序集生成及加载模块生成并加载所述自定义程序集,包括:
32.采用预设的派生类取代默认的应用程序域管理器以生成所述自定义程序集,所述派生类的初始化部分包含挂钩代码;
33.将所述自定义程序集注册到全局程序集缓存;
34.将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名,以加载所述自定义程序集。
35.进一步的,所述判断模块通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,包括:
36.获取输入参数的地址;若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数;
37.或者,
38.通过栈回溯判断目标函数的上层函数是否是具有下载功能的函数,并通过该目标
函数的参数获取网络连接的地址;若是,并且该地址不在预设的白名单范围内,则判断为恶意代码;否则,执行调回该目标函数继续执行;
39.或者,
40.获取目标函数的目标字段名称和该目标字段的设置值;若该目标字段的设置值为真,则判定为恶意操作;若否,则继续执行该目标函数;
41.或者,
42.获取目标函数调用的所有api函数;通过对所述所有api函数进行分析以判定是否为恶意操作。
43.根据本发明的第三个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的可执行指令,所述处理器执行所述程序时实现如本发明第一个方面所述的方法。
44.根据本发明的第四个方面,提供了一种计算机可读存储介质,其上存储有计算机可执行指令,所述可执行指令被处理器执行时实现如本发明第一个方面所述的方法。
45.综上所述,本发明实施例提供了一种恶意代码检测方法、装置、电子设备和存储介质,所述检测方法包括:加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩;执行脚本命令时,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码。本发明实施例提供的恶意代码检测方法,检测方式简单、高效,对powershell性能无明显影响,兼容性能好,通过在目标函数中安装挂钩去检测恶意代码,由于此处执行的代码已经完全解混淆,从而可以有效地检出通过混淆逃避检测的恶意代码,准确率高。
附图说明
46.图1是本发明实施例提供的恶意代码检测方法的流程图;
47.图2是本发明实施例提供的恶意代码检测装置的构成框图;
48.图3是本发明实施例提供的电子设备的结构示意图。
具体实施方式
49.为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
50.下面对结合附图对本发明实施例的技术方案进行详细说明。powershell脚本语言的功能在system.management.automation.dll(以下简称sma.dll
“”
)中实现,该模块由c#编写,依赖于.net框架。powershell恶意代码会调用.net框架各个程序集(assembly)中实现的函数去实现。这些函数被称为托管函数。因此,通过对.net框架托管的函数安装挂钩(hook)去检测是否恶意代码是一种行之有效的方法,并且此处执行的代码已经完全解混淆,从而可以有效地检出通过混淆逃避检测的恶意代码。由于程序集是由msil中间语言组成的,在运行前由公共语言运行库(common language runtime,以下简称“clr”)去触发即时编译器jit编译成机器码。clr和java虚拟机一样也是一个运行时环境,它负责资源管理
(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。
51.本发明实施例通过在被即时编译器jit编译成的机器码所在内存地址安装挂钩,以实现对于恶意代码的检测。本发明的实施例中,提供了一种恶意代码检测方法,该检测方法100的流程图如图1所示,包括步骤:
52.s102、加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑。该步骤用于实现基于c#的自定义程序集供clr加载。可以根据以下步骤生成并加载自定义程序集:
53.s1022、采用预设的派生类取代默认的应用程序域管理器,所述派生类的初始化部分包含挂钩代码。例如实现一个基于appdomainmanager的派生类,来取代默认的appdomainmanager,在该派生类的初始化部分调用挂钩的代码。
54.s1024、将所述自定义程序集注册到全局程序集缓存。例如通过gacutil.exe将自定义的程序集添至全局程序集缓存(global assembly cache,简称“gac”),使得目标进程可以在全局程序集缓存取得自定义的程序集。
55.s1026、将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名。例如将powershell进程的环境变量“appdomain_manager_asm”和“appdomain_manager_type”替换为自定义的appdomainmanager的程序集和类型名,以上操作可以实现在powershell启动时,clr加载上述预设的自定义程序集,以执行挂钩代码。
56.s104、获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩。执行安装挂钩首先要获得目标函数的机器码内存地址。反射是一种允许托管程序在运行时访问程序集及其方法、字段的技术,通过该技术可以获取到对应的目标函数句柄。进而采用runtimemethodhandle.getfunctionpointer方法可以获得当前目标函数已被编译的机器码的地址。但在目标函数执行之前,如果目标函数还未编译,也就无法定位对应机器码的内存地址。可以通过runtimehelpers.preparemethod去触发即时编译器jit编译目标函数。本发明实施例中,采用如下步骤获取目标函数的机器码内存地址并安装挂钩:
57.s1042、获取目标函数所在类类型,以获取该目标函数的句柄。
58.s1044、根据该目标函数的句柄编译所述目标函数,以获取该目标函数的机器码内存地址。例如通过调用preparemethod使即时编译器jit编译目标函数,最后通过getfunctionpointer获得目标函数的机器码内存地址。
59.s1046、采用如下步骤安装挂钩:首先定义一个挂钩函数,该函数包含了对应目标函数的恶意代码检测逻辑,然后按以上所述方式获取目标函数的机器码内存地址,在目标函数处通过inline hook方式安装挂钩,使目标函数跳转到挂钩函数。另外定义一个对应的跳板函数,通过以上所述方式在跳板函数安装挂钩,使其调回原始目标函数。当挂钩函数执行完恶意代码检测后,按需调用跳板函数,经由跳板函数调回原始的目标函数,以上完成了安装挂钩的过程。挂钩的目标函数可以为调用频率较高的函数,也可以根据实际需要选择挂钩的目标函数。挂钩的目标函数包括但不限于以下函数:system.net.mail.send
60.system.net.webrequest.create
61.system.net.sockets.tcpclient.getstream
62.system.net.networkinformation.ping.send
63.system.net.sockets.tcpclient.beginconnect
64.system.drawing.graphics.copyfromscreen
65.system.reflection.fieldinfo.setvalue
66.system.runtime.interopservices.marshal.writeint32
67.microsoft.win32.unsafenativemethods.getprocaddress
68.s106、执行脚本命令时,通过所调用目标函数中的挂钩函数判断该脚本命令是否存在恶意代码。即当powershell脚本调用目标函数时,会跳转到挂钩函数,在挂钩函数中实现相应逻辑代码,来判断当前执行的动操作是否恶意。通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,可以如下步骤:
69.s1061、获取输入参数的地址。
70.s1062、若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数。
71.以挂钩system.runtime.interopservices.marshal.writeint32函数为例进行说明:amsi提供amsiscanbuffer函数来检测是否存在恶意代码。当传入的参数amsicontext指向的内存地址起始四字节是“amsi”时,才可以正常调用。恶意代码在绕过amsi时会调用marshal.writeint32函数修改该内存地址的首4个字节,将其改为除“amsi”之外的任意数据。在marshal.writeint32对应的机器码地址挂钩,可通过以下逻辑检测该恶意操作:首先获取到amsicontext结构的地址,amsicontext存在于sma.dll所在的程序集,可采用上文中提到的反射的方式获取。然后进行逻辑判断,如果marshal.writeint32函数要修改的地址与amsicontext的地址相同,并且写入的四字节数据非“amsi”,则判断是绕过amsi的恶意代码,立即上报或阻断该风险。否则,调回原来的marshal.writeint32函数,执行正常功能。
72.根据某些实施例,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,可以通过如下步骤:
73.s1063、通过栈回溯判断目标函数的上层函数是否是具有下载功能的函数,并通过目标函数的参数获取网络连接的地址,其中,该上层函数可以为多级上层函数,该参数例如为所请求的网络地址;
74.s1064、若是,并且该地址不在预设的白名单范围内,则判断为恶意代码;否则,执行调回该目标函数继续执行。
75.以挂钩system.net.webrequest.create函数为例进行说明:恶意代码通常会调用system.net.webclient.downloadstring等函数下载恶意脚本到内存中,进而执行恶意操作,这是一种常见powershell无文件攻击方式。这类函数会调用system.net.webrequest.create来创建网络连接请求,通过以上所述方法在目标函数system.net.webrequest.create对应的机器码地址挂钩,在该函数挂钩的好处是可以检测到所有具有下载功能的函数,而不用在每个具有下载功能的函数都进行挂钩。
76.根据某些实施例,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,还可以通过如下步骤:
77.s1065、获取目标函数的目标字段名称和该目标字段的设置值;
78.s1066、若该目标字段的设置值为真(true),则判定为恶意操作;若否,则继续执行该目标函数。
79.以挂钩system.reflection.fieldinfo.setvalue函数为例进行说明:amsi模块在
初始化时会判断字段“amsiinitfailed”的值,若该字段的值为假,则表明初始化成功。恶意代码绕过amsi保护的另一种方式是通过调用system.reflection.fieldinfo.setvalue将字段“amsiinitfailed”设置为真。那么在函数system.reflection.fieldinfo.setvalue对应的机器码地址挂钩,获取到要设置的字段名称是“amsiinitfailed”并且设置的值为真,则判定是一次恶意操作,立即上报或阻断该恶意操作。
80.根据某些实施例,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,还可以通过如下步骤:
81.s1067、获取目标函数调用的所有api函数;
82.s1068、通过对所述所有api函数进行分析以判定是否为恶意操作。
83.以挂钩microsoft.win32.unsafenativemethods.getprocaddress函数为例进行说明:该函数的功能是获取windows api的函数地址,恶意代码通常会通过该函数获取api函数地址并调用。通过以上所述方法在microsoft.win32.unsafenativemethods.getprocaddress函数对应的机器码地址挂钩,在该函数挂钩可以获取到恶意代码通过此种方式调用windows api的所有api函数,然后分析获取到的api功能来确定是否是恶意操作,例如,如果获取了getasynckeystate与setwindowshookexa的函数地址,则判定为该代码具有键盘记录功能,立即上报该风险。
84.本发明的实施例中,还提供了一种恶意代码检测装置,该检测装置200的构成框图如图2所示,包括自定义程序集生成及加载模块201、挂钩安装模块202和判断模块203;其中,
85.自定义程序集生成及加载模块201,用于生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑。该自定义程序集生成及加载模块201生成并加载所述自定义程序集,包括:
86.采用预设的派生类取代默认的应用程序域管理器以生成所述自定义程序集,所述派生类的初始化部分包含挂钩代码;
87.将所述自定义程序集注册到全局程序集缓存;
88.将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名,以加载所述自定义程序集。
89.挂钩安装模块202,用于获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩。该挂钩安装模块202获取目标函数的机器码内存地址,包括:
90.获取目标函数所在类类型,以获取该目标函数的对象;
91.根据该目标函数的对象编译所述目标函数,通过获取函数指针获得该目标函数的机器码内存地址。
92.判断模块203,用于执行脚本命令时,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码。该判断模块203通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,包括:
93.获取输入参数的地址;
94.若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数。
95.上述恶意代码检测装置200中的各个模块的具体功能和操作已经在上述实施例的
恶意代码检测方法中进行了详细介绍,因此,这里将省略其重复描述。
96.本发明的实施例中,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的可执行指令,所述处理器执行所述程序时实现如本发明上述实施例中所述的方法。图3所示为本技术该实施例提供的电子设备300的结构示意图。如图3所示,该电子设备300包括:一个或多个处理器301和存储器302;以及存储在存储器302中的计算机可执行指令,可执行指令在被处理器301运行时使得处理器301执行如上述实施例的木马检测方法。处理器301可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。存储器302可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器301可以运行程序指令,以实现上文的本发明实施例的木马检测方法中的步骤以及/或者其他期望的功能。在一些实施例中,电子设备300还可以包括:输入装置303和输出装置304,这些组件通过总线系统和/或其他形式的连接机构(图3中未示出)互连。例如,在该电子设备是单机设备时,该输入装置303可以是通信网络连接器,用于从外部的可移动设备接收所采集的输入信号。此外,该输入设备303还可以包括例如键盘、鼠标、麦克风等。该输出装置304可以向外部输出各种信息,例如可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等。
97.本发明的实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明上述实施例中所述的方法中的步骤。计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器((ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
98.应当理解的是,本发明实施例中的处理器可以为中央处理单元(central processing unit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
99.综上所述,本发明实施例涉及一种恶意代码检测方法、装置、电子设备和存储介质,所述检测方法包括:生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑;执行脚本命令时,通过所调用目标函数中的挂钩与恶意代码检测的逻辑判断该脚本命令是否存在恶意代码。本发明实施例提供的恶意代码检测方法,检测方式简单、高效,对powershell性能无明显影响,兼容性能好,通过在目标函数中
安装挂钩去检测恶意代码,由于此处执行的代码已经完全解混淆,从而可以有效地检出通过混淆逃避检测的恶意代码,准确率高。
100.应当理解的是,以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
技术特征:1.一种恶意代码检测方法,其特征在于,包括:生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑;执行脚本命令时,通过所调用目标函数中的挂钩与恶意代码检测的逻辑判断该脚本命令是否存在恶意代码。2.根据权利要求1所述的方法,其特征在于,根据以下步骤生成并加载自定义程序集:采用预设的派生类取代默认的应用程序域管理器以生成所述自定义程序集,所述派生类的初始化部分包含挂钩代码;将所述自定义程序集注册到全局程序集缓存;将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名,以加载所述自定义程序集。3.根据权利要求2所述的方法,其特征在于,所述获取目标函数的机器码内存地址包括:获取目标函数所在类类型,以获取该目标函数的句柄;根据该目标函数的句柄编译所述目标函数,以获取该目标函数的机器码内存地址。4.根据权利要求3所述的方法,其特征在于,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑包括:根据所获取的目标函数的机器码内存地址,在目标函数处安装挂钩,以使目标函数跳转到预定义的挂钩函数,所述挂钩函数包含对应目标函数的恶意代码检测逻辑;在预定义的跳板函数处安装挂钩,所述跳板函数使得当挂钩函数执行完恶意代码检测后,调回原始的目标函数。5.根据权利要求4所述的方法,其特征在于,所述通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,包括:获取输入参数的地址;若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数;或者,通过栈回溯判断目标函数的上层函数是否是具有下载功能的函数,并通过该目标函数的参数获取网络连接的地址;若是,并且该地址不在预设的白名单范围内,则判断为恶意代码;否则,执行调回该目标函数继续执行;或者,获取目标函数的目标字段名称和该目标字段的设置值;若该目标字段的设置值为真,则判定为恶意操作;若否,则继续执行该目标函数;或者,获取目标函数调用的所有api函数;通过对所述所有api函数进行分析以判定是否为恶意操作。6.一种恶意代码检测装置,其特征在于,包括自定义程序集生成及加载模块、挂钩安装模块和判断模块;其中,
所述自定义程序集生成及加载模块,用于生成并加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;所述挂钩安装模块,用于获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩与恶意代码检测的逻辑;所述判断模块,用于执行脚本命令时,通过所调用目标函数中的挂钩与恶意代码检测的逻辑判断该脚本命令是否存在恶意代码。7.根据权利要求6所述的装置,其特征在于,所述自定义程序集生成及加载模块生成并加载所述自定义程序集,包括:采用预设的派生类取代默认的应用程序域管理器以生成所述自定义程序集,所述派生类的初始化部分包含挂钩代码;将所述自定义程序集注册到全局程序集缓存;将目标进程的第一环境变量和第二环境变量设置为所述派生类的程序集和类型名,以加载所述自定义程序集。8.根据权利要求7所述的装置,其特征在于,所述判断模块通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码,包括:获取输入参数的地址;若所调用目标函数待修改的地址与输入参数的地址相同,并且写入字节数据并非预设的字节数据,则判断为恶意代码;否则,执行该目标函数;或者,通过栈回溯判断目标函数的上层函数是否是具有下载功能的函数,并通过该目标函数的参数获取网络连接的地址;若是,并且该地址不在预设的白名单范围内,则判断为恶意代码;否则,执行调回该目标函数继续执行;或者,获取目标函数的目标字段名称和该目标字段的设置值;若该目标字段的设置值为真,则判定为恶意操作;若否,则继续执行该目标函数;或者,获取目标函数调用的所有api函数;通过对所述所有api函数进行分析以判定是否为恶意操作。9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的可执行指令,其特征在于,所述处理器执行所述程序时实现如权利要求1-5中任一项所述的方法。10.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1-5中任一项所述的方法。
技术总结本发明实施例涉及一种恶意代码检测方法、装置、电子设备和存储介质,所述检测方法包括:加载预设的自定义程序集,所述自定义程序集中包括安装挂钩与恶意代码检测的逻辑;获取目标函数的机器码内存地址,根据所述机器码内存地址安装所述挂钩;执行脚本命令时,通过所调用目标函数中的挂钩判断该脚本命令是否存在恶意代码。本发明实施例提供的恶意代码检测方法,检测方式简单、高效,对PowerShell性能无明显影响,兼容性能好,并且执行挂钩的目标函数时,代码已经完全解混淆,从而可以有效地检出通过混淆逃避检测的恶意代码,准确率高。准确率高。准确率高。
技术研发人员:纪兴柱
受保护的技术使用者:安芯网盾(北京)科技有限公司
技术研发日:2022.03.21
技术公布日:2022/7/5