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未设置为INTERNET_OPEN_TYPE_PROXY,则此参数应该设置为NULL。
lpszProxyBypass 指向一个空结束的字符串,该字符串指定的可选列表的主机名或IP地址。如果dwAccessType未设置为INTERNET_OPEN_TYPE_PROXY的 ,参数省略则为NULL。
dwFlags:网络选项标志位
返回值:
成功:返回一个有效的句柄,该句柄将由应用程序传递给接下来的WinINet函数。
失败:返回NULL。
备注:
初始化WinINet中的一些高层次互联网访问函数,搜索此函数是找到互联网访问功能初始位置的一个好方法。该函数的一个参数是User-Agent,有时也可以作为基于网络的特征码。
wininet!InternetOpenUrl
功能:通过一个完整的FTP,Gopher或HTTP网址打开一个资源
函数原型:
HINTERNET InternetOpenUrl(
HINTERNET hInternetSession,
LPCTSTR lpszUrl,
LPCTSTR lpszHeaders,
DWORD dwHeadersLength,
DWORD dwFlags,
DWORD dwContext
);
参数介绍:
hInternet 当前的 Internet 会话句柄。句柄必须由前期的 InternetOpen 调用返回。
lpszUrl 一个空字符结束的字符串变量的指针,指定读取的网址。只有以ftp:, gopher:, http:, 或者 https: 开头的网址被支持。
lpszHeaders 一个空字符结束的字符串变量的指针,指定发送到HTTP服务器的头信息。欲了解更多信息,请参阅HttpSendRequest函数里lpszHeaders参数的说明。
dwHeadersLength:lpszHeaders的长度。
dwFlags:行为标志的位掩码
dwContext 一个指向一个应用程序定义的值,将随着返回的句柄,一起传递给回调函数
返回值:
如果已成功建立到FTP,Gopher,或HTTP URL的连接,返回一个有效的句柄,如果连接失败返回NULL。
备注:
使用FTP,HTTP或HTTPS协议连接来打开一个特定的URL,如果URL固定,则可以作为基于网络的特征码
wininet!InternetReadFile
功能:从一个由InternetOpenUrl,FtpOpenFile, 或HttpOpenRequest函数打开的句柄中读取数据
函数原型:
BOOL InternetReadFile( __in HINTERNET hFile,
__out LPVOID lpBuffer,
__in DWORD dwNumberOfBytesToRead,
__out LPDWORD lpdwNumberOfBytesRead
);
参数介绍:
hFile:由InternetOpenUrl,FtpOpenFile, 或HttpOpenRequest函数返回的句柄.
lpBuffer:缓冲区指针
dwNumberOfBytesToRead:欲读数据的字节量。
lpdwNumberOfBytesRead:接收读取字节量的变量。该函数在做任何工作或错误检查之前都设置该值为零
返回值:
成功:返回TRUE,失败,返回FALSE
备注:从之前打开的URL中读取数据
wininet!InternetWriteFile
功能:向服务器上传文件
函数原型:
BOOL InternetWriteFile( _In_ HINTERNET hFile, _In_ LPCVOID lpBuffer, _In_ DWORD dwNumberOfBytesToWrite, _Out_ LPDWORD lpdwNumberOfBytesWritten);
参数介绍:
hFile :由InternetOpenUrl,FtpOpenFile, 或HttpOpenRequest函数返回的句柄.
lpBuffer:缓冲区指针
dwNumberOfBytesToWrite :欲写数据的字节量
lpdwNumberOfBytesWritten:实际写入的数据的字节量
返回值:
成功:返回TRUE,失败,返回FALSE
备注:
写数据到之前打开的一个URL
Netapi32!NetShareEnum
功能:返回服务器上共享的资源的信息
函数原型:
NET_API_STATUS NetShareEnum( _In_ LPWSTR servername, _In_ DWORD level, _Out_ LPBYTE *bufptr, _In_ DWORD prefmaxlen, _Out_ LPDWORD entriesread, _Out_ LPDWORD totalentries, _Inout_ LPDWORD resume_handle);
参数介绍:
servername:函数要执行的远程服务的DNS或NetBIOS名字
Level:数据的信息级别
Bufptr:接收数据的缓冲区,数据的格式取决于参数Level。释放此缓冲区需要使用NetApiBufferFree
Prefmaxlen:指定返回的数据的最大长度
Entriesread:接收枚举到的实际的数据的个数。
Totalentries:接收枚举到的所有函数入口的个数。
resume_handle:用来接收一个句柄,此句柄被用来继续进行搜索。当第一次搜索时,此句柄需要为0。
返回值:
成功返回NERR_Success,失败返回系统的错误码
备注:
用来枚举网络共享的函数
ole32!OleInitialize
功能:是在当前单元(apartment)初始化组件对象模型(COM)库,将当前的并发模式标识为STA(single-thread apartment——单线程单元),并启用一些特别用于OLE技术的额外功能
函数原型:
WINOLEAPI OleInitialize( LPVOID pvReserved );
参数介绍:
pvReserved为保留参数,在使用函数时必须设定为NULL
返回值:
这个函数除了支持标准的返回值E_INVALIDARG,E_OUTOFMEMORY和E_UNEXPECTED之外还可能产生以下返回值
S_OK:COM库和OLE技术所特有的额外功能在当前单元被成功初始化。
S_FALSE:COM库在当前单元已经被初始化过。
OLE_E_WRONGCOMPOBJ:本机上的文件COMPOBJ.DLL和OLE2.DLL的版本不相匹配。
RPC_E_CHANGED_MODE:之前有一个对函数CoInitializeEx的调用指明了这个单元的并发模式为MTA(multithread apartment——多线程单元)。如果当前正在使用Windows 2000,这个返回值也能表明发生了NA(neutral threaded apartment——中立线程单元)到STA的转换。
备注:
用来初始化COM库,使用COM对象的程序必须在调用任何其他COM功能之前,调用这个函数。
ws2_32!recv
功能:从已经连接的socket中接收数据
函数原型:
int recv( _In_ SOCKET s,
_Out_ char *buf,
_In_ int len,
_In_ int flags
);
参数介绍:
s:已经连接的socket
buf:接收数据的缓冲区
len:buf缓冲区的长度
flags:影响此函数行为的标志
返回值:成功返回接收的数据的长度,失败返回0.
备注:
从一个远程主机获取数据,恶意代码经常使用这个函数来从远程的命令控制服务器获取数据。
ws2_32!send
功能:向一个已经连接的socket发送数据
函数原型:
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
参数介绍:
s:一个用于标识已连接套接口的描述字。
buf:包含待发送数据的缓冲区。
len:缓冲区中数据的长度。
flags:调用执行方式。
返回值:
如果无错误,返回值为所发送数据的总数,否则返回SOCKET_ERROR。
备注:
发送数据到远程主机,恶意代码经常使用这个函数来发送数据到远程的命令控制服务器。
urlmon!URLDownloadToFile
功能:从指定URL地址读取内容并将读取到的内容保存到特定的文件里
函数原型:
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);
参数介绍:
pCaller控件的接口,如果不是控件则为0
szURL要下载的url地址,不能为空
szFileName下载后保存的文件名.
dwReserved保留字段,必需为0
lpfnCB下载进度状态回调
返回值:
成功返回S_OK,失败返回相应的错误码。
备注:
一个高层次的函数调用,来从一个WEB服务器下载文件并存储到硬盘上。这个函数在下载器中是非常普遍的,因为他以一个函数调用便实现了下载器的所有功能。
ws2_32!WSAStartup
功能:初始化底层级别的网络函数
函数原型:
int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );
参数介绍:
wVersionRequested:一个WORD(双字节)型数值,在最高版本的Windows Sockets支持调用者使用,高阶字节指定小版本(修订本)号,低位字节指定主版本号。
lpWSAData 指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。
返回值:
成功返回0,否则返回错误码
备注:
用来初始化底层级别的网络功能,搜索此函数调用位置,经常是定诶网络相关功能最简单的方法。