恶意样本分析手册——API函数篇

本文档详细介绍了恶意样本分析中涉及的API函数,包括文件操作如kernel32!CreateFile,网络通信如ws2_32!socket,注册表和服务管理如advapi32!CreateService,以及进程线程控制如kernel32!CreateProcess等关键函数。
摘要由CSDN通过智能技术生成
文件类、网络类、注册表与服务类、进程线程类、注入类、驱动类、加密与解密、消息传递等各种类别恶意样本分析。


 
 

文件类

kernel32!CreateFile

功能:这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道 函数原型: HANDLE WINAPI CreateFile( _In_ LPCTSTR lpFileName, _In_ DWORD dwDesiredAccess, _In_ DWORD dwShareMode, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _In_ DWORD dwCreationDisposition, _In_ DWORD dwFlagsAndAttributes, _In_opt_ HANDLE hTemplateFile );   参数介绍: lpFileName要打开的文件的名或设备名。这个字符串的最大长度在ANSI版本中为MAX_PATH,在unicode版本中为32767。 dwDesiredAccess指定类型的访问对象。如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息 dwShareMode, 如果是零表示不共享; 如果是FILE_SHARE_DELETE表示随后打开操作对象会成功只要删除访问请求;如果是FILE_SHARE_READ随后打开操作对象会成功只有请求读访问;如果是FILE_SHARE_WRITE 随后打开操作对象会成功只有请求写访问。 lpSecurityAttributes, 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话) dwCreationDisposition创建配置 dwFlagsAndAttributes扩展属性 hTemplateFile,hTemplateFile为一个文件或设备句柄,表示按这个参数给出的句柄为模板创建文件(就是将该句柄文件拷贝到lpFileName指定的路径,然后再打开)。它将指定该文件的属性扩展到新创建的文件上面,这个参数可用于将某个新文件的属性设置成与现有文件一样,并且这样会忽略dwAttrsAndFlags。通常这个参数设置为NULL,为空表示不使用模板,一般为空。 备注:

kernel32!CreateFileMapping

功能:创建一个新的文件映射内核对象。 函数原型: HANDLE WINAPI CreateFileMapping( _In_HANDLE hFile, _In_opt_LPSECURITY_ATTRIBUTES lpAttributes, _In_DWORD flProtect, _In_DWORD dwMaximumSizeHigh, _In_DWORD dwMaximumSizeLow, _In_opt_LPCTSTR lpName); 参数介绍: hFile:Long,指定欲在其中创建映射的一个文件句柄。0xFFFFFFFF(-1,即INVALID_HANDLE_VALUE)表示在页面文件中创建一个可共享的文件映射。 lpFileMappigAttributes:SECURITY_ATTRIBUTES,它指明返回的句柄是否可以被子进程所继承,指定一个安全对象,在创建文件映射时使用。如果为NULL(用ByVal As Long传递零),表示使用默认安全对象。 结构体类型如下:保存对象的安全属性 typedef struct _SECURITY_ATTRIBUTES { DWORD  nLength; LPVOID lpSecurityDescriptor; BOOL   bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; flProtect:保护属性设置 dwMaximumSizeHigh:Long,文件映射的最大长度的高32位。 dwMaximumSizeLow:Long,文件映射的最大长度的低32位。如这个参数和dwMaximumSizeHigh都是零,就用磁盘文件的实际长度。 lpName:String,指定文件映射对象的名字。如存在这个名字的一个映射,函数就会打开它。用vbNullString可以创建一个无名的文件映射。 返回值: Long,新建文件映射对象的句柄;零意味着出错。会设置GetLastError。即使函数成功,但倘若返回的句柄属于一个现成的文件映射对象,那么GetLastError也会设置成ERROR_ALREADY_EXISTS。在这种情况下,文件映射的长度就是现有对象的长度,而不是这个函数指定的尺寸。 备注: 创建一个映射到文件的句柄,将文件装载到内存,并使得他可以通过内存地址进行访问。启动器,装载器和注入器会使用这个函数来读取和修改PE文件。

kernel32.OpenFile

功能: 用于打开文件的 函数原型: HFILE WINAPI OpenFile( _In_  LPCSTR     lpFileName, _Out_ LPOFSTRUCT lpReOpenBuff, _In_  UINT       uStyle ); 参数介绍:(参数与返回值) lpFileName:文件名 lpReOpenBuff:变量指针,用于存储文件被首次打开时接收信息 uStyle:打开文件的常量类型 成功返回打开的文件句柄,失败返回HFILE_ERROR

kernel32!FindFirstFile

功能:根据文件名查找文件。该函数到一个文件夹(包括子文件夹)去搜索指定文件 函数原型: HANDLE FindFirstFile( LPCTSTR lpFileName,//filename LPWIN32_FIND_DATA lpFindFileData//databuffer ); 参数介绍: LPCTSTR lpFileName文件名(包括路径) LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体 结构体声明如下: typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes;     //文件属性 FILETIME ftCreationTime;    // 文件创建时间 FILETIME ftLastAccessTime; // 文件最后一次访问时间 FILETIME ftLastWriteTime;  // 文件最后一次修改时间 DWORD nFileSizeHigh;        // 文件长度高32位 DWORD nFileSizeLow;        // 文件长度低32位 DWORD dwReserved0;          // 系统保留 DWORD dwReserved1;          // 系统保留 TCHAR cFileName[ MAX_PATH ]; // 长文件名 TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名 } WIN32_FIND_DATA, *PWIN32_FIND_DATA; 返回值: 如果调用成功返回一个句柄,可用来做为FindNextFile或 FindClose参数 调用失败 返回为INVALID_HANDLE_VALUE(即-1) ,可调用GetLastError来获取错误信息 备注:用来搜索文件目录和枚举文件系统的函数

kernel32!FindNextFile

功能:可以用来遍历目录或文件时,判断当前目录下是否有下一个目录或文件。 函数原型: BOOLFindNextFile( HANDLE hFindFile, //searchhandle LPWIN32_FIND_DATA lpFindFileData //databuffer ); 参数介绍: HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件 LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体 返回值: 非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES 备注:用来搜索文件目录和枚举文件系统的函数

kernel32!GetModuleFileName

功能:获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。 函数原型: DWORD WINAPI GetModuleFileName( _In_opt_  HMODULE hModule, _Out_     LPTSTR lpFilename, _In_      DWORD nSize ); 参数介绍: hModule 一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL, 该函数返回该应用程序全路径。 lpFileName 指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的 nSize 装载到缓冲区lpFileName的最大字符数量 返回值:Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败 备注:返回目前进程装载某个模块的文件名,恶意代码可以使用这个函数,在目前运行进程中修改或复制文件

kernel32!GetModuleHandle

功能:获取一个应用程序或动态链接库的模块句柄。 函数原型:HMODULEGetModuleHandle(LPCTSTRlpModuleName); 参数介绍:lpModuleName 模块名称 返回值:如执行成功成功,则返回模块句柄。零表示失败 备注:用来获取已装载模块句柄的函数,恶意代码可以使用此函数在一个装载模块中定位和修改代码,或者搜索一个合适位置来注入代码。

kernel32!GetProcAddress

功能:检索指定的动态链接库(DLL)中的输出库函数地址。 函数原型: FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName ); 参数介绍: hModule [in] 包含此函数的DLL模块的句柄。LoadLibrary、AfxLoadLibrary 或者GetModuleHandle函数可以返回此句柄。 lpProcName [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。 返回值: 如果函数调用成功,返回值是DLL中的输出函数地址。 如果函数调用失败,返回值是NULL。 备注:获取装载到内存中一个DLL程序的函数地址。用来从其他DLL程序中导入函数,以补充在PE文件头部中导入的函数。

kernel32!GetStartupInfo

功能:取得进程在启动时被指定的 STARTUPINFO 结构。 函数原型: VOID GetStartupInfo( LPSTARTUPINFO lpStartupInfo); 参数介绍: lpStartupInfo一个指向用来存放要获取的 STARTUPINFO 结构的指针。 结构体声明如下: typedef struct _STARTUPINFO { DWORD cb; //包含STARTUPINFO结构中的字节数 LPTSTR lpReserved; //保留。必须初始化为N U L L LPTSTR lpDesktop; //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。如果lpDesktop是NULL(这是最常见的情况),那么该进程将与当前桌面相关联 LPTSTR lpTitle; //用于设定控制台窗口的名称。如果l p Ti t l e 是N U L L ,则可执行文件的名字将用作窗口名 DWORD dwX; //用于设定应用程序窗口在屏幕上应该放置的位置的x 和y 坐标(以像素为单位)。 DWORD dwY;// 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠窗口时,才使用这两个坐标。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角 DWORD dwXSize; //用于设定应用程序窗口的宽度和长度(以像素为单位)只有wYsize DWORD dwYSize;// 当子进程将CW_USEDEFAULT用作CreateWindow的nWidth参数来创建它的第一个重叠窗口时,才使用这些值。 DWORD dwXCountChars; //用于设定子应用程序的控制台窗口的宽度和高度(以字符为单位) DWORD dwYCountChars; DWORD dwFillAttribute; //用于设定子应用程序的控制台窗口使用的文本和背景颜色 DWORD dwFlags; WORD wShowWindow; WORD cbReserved2; //保留。必须被初始化为0 LPBYTE lpReserved2; //保留。必须被初始化为NULL HANDLE hStdInput; //用于设定供控制台输入和输出用的缓存的句柄。 HANDLE hStdOutput;// 用于标识控制台窗口的缓存 HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO; 返回值:无 备注:获取一个包含当前进程如何自动运行配置信息的结构,比如标准句柄指向哪些位置。

kernel32!GetTempPath

功能:获取为临时文件指定的路径 函数原型: DWORD WINAPI GetTempPath(  _In_  DWORD  nBufferLength,  _Out_ LPTSTR lpBuffer); 参数介绍: nBufferLength:表示lpBuffer的大小 lpBuffer:接收路径的一块内存 返回值:如果成功,返回lpBuffer的长度,失败返回0 备注:返回临时文件路径,如果看到恶意代码使用了这个函数,需要检查他是否在临时文件路径中读取或写入了一些文件。

kernel32!GetWindowsDirectory

功能:获取Windows目录的完整路径名。 函数原型:UINTGetWindowsDirectory(LPTSTR lpBuffer,UINT uSize) 参数介绍: lpBuffer,指定一个字串缓冲区,用于装载Windows目录名。除非是根目录,否则目录中不会有一个中止用的“\”字符 nSize,lpBuffer字串的最大长度 返回值:复制到lpBuffer的一个字串的长度。如lpBuffer不够大,不能容下整个字串,就会返回lpBuffer要求的长度,零表示失败 备注:返回Windows目录的文件系统路径,恶意代码经常使用这个函数来确定将其他恶意程序安装到哪个目录。

kernel32!MapViewOfFile

功能:将一个文件映射对象映射到当前应用程序的地址空间 函数原型: LPVOID WINAPI MapViewOfFile(   __in HANDLE hFileMappingObject,   __in DWORD dwDesiredAccess,    __in DWORD dwFileOffsetHigh,   __in DWORD dwFileOffsetLow,   __in SIZE_T dwNumberOfBytesToMap   ); 参数介绍: hFileMappingObject:hFileMappingObject 为CreateFileMapping()返回的文件映像对象句柄。 dwDesiredAccess:dwDesiredAccess 映射对象的文件数据的访问方式,而且同样要与CreateFileMapping()函数所设置的保护属性相匹配。 dwFileOffsetHigh:dwFileOffsetHigh 表示文件映射起始偏移的高32位. dwFileOffsetLow:dwFileOffsetLow 表示文件映射起始偏移的低32位.(64KB对齐不是必须的) dwNumberOfBytesToMap:dwNumberOfBytes 指定映射文件的字节数. 返回值: 如果成功,则返回映射视图文件的开始地址值.如果失败,则返回 NULL 备注:映射一个文件到内存,将文件内容变得通过内存地址可访问。启动器,装载器和注入器使用这个函数来读取和修改PE文件。通过使用此函数,恶意代码可以避免使用WriteFile来修改文件内容。

NtosKrnl!NtQueryDirectoryFile

功能:返回多种指定的文件信息 函数原型: NTSTATUS    ZwQueryDirectoryFile(     __in HANDLE  FileHandle,     __in_opt HANDLE  Event,     __in_opt PIO_APC_ROUTINE  ApcRoutine,     __in_opt PVOID  ApcContext,     __out PIO_STATUS_BLOCK  IoStatusBlock,     __out PVOID  FileInformation,     __in ULONG  Length,     __in FILE_INFORMATION_CLASS  FileInformationClass,     __in BOOLEAN  ReturnSingleEntry,     __in_opt PUNICODE_STRING  FileName,     __in BOOLEAN  RestartScan     ); 参数介绍: FileHandle:ZwCreateFile和ZwOpenFile返回的句柄,代表着被查询信息的文件夹 Event:调用者创建的一个可选的事件句柄。 ApcRoutine:调用者提供的一个APC例程,当操作完成时,调用此例程。 ApcContext:如果调用者提供了APC例程,则此参数位APC例程的上下文 IoStatusBlock:指向IO_STATUS_BLOCK结构体,返回操作的完成状态和信息。 结构体声明如下: typedef struct _IO_STATUS_BLOCK { union { NTSTATUS Status; PVOID Pointer; }; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; Status是请求被处理的状态,如果被成功的处理,则为STATUS_SUCCESS ,其他情况为STATUS_XXX Information如果处理成功,Information表示处理的字节数,如果处理失败,此值为0。 FileInformation:接收文件的特定的信息 结构体声明如下: typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, FileFullDirectoryInformation = 2, FileBothDirectoryInformation = 3, FileBasicInformation = 4, FileStandardInformation = 5, FileInternalInformation = 6, FileEaInformation = 7, FileAccessInformation = 8, FileNameInformation = 9, FileRenameInformation = 10, FileLinkInformation = 11, FileNamesInformation = 12, FileDispositionInformation = 13, FilePositionInformation = 14, FileFullEaInformation = 15, FileModeInformation = 16, FileAlignmentInformation = 17, FileAllInformation = 18, FileAllocationInformation = 19, FileEndOfFileInformation = 20, FileAlternateNameInformation = 21, FileStreamInformation = 22, FilePipeInformation = 23, FilePipeLocalInformation = 24, FilePipeRemoteInformation = 25, FileMailslotQueryInformation = 26, FileMailslotSetInformation = 27, FileCompressionInformation = 28, FileObjectIdInformation = 29, FileCompletionInformation = 30, FileMoveClusterInformation = 31, FileQuotaInformation = 32, FileReparsePointInformation = 33, FileNetworkOpenInformation = 34, FileAttributeTagInformation = 35, FileTrackingInformation = 36, FileIdBothDirectoryInformation = 37, FileIdFullDirectoryInformation = 38, FileValidDataLengthInformation = 39, FileShortNameInformation = 40, FileIoCompletionNotificationInformation = 41, FileIoStatusBlockRangeInformation = 42, FileIoPriorityHintInformation = 43, FileSfioReserveInformation = 44, FileSfioVolumeInformation = 45, FileHardLinkInformation = 46, FileProcessIdsUsingFileInformation = 47, FileNormalizedNameInformation = 48, FileNetworkPhysicalNameInformation = 49, FileMaximumInformation = 50 } FILE_INFORMATION_CLASS; Length:FileInformation信息的长度。 FileInformationClass:需要返回的文件夹信息的类型。 ReturnSingleEntry:如果要返回单一入口,就将此值设为TRUE,否则设为FALSE。 FileName:调用者申请的文件名 RestartScan:如果第一次访问文件夹,将此参数设为TRUE,否则设为FALSE。 返回值:成功返回STATUS_SUCCESS,失败返回错误码 备注:返回一个目录中文件的信息,内核套件普遍会挂钩这个函数来隐藏文件。

kernel32!SetFileTime

功能:设置文件的创建、访问及上次修改时间 函数原型: BOOL WINAPI SetFileTime(  _In_           HANDLE   hFile,  _In_opt_ const FILETIME *lpCreationTime,  _In_opt_ const FILETIME *lpLastAccessTime,  _In_opt_ const FILETIME *lpLastWriteTime); 参数介绍: hFile Long,系统文件句柄  lpCreationTime FILETIME,文件的创建时间  lpLastAccessTime FILETIME,文件上一次访问的时间  lpLastWriteTime FILETIME,文件最近一次修改的时间 返回值:非零表示成功,零表示失败 备注:修改一个文件的创建,访问或者最后修改时间,恶意代码经常使用这个函数来隐藏恶意行为。

kernel32!Wow64DisableWow64FsRedirection

功能:禁用文件系统重定向机制 函数原型: BOOL WINAPI Wow64DisableWow64FsRedirection(  _Out_ PVOID *OldValue); 参数介绍:OldValue:Wow64文件系统重定向值 返回值:成功返回非0,失败返回0. 备注:禁用32为文件在64位操作系统中装载后发生的文件重定向机制,如果一个32位应用程序在调用这个函数后向C:\Windows\System32写数据,那么它将会直接写到真正的C:\Windows\System32,而不是被重定向至C:\Windows\SysWOW64

网络类

ws2_32!socket

功能:用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议protocol未指定(等于0),则使用缺省的连接方式 函数原型:int socket( int af, int type, int protocol); 参数介绍:(参数与返回值) af:一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。 type:指定socket类型。新套接口的类型描述类型,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。 protocol:顾名思义,就是指定协议。套接口所用的协议。如调用者不想指定,可用0。常用的协议有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。 若无错误发生,socket()返回引用新套接口的描述字。否则的话,返回INVALID_SOCKET错误,应用程序可通过WSAGetLastError()获取相应错误代码

ws2_32!accept

功能:用来监听入站网络连接,此函数预示着程序会在一个套接字上监听入站网络连接。 函数原型: int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 参数介绍: sockfd:套接字描述符,该套接口在listen()后监听连接。 addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。 结构体声明如下: struct sockaddr {   unsigned short sa_family; /* 地址家族, AF_xxx */   char sa_data[14]; /* 14字节的协议地址 */   }; sa_family :是2字节的地址家族,一般都是“AF_xxx”的形式,它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC。 addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。 返回值:如果没有错误产生,则accept()返回一个描述所接受包的SOCKET类型的值。否则的话,返回INVALID_SOCKET错误,应用程序可通过调用WSAGetLastError()来获得特定的错误代码。 addrlen所指的整形数初始时包含addr所指地址空间的大小,在返回时它包含实际返回地址的字节长度。

ws2_32!bind

功能:将一本地地址与一套接口捆绑 函数原型: int bind(int sockfd,const struct sockaddr *addr,socklen_t *addrlen); 参数介绍: sockfd:已经建立的socket编号(描述符) addr:  是一个指向sockaddr结构体类型的指针; addrlen: 表示addr结构的长度 返回值:成功返回0,失败返回-1 备注:

ws2_32!connect

功能:用来将参数sockfd 的socket 连至参数serv_addr 指定的网络地址 函数原型: int connect (int sockfd, struct sockaddr * serv_addr, int addrlen); 参数介绍: Sockfd:套接字描述符 serv_addr:指向数据结构sockaddr的指针,其中包括目的端口和IP地址 addrlen:参数二sockaddr的长度,可以通过sizeof(struct sockaddr)获得 返回值:成功则返回0,失败返回非0,错误码GetLastError()。 备注:用来连接一个远程套接字。恶意代码经常使用底层功能函数来连接一个命令控制服务器。

wininet.InternetOpenA

功能:初始化一个应用程序,以使用 WinINet 函数 函数原型: HINTERNET InternetOpen( _In_ LPCTSTR lpszAgent, _In_ DWORD dwAccessType, _In_ LPCTSTR lpszProxyName, _In_ LPCTSTR lpszProxyBypass, _In_ DWORD dwFlags ); 参数介绍: lpszAgent:指向一个空结束的字符串,该字符串指定调用WinInet函数的应用程序或实体的名称。使用此名称作为用户代理的HTTP协议。 dwAccessType:指定访问类型 lpszProxyName:指针指向一个空结束的字符串,该字符串指定的代理服务器的名称,不要使用空字符串;如果dwAccessType未设置为INTERNET_OPEN_TYPE_PROXY,则此参数应该设置为NULL。 lpszProxyBypass:指向一个空结束的字符串,该字符串指定的可选列表的主机名或IP地址。如果dwAccessType未设置为INTERNET_OPEN_TYPE_PROXY的 ,参数省略则为NULL。 dwFlags:参数可以是下列值的组合: INTERNET_FLAG_ASYNC:使异步请求处理的后裔从这个函数返回的句柄 INTERNET_FLAG_FROM_CACHE:不进行网络请求,从缓存返回的所有实体,如果请求的项目不在缓存中,则返回一个合适的错误,如ERROR_FILE_NOT_FOUND。 INTERNET_FLAG_OFFLINE:不进行网络请求,从缓存返回的所有实体,如果请求的项目不在缓存中,则返回一个合适的错误,如ERROR_FILE_NOT_FOUND。 返回值:成功:返回一个有效的句柄,该句柄将由应用程序传递给接下来的WinINet函数。 失败:返回NULL。 备注:该函数是第一个由应用程序调用的 WinINet 函数。它告诉 Internet DLL 初始化内部数据结构并准备接收应用程序之后的其他调用。当应用程序结束使用 Internet 函数时,应调用 InternetCloseHandle 函数来释放与之相关的资源。 应用程序可以对该函数进行任意次数的调用,不过在一般情况下一次调用就已经足够了。如果要调用多次该函数,应用程序则有必要定义独立的函数实例的行为,诸如不同的代理服务器等。

ole32!CoCreateInstance

功能:用指定的类标识符创建一个Com对象,用指定的类标识符创建一个未初始化的对象 函数原型: STDAPI CoCreateInstance( REFCLSID rclsid, //创建的Com对象的类标识符(CLSID) LPUNKNOWN pUnkOuter, //指向接口IUnknown的指针 DWORD dwClsContext, //运行可执行代码的上下文 REFIID riid, //创建的Com对象的接口标识符 LPVOID * ppv //用来接收指向Com对象接口地址的指针变量 ); 参数说明: rclsid [in] 用来唯一标识一个对象的CLSID(128位),需要用它来创建指定对象。 pUnkOuter [in] 如果为NULL, 表明此对象不是聚合式对象一部分。如果不是NULL, 则指针指向一个聚合式对象的IUnknown接口。 dwClsContext [in] 组件类别. 可使用CLSCTX枚举器中预定义的值. riid [in] 引用接口标识符,用来与对象通信。 ppv [out] 用来接收指向接口地址的指针变量。如果函数调用成功,*ppv包括请求的接口指针。 返回值: S_OK:指定的Com对象实例被成功创建。 REGDB_E_CLASSNOTREG:指定的类没有在注册表中注册. 也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏 CLASS_E_NOAGGREGATION:这个类不能创建为聚合型。 E_NOINTERFACE:指定的类没有实现请求的接口, 或者是IUnknown接口没有暴露请求的接口. 备注:创建一个COM对象,COM对象提供了非常多样化的功能。类标识(CLSID)会告诉你哪个文件包含着实现COM对象的代码。

wininet!FtpPutFile

功能:将本地文件上传到FTP服务器 函数原型: BOOL WINAPI FtpPutFile( HINTERNET hConnect, LPCTSTR lpszLocalFile, LPCTSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext);   参数介绍: hConnect: FTP会话句柄 lpszLocalFile本地文件路径 lpszNewRemoteFile上传到ftp服务器的文件保存路径 dwFlags指示文件上传的条件 dwContext指定应用数据该搜索相关联的应用程序定义的值。此参数仅当应用程序已调用InternetSetStatusCallback成立一个状态回调。所有的状态请求都得到同步处理。 返回值:TRUE表示成功,FALSE表示失败 备注:一个高层次上的函数,用来向一个远程FTP服务器上传文件。

Iphlpapi!GetAdaptersInfo

功能:获取网卡详细信息 函数原型: DWORD GetAdaptersInfo( _Out_   PIP_ADAPTER_INFO pAdapterInfo, _Inout_ PULONG           pOutBufLen ); 参数介绍: pAdapterInfo:一个缓冲区的指针,用来接收 IP_ADAPTER_INFO结构的信息。 结构体声明如下: typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next;//指向链表中下一个适配器信息的指针 DWORD ComboIndex;//预留值 char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//适配器名称 char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//适配器描述 UINT AddressLength;//适配器硬件地址以字节计算的长度 BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//硬件地址以BYTE数组所表示 DWORD Index;//适配器索引 UINT Type;//适配器类型 UINT DhcpEnabled;//指定这个适配器是否开启DHCP PIP_ADDR_STRING CurrentIpAddress;//预留值 IP_ADDR_STRING IpAddressList;//该适配器的IPv4地址链表 IP_ADDR_STRING GatewayList;//该适配器的网关IPv4地址链表 IP_ADDR_STRING DhcpServer;//该适配器的DHCP服务器的IPv4 地址链表 BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO,*PIP_ADAPTER_INFO; pOutBufLen:表示pAdapterInfo的大小 返回值:成功返回ERROR_SUCCESS,其他表示失败 备注:用来获取系统上网络适配器的相关信息。后门程序有时会调用此函数来取得关于受感染主机的摘要信息。在某些情况下,这个函数也会被使用来取得主机的MAC地址,在对抗虚拟机技术中用来检测VMware等虚拟机。

Ws2_32!gethostbyname

功能:返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针 函数原型: struct hostent *gethostbyname(const char *name); 参数介绍: name:指向主机名的指针。 返回值:如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针 结构体声明如下: struct hostent{ char * h_name;// 地址的正式名称。 char ** h_aliases;// 空字节-地址的预备名称的指针。 short h_addrtype;// 地址类型; 通常是AF_INET。 short h_length;// 地址的比特长度。 char ** h_addr_list;// 零字节-主机网络地址指针。网络字节顺序。 }; 备注:在向一个远程主机发起IP连接之前,用来对一个特定域名执行一次DNS查询,作为命令控制服务器的域名通常可以用来创建很好的网络监测特征码

ws2_32!gethostname

功能:返回本地主机的标准主机名。 函数原型:int PASCAL FAR gethostname(char FAR *name, int namelen); 参数介绍: name: 一个指向将要存放主机名的缓冲区指针。 namelen:缓冲区的长度。 返回值:如果没有错误发生,gethostname()返回0。否则它返回SOCKET_ERROR 备注:获取计算机主机名。后门程序经常使用此函数来获取受害主机的摘要信息

ws2_32!inet_addr

功能:将一个点分十进制的IP转换成一个长整数型数 函数原型:in_addr_t inet_addr(const char* strptr); 参数介绍:strptr:字符串,一个点分十进制的IP地址 返回值:如果正确执行将返回一个无符号长整数型数。如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE。 备注:将一个IP地址字符串,如127.0.0.1,进行转化,使其能够在如connect等函数中使用。这些字符串有时也可以用作基于网络的特征码。

wininet!InternetOpen

功能:初始化一个应用程序,以使用 WinINet 函数。 函数原型: HINTERNET InternetOpen( _In_ LPCTSTR lpszAgent, _In_ DWORD dwAccessType, _In_ LPCTSTR lpszProxyName, _In_ LPCTSTR lpszProxyBypass, _In_ DWORD dwFlags ); 参数介绍: lpszAgent 指向一个空结束的字符串,该字符串指定的应用程序或实体调用WinInet函数的名称。使用此名称作为用户代理的HTTP协议。 dwAccessType 指定访问类型 lpszProxyName 指针指向一个空结束的字符串,该字符串指定的代理服务器的名称,不要使用空字符串;如果dwAccessType
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值