Lab 12-1
首先还是一样,peid进行查壳,发现无壳后查看导入表。导入表中发现CreateRemoteThread、VirtualAllocEx、LoadLibrary等敏感函数。
IDA打开Lab12-01.exe分析,程序使用LoadLibraryA+GetProcAddress分别获取EnumProcessModules、GetModuleBaseNameA和EnumProcesses函数在psapi.dll中的地址。
接下来获取Lab12-01.dll所在的完全路径,并将路径存储在Buffer中。
调用EnumProcesses检索系统中每个进程的pid。
在获得所有pid后进入一个循环:
定位到for循环的主题操作:
0040121C处是对指针操作,对获得的pid数组各元素进行判空;在该元素不为空时指定到00401226处,跟进sub_401000函数查看:
利用OpenProcess、EnumProcessModules和GetModuleBaseNameA函数获得当前pid数组元素的模块值(xxx.exe),然后利用字符串比较xxx.exe与explorer.exe。 所以sub_401000函数既是匹配explorer.exe,成功返回1,失败返回0。
回到主函数中,00401242处判断explorer.exe是否匹配,若是则打开句柄:
否,则在for循环中进行自增操作:
在打开explorer.exe句柄跳出循环后,为其分配内存,将Lab12-01.dll路径写入内存,获取LoadLibraryA在kernel32.dll中的地址,创建远程线程同时起始地址既是LoadLibraryA。
将分析线索贯穿一下:Lab12-01.exe首先查找要注入的目标进程(explorer.exe),在目标进程中分配内存、在分配的内存中写入带有恶意DLL的路径、创建起始地址为LoadLibraryA的远程线程,从而线程执行时也就加载了恶意DLL(Lab12-01.dll)。
接下来IDA分析Lab12-01.dll:
DllMain中调用了CreateThread,跟进sub_10001030分析:
可以看出这是一个死循环,观察到有字符串"Practical Malware Analysis %d"和打印函数,其中 %d所表参数ecx,在sleep 60000毫秒后,不断的进行add ecx,1的自增操作。跟进StartAddress分析:
调用了MessageBoxA函数并且Text参数为"Press OK to reboot"。
将Lab12-01.dll的分析线索整理一下:一个死循环不停地显示一个对话框,对话框显示"Practical Malware Analysis %d"和"Press OK to reboot"
运行如下:
取消弹框有多种方式,选择patched二进制文件,在OD中编辑004011C4处,汇编为jmp 004011C6使程序直接执行结束。