知识点
多数恶意代码运行在Windows上,因此对Windows变成概念的深刻理解会帮助我们识别出恶意代码在主机上感染的迹象,本章会介绍一些恶意代码使用Windows功能的独特方式,并且会讨论恶意代码是如何使用内核模式来实现额外功能与自身隐藏的。
**Windows API:**Windows API是一个广泛的功能集合,管理着恶意代码与微软程序库之间的交互方式,Windows API使用他自己的名字。例如DWORD和WORD类型分别标识32位与16位无符号整数。标准C类型如int、short等通常并不使用。Windows总体上使用匈牙利表达法,作为API函数的标识符,这个表达式使用一个前缀命名,如32位无符号整数变量会以dw开头。
类型和前缀 | 描述 |
---|---|
WORD (w) | 一个16位的无符号数值 |
DWORD (dw) | 一个双字节、32位的无符号数值 |
Handles (H) | 一个对象索引,句柄中存储的信息并没有文档化,而这一句句柄应该只被Windows API来操作。 |
Long Pointer (L) | 一个指向零一类型的指针,例如LPByte是指向字节的指针,LPCSTR是一个执行字符串的指针,字符串通常是由LP作为前缀的,因为他们实际上是指针。偶尔也会看到Pointer(P)而不是LP作为另一类型的前缀,在32位系统里,他们和LP是一样的。 |
Callback | 表示一个会被Windows API调用的函数。 |
**句柄:**句柄是在此操作系统中被打开或者被创建的项,句柄应用对象或者地址的情况很像指针你,但是与指针不同,不能用于数学操作。
**文件系统函数:**微软提供了多个函数来访问文件系统
函数 | 描述 |
---|---|
CreateFile | 这个函数被用来创建或者打开文件。它可以打开已经存在的文件,管道,流以及IO设备,还能创建新的文件。 |
ReadFile WriteFile | 这些函数被用来对文件进行读和写。 |
CreateFileMapping MapViewOfFile | 文件映射经常被恶意代码作者使用,因为他们允许将一个文件加载到内存中,以便操作简单,CreateFileMapping函数负责从磁盘上加载一个文件到内存中,MapViewOfFile函数则返回一个指向映射的基地址指针,在文件中的任意位置进行读取和写入。 |
**特殊文件:**Windows中有一些特殊的文件无法通过盘符和文件夹访问,但是这些文件可能提供对系统硬件和内部数据更强的访问能力,特殊文件可以作为字符串参数传递给热河文件操作函数,并像普通文件一样进行操作,有如下特殊文件类型:
特殊文件类型 | 描述 |
---|---|
共享文件 | 共享文件是以\\serverName\share 或\\?\servername\share 开头命名的特殊文件他们用来访问保存在共享目录中的目录或文件。\\?\ 前缀告诉操作系统禁用所有的字符串解析并允许访问长文件名。 |
通过名字空间访问 | 名字空间可以被认为是固定数目的文件夹,每一个文件夹中八平村不同类型的对象。底层的名字空间是NT名字空间,以前缀\ 开始。以前缀\\.\ 开始的Win32设备名字空间,可以被恶意代码用来访问物理设备,并且像一个文件进行读写操作。例如恶意代码使用\Device\PhysicalMemory 来直接访问物理内存,这允许用户空间程序写到内核空间中。这个技术已经被恶意代码用来修改内核,并隐藏用户空间的程序。</ |