恶意代码分析实战 — Lab 12-04
Lab 12-04
PEID查看,有个resource,编码为101
使用Resource hacker提取资源,判断出是一个exe文件
将exe文件放入PEID中,可以看到kernel32.dll有WinExec运行和GetTempPathA获取临时文件,GetWindowsDirectoryA获取系统目录等操作
Urlmon.dll中有URLDownloadToFileA下载链接到文件操作
打开PM,设置Filter
运行lab12-04.exe,实验环境不能访问外网,所以显示网络连接错误,意味着进行了远程网络访问
在PM中监控到CreteFile一个wupdmgr.exe程序
Md5值相同,也就是说将提取的文件复制到system32\wupdmgr.exe中
Ida载入lab12-04.exe程序,刚开始枚举psapi.dll中的进程模块,将dword重命名为比较适合分析的名称
不断枚举当前进程,获取Pid值,放在dwProcessId中
然后进入循环,dwProcessId值作为参数调用sub_401000函数
进入此call,首先有两个字符str1 str2,值分别在dword中
查看,str2 = winlogon.exe str1 = <not real>
或者直接F5查看伪代码
之后将dwProcessId作为参数提交给OpenProcess函数,获取进程句柄
EnumProcessModules获取进程名称,返回给Str1
然后stricmp(str1,str2),也就是获取的进程与winlogon.exe比较,并以此确定返回的eax值是1还是0,所以此函数作用就是查找winlogon.exe进程pid
若找到winlogon.exe,则将pid值传入sub_401174
此函数首先调用sub_4010FC
这个函数主要用于Privilege提权操作
然后LoadLibraryA装载sfc_os.dll库,GetProcessAddress获取sfc_os.dll中编号为2的函数地址,保存为lpStartAddress,OpenProcess打开winlogon.exe获取句柄保存为hProcess
Sfc_os.dll用来实现windows文件保护
在winlogon.exe中会加载sfc_os.dll库
以上一系列参数入栈,调用CreateRemoteThread,实现sfc_os.dll序号为2的函数向winlogon.exe中进程注入
此序号为2的函数是一个导出函数,可以禁用windows的文件保护机制
以上操作完成了进程注入,之后GetWindowsDirectoryA获取路径,拼接上system32\wupdmgr.exe,此程序用于系统更新操作,返回保存为ExistingFileName,
GetTempPathA获取临时路径,拼接上winup.exe,保存为NewFileName,MoveFileA将wupdmgr.exe复制到临时文件夹中并改名为winup.exe,然后call sub_4011FC
进入此call,GetModuleHandlA获取句柄,然后Bin #101对Resource进行操作,提取其中的exe程序
这个提取的文件写入到system32\wupdmgr.exe,由于之前文件保护机制已经关闭,所以此处文件读写操作不会告警
WinExec执行wupdmgr.exe程序,uCmdShow = 0 运行界面不会显示,静默执行
Ida载入提取后的恶意程序1.exe,GetTempPathA获取临时路径,拼接winup.exe,然后WinExec执行,此处winup.exe是提取的恶意文件复制且改名后的
GetWindowsDirecroryA获取目录,拼接system32\wupdmgrd.exe,注意多出一个字母d,这个路径保存为Dest
URLDOwnloadToFileA下载链接保存到Dest路径中
其中这个链接地址包含一个updater.exe更新程序,用于后续恶意代码更新等操作
如果恶意代码更新完成,WinExec执行新下载的恶意程序