2018/10/04-网络API-《恶意代码实战分析》
Posted fingerprint
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018/10/04-网络API-《恶意代码实战分析》相关的知识,希望对你有一定的参考价值。
恶意代码通常依赖于网络函数来完成它的肮脏工作,而Windows API函数中就有很多可以进行网络通信。创建网络特征的任务是复杂的,我们这里的目标,是向你如何识别和理解常见的网络函数,这样你就可以辨别出一个恶意程序在使用这些函数时会做些什么。
在Windows的网络选项中,恶意代码最普遍使用的是伯克利兼容套接字,它们的功能在Windows和UNIX系统上几乎是一样的。
伯克利兼容套接字
伯克利兼容套接字的网络功能在Windows系统中是由Winsock库实现的,主要在ws2_32.dll中。在所有函数中,socket、connect、bind、listen、accept、send和recv函数是最常用的。
WSAStartup函数必须要在其他网络函数之前被调用,以便为这些网络库分配资源。当在调试代码查找网络连接入口时,在WSAStartup函数中设置一个断点,是非常有用的,因为网络入口应该跟在后面不远的地方。
socket 创建一个套接字
bind 将一个套接字绑定到特定端口,应该在accept之前调用
listen 预示一个套接字将进入监听,等待入站连接
accept 向一个远程套接字打开一个连接,并接受连接
connect 向一个远程套接字打开一个连接,远程套接字必须在等待连接
recv 从远程套接字接收数据
send 发送数据到远程套接字
网络的服务器和客户端
一个网络程序通常有两个端点:服务器端,它维护一个打开套接字并等待入站连接;客户端,它连接一个正在等待的套接字。而恶意代码可以是这两端中的任意一个。
在连接一个远程套接字的客户端应用例子中,你会看到socket调用,然后紧跟着一个connect调用,如果需要的话,后面跟着的是send和recv调用。对一个监听入站连接的服务应用,顺序则是socket、bind、listen和accept函数陆续被调用,如果需要的话,跟着是send和recv调用。这个模式在恶意和非恶意的程序中,都是很常见的。
WinINET API
除了Winsock API以外,还有一个称为WinINET API的更高一级WindowsAPI。WinINET API函数被保存在Wininet.dll中。如果一个程序从这个DLL中导入函数,它就是在使用更高一级的网络API。
WinINET API实现了应用层协议,入HTTP和FTP。你可以基于恶意代码打开的是何种连接,来理解它在做什么事情。
InternetOpen被用来初始化一个道互联网的连接。
InternetOpenUrl被用来访问一个URL(它可以是一个HTTP页面或一个FTP资源)。
InternetReadFile和ReadFile函数工作原理相似,允许程序从一个来自互联网的下载文件中读取数据。
恶意代码可以使用WinINET API,来连接一个远程服务器,并获取要执行的进一步指令。
以上是关于2018/10/04-网络API-《恶意代码实战分析》的主要内容,如果未能解决你的问题,请参考以下文章