dll高级技术–动态注入:ImgWalk动态库,这个DLL用来检测被注入的进程中当前载入的各个模块名称—DLL程序
WINDOWS中DLL注入的高级技术。
dll高级技术–动态注入:ImgWalk动态库,这个DLL用来检测被注入的进程中当前载入的各个模块名称—DLL程序
文章目录
ImgWalk动态库,这个DLL用来检测被注入的进程中当前载入的各个模块名称—DLL程序
/*------------------------------------------------------------------------
22-ImgWalk.cpp
ImgWalk动态库,这个DLL用来检测被注入的进程中当前载入的各个模块名称---DLL程序
-----------------------------------------------------------------------*/
#include "CmnHdr.h"
#include <tchar.h>
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID fImpload)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
char szBuf[MAX_PATH * 100] = {0};
PBYTE pb = NULL;
MEMORY_BASIC_INFORMATION mbi;
//检索有关调用进程的虚拟地址空间中一系列页面的信息
while (VirtualQuery(pb,&mbi,sizeof(mbi)) == sizeof(mbi))
{
int nLen;
char szModName[MAX_PATH];
if (mbi.State == MEM_FREE)
mbi.AllocationBase = mbi.BaseAddress;
if ((mbi.AllocationBase == hInstDll) || //该区域包含该DLL,则隐藏掉该DLL,不显示在后面对话框中
(mbi.AllocationBase != mbi.BaseAddress || //块不是区域的开始地址
(mbi.AllocationBase == NULL))) { //区域地址为NULL
nLen = 0;
}
else
{
nLen = GetModuleFileNameA((HINSTANCE)mbi.AllocationBase,
szModName,_countof(szModName));
}
if (nLen > 0)
{
wsprintfA(strchr(szBuf,0),//找到第一个0
"\n%p-%s",
mbi.AllocationBase,szModName);
}
pb += mbi.RegionSize;
}
//注意:正常情况下,不应该在DllMain里显示一个对话框,因为
//装载器被锁。但为了程序简单化,这里违返了这个规则
chMB(&szBuf[1]); //从1开始,因为 "\n%p-%s",表示szBuf[0]为换行符
}
return TRUE;
}