beacon.dll样本的ReflectiveLoader(x)函数

上次文章中shellcode解密出的pe文件,拖到PEView中又看了一遍,发现有导出表,只导出了一个函数,名字就叫_ReflectiveLoader@4,不是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时,表现出了恶意行为。

猜你喜欢

转载自blog.csdn.net/singleyellow/article/details/86777391