ida自动识别出的ReflectiveLoader(x)函数
上次文章中shellcode解密出的pe文件,拖到PEView中又看了一遍,发现有导出表,只导出了一个函数,名字就叫[email protected],不是ida神奇,而是作者就是这样写的,这个样本的名字也应该叫做beacon.dll。如图:
至于为什么按Ctrl+E,除了入口点函数和TLS会显示,导出函数也会显示?ida就是这么认为的,它认为导出函数也是入口点,
不信的话找到一个系统dll文件,按Ctrl+E,会发现所有的导出函数都会显示。
整个探索过程中发现另外一个问题:
通常情况:exe文件有start( )函数,并有start调用main( )函数
dll文件有DllEntryPoint( )函数,再调用DllMain( )函数
特殊情况:见过只有start( )函数,没有main( )函数的exe程序;还有Windows XP自带的kernell32.dll中只有DllEntryPoint( )函数,没有DllMain( )函数。
DllMain函数原型:
#include <stdio.h>
#include <Windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
// 添加代码
break;
case DLL_THREAD_ATTACH:
// 添加代码
break;
case DLL_THREAD_DETACH:
// 添加代码
break;
case DLL_PROCESS_DETACH:
// 添加代码
break;
}
return TRUE;
}
在WinNT.h中有对应宏的定义:
#define DLL_PROCESS_ATTACH 1
#define DLL_THREAD_ATTACH 2
#define DLL_THREAD_DETACH 3
#define DLL_PROCESS_DETACH 0
在shellcode样本中,分别3次调用DllEntryPoint函数,传进去的dwReason分别是1、4、5:其中dwReason=1,很快执行完,没有出现恶意行为;dwReason=4时,表现出了恶意行为。