Lab12-01-恶意样本分析-简单进程注入分析
简单进程注入分析
样本来自《恶意样本分析》Lab12-1.exe Lab12-01.dll
运行程序后,发生了什么?
观察程序运行信息,会弹出一个对话框提示Press Ok to reboot
,点击确认后会再次弹出,可以肯定程序是应该有一个循环,每次弹出对话快之后就等待,如果对话框没被关闭,会重复弹出,如果关闭了,则会在定时器触发后再次弹框。
哪个进程被注入了
这个在运行时没有准确定位到,对比了可以的程序并没有发现,需要实际逆向分析程序。分析后可知,explore.exe
被注入加载dll
如何关闭弹窗
需要逆向分析并做patch掉弹框程序,将被注入的进程关闭即可。
程序是如何工作的
首先将样本拖入ida分析,来到main入口,程序先获取获取可执行程序的路径,并拼接了currentpath\to\Lab12-07.dll
的完整路径,这时候通过EnumProcesses
来枚举进程,如果枚举失败,则返回装填1退出,如下
枚举完成进程后,开始查找目标进程
经过分析后知道,程序在syub_401000
处查找目标explore.exe
进程,如果找到则返回1,失败就继续循环
当找到目标进程后,开始执行进程注入逻辑。通过OpenProcess
打开一个进程目标句柄,
接着调用VirtualAlloc
函数在目标进程分配一块内存,然后调用WriteProcessMemeory
函数将Lab12-07.dll
写入到目标进程explore.exe
内,紧接着通过kernel32.dll
获取LoaLibraryA
函数,最后将获取的LoadLibraryA
函数设置给CreateRemoteThread
函数的lpStartAddress
,写入到explore.exe
的Lab12-01.dll
的地址设置给lpParameter
参数,最后调用CreateRemoteThread
执行Lab12-01.dll
的DllMain
函数,这样一个进程注入就完成了。
分析Lab12-01.dll
根据前面可以知道程序在会被LoadLibrayA
函数加载,dll的DllMain
函数会被调用,如下
使用一个线程去执行,直接查看lpStartAddress
函数,经过分析后知道,程序另开了一个线程来调用MessageBox
函数,标题是"Practical Malware Analysis %d"
,
消息内容是"Press OK to reboot"
休眠60000
毫秒
休眠完成后继续循环执行一次,因此这个程序不会停止,会不停的弹框。
总结
程序首先获取了当前执行的路径以便获取到Lab12-1.dll
的绝对路径,接着枚举进程并找到explore.exe
作为注入目标进程,之后利用OpenProcess
函数获得目标进程的句柄并在目标进程内分配内存空间写入要注入的dll
,通过CreateRemoteThread
执行LoadLibraryA
将dll
在目标进程内加载并运行,通过这个注入方法来隐藏实际的恶意行为。