恶意代码分析实战 — Lab 12-01
Lab12-01
导入函数,kernel32.dll中有CreateRemoteThread,WriteProcessMemory,VirtualAllocEx等函数调用,很可能是与进程注入操作相关
Strings exe发现几个dll和exe
程序运行后返回一个对话框
并且隔一段时间出现新的对话框,数字表示出现的次数
Idapro载入exe程序,分别获取psapi.dll中
EnumProcessModules,GetModuleBaseNameA,EnumProcesses进程枚举相关函数
结果保存在dword_408714,dword_40870C,dword_408710中,可以将这些dword修改为可读性更好的函数名
之后GetCurrentDirectoryA获取当前路径并拼接上\Lab12-01.dll,保存在Buffer中,然后call EnumProcesses获取每一个进程pid
根据pid进行分析 call sub_401000
进入此call,查找explorer.exe程序,如果找到返回eax = 1,否则eax = 0
如果eax = 1,则OpenProcess获取explorer.exe句柄
然后VirtualAllocEx对explorer.exe进程中分配内存空间,并将结果赋值到IpParameter中
如果空间分配成功,WriteProcessMemory向explorer.exe中写入数据,数据内容保存在Buffer中,也就是之前分析的Lab12-01.dll路径
目的是Lab12-01.dll实现向explorer.exe中进程注入
然后GetModuleHandleA和GetProcAddress获取kernel32.LoadLibraryA函数地址,返回给IpStartAddress
CreateRemoteThread创建远程线程,用explorer.exe进程调用kernel32.LoadLibraryA,通过IpParameter参数传递,即Lab12-01.dll,从而实现Lab12-01.dll注入到explorer.exe
在栈中可以看到CreateRemoteThread的参数
在process explorer中查找调用Lab12-01.dll的进程和句柄,找到explorer.exe进程
Lab12-01.dll已经注入到explorer.exe中了
如果想要终止程序,可以将explorer.exe进程kill就好
Idapro载入dll文件分析,只是调用了一个CreateThread创建线程,进入IpStartAddress查看
打印字符是对话框的标题,CreateThread创建对话框,然后sleep(60s)进行下一轮,%d作为一个参数在sleep()执行后自增1,实现类似计数功能
进入StartAddress查看,这是创建MessageBoxA的窗体,打印字符Press OK to reboot