文章目录
原文来自看雪论坛: [原创]windows逆向分析病毒需注意的函数
进程(注入,创建)
AdjustTokenPrivileges()
通常会配合OpenProcessToken()
和 LookupPrivilegeValue()
函数一起使用达到提升权限的功能。
通常在OpenProcess()
函数被调用之前会进行修改权限的操作,使得进程拥有SeDebug权限,这样才能有调用OpenProcess打开进程的权限。
CreateRemoteThread()
这无疑是最值得注意的函数,没有之一。很多的杀毒引擎甚至是遇到该函数就将其定义为病毒或者恶意软件。
典型的注入过程:
- OpenProcess()得到目标程序句柄;
- VirtualAllocEx();
- WriteProcessMemory()将欲注入dll路径写入被注入的程序刚刚分配的空间;
- GetModuleHandle(), GetProcAddress()获取LoadLibraryW()函数的地址
- CreateRemoteThread(),在被注入的进程中生成一个线程执行LoadLibraryW函数加载欲注入的dll文件。
最有效的定位函数是CreteRemoteThread()API,但有时候可能不会有该函数。
所以在动态调试时候,如果发现进程在将一些系统进程或者无关进程pid作为参数传入OpenProcess()函数中并获得句柄,那肯定是要有一些不法操作。
SetWindowsHookEx()
通过设置全局的Hook,当某个时间发生时,如键盘输入事件发生时,会在整个事件链中间截取到信息,并会将dll强制注入到进程中,并执行Hook在截取信息后的动作。
KeyLogger通常就是使用该方法实现的内容记录。
CreateToolhelp32Snapshot()
结合Process32First()
和Process32Next()
函数遍历进程,然后执行操作。
ShellExecute()
运行一个外部程序,并对外部程序有一定的控制。
恶意软件运行时通常会以命令行的方式运行一些指令或者执行释放出来的文件。
用该函数时,可以在栈中观察到将要执行的参数:runas命令,用来 执行病毒文件生成一个新的进程。这可能是静态调试不可见的参数。
关于动/静态分析
IDA分析的入手点:
- 字符串中是否有敏感的命令语句如
cmd.exe + /c +[命令]
; - 僵尸网络病毒文件中常常包含很多的ip地址,进而dos攻击;
- 敏感的域名可以在VirusTotal网站得到一定的信息;
- 门罗币挖矿病毒可能存在门罗币挖矿软件的版本号;
- 定位核心代码,在逆向之后很多函数名是没有的,但是系统函数的名一般都会存在;
静态分析的好处是能够更清楚的看到伪代码如(IDA),从中可以了解到程序的整体流程结构和所具备的模块。动态分析一般更多是为静态分析进行添枝加叶,因为有些函数的参数是动态分配的,静态分析查看不到。
有的恶意程序可能需要与C&C建立通讯后得到指定的指令才会确定参数执行某些指令,所以想要进一步明确恶意程序在做什么,需要进行动态分析,在敏感函数被调用前设定断点。
CreateProcess()
和ShellEcxecute()函数一样。
注册
RegOpenKeyEx(), RegCreateKeyEx()
添加自启动项,使得在电脑重启后仍能进行挖矿或者DOS等恶意行为。
文件
FindFirstFile(), FindNextFile()
勒索病毒或者感染性的病毒通常会遍历全盘目录或者指定目录夹下的文件,并对指定的文件类型进行加密。
网络
bind(), listen(), socket()
定位该类函数能够找到数据建立通信的模块,从而对动态分析有一定的帮助。