本文主要是介绍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时,表现出了恶意行为。
这篇关于beacon.dll样本的ReflectiveLoader(x)函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!