WEB开发网
开发学院软件开发VC DLL的远程注入技术 阅读

DLL的远程注入技术

 2006-04-11 22:54:03 来源:WEB开发网   
核心提示: 不过结果肯定会让你大失所望——注入DLL失败!嗯嗯,那么现在让我们来分析一下失败的原因吧,DLL的远程注入技术(5),我是前说过,在Win32系统下,然后向这段空间写入我要加载的DLL名称,最后再调用CreateRemoteThread,每个进程都拥有自己的4G虚拟

不过结果肯定会让你大失所望——注入DLL失败!

嗯嗯,那么现在让我们来分析一下失败的原因吧。我是前说过,在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。在这里,我们当作参数传入的字符串"DLL.dll"其实是一个数值,它表示这个字符串位于Virus.exe地址空间之中的地址,而这个地址在传给Target.exe之后,它指向的东西就失去了有效性。举个例子来说,譬如A、B两栋大楼,我住在A楼的401;那么B楼的401住的是谁我当然不能确定——也就是401这个门牌号在B楼失去了有效性,而且如果我想要入住B楼的话,我就必须请B楼的楼长为我在B楼中安排新的住处(当然这个新的住处是否401也就不一定了)。

由此看来,我就需要做这么一系列略显繁杂的手续——首先在Target.exe目标进程中分配一段内存空间,然后向这段空间写入我要加载的DLL名称,最后再调用CreateRemoteThread。这段代码就成了这样:

// 向目标进程地址空间写入DLL名称

DWORD dwSize, dwWritten;
dwSize = lstrlenA( lpszDll ) + 1;
LPVOID lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
if ( NULL == lpBuf )
{
   CloseHandle( hProcess );
   // 失败处理
}
if ( WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten ) )
{
   // 要写入字节数与实际写入字节数不相等,仍属失败
   if ( dwWritten != dwSize )
   {
     VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
     CloseHandle( hProcess );
     // 失败处理
   }
}
else
{
   CloseHandle( hProcess );
   // 失败处理
}

上一页  1 2 3 4 5 6 7  下一页

Tags:DLL 远程 注入

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接