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

DLL的远程注入技术

 2006-04-11 22:54:03 来源:WEB开发网   
核心提示: 在调用了注入代码之后,DLL.dll就位于Target.exe的模块列表之中了:矛盾相生记得2004年初我将QQ尾巴病毒成功仿真后,DLL的远程注入技术(7),有很多网友询问我如何才能杀毒,不过我都没有回答——因为当时我研究的重点并非病毒的寄生特性,我还是不能免俗地

在调用了注入代码之后,DLL.dll就位于Target.exe的模块列表之中了:

矛盾相生

记得2004年初我将QQ尾巴病毒成功仿真后,有很多网友询问我如何才能杀毒,不过我都没有回答——因为当时我研究的重点并非病毒的寄生特性。这一寄生特性直到今天可以说我才仿真完毕,那么,我就将解毒的方法也一并公开吧。

和DLL的注入过程类似,只不过在这里使用了两个API:GetModuleHandle和FreeLibrary。出于篇幅考虑,我略去了与注入部分相似或相同的代码:

// 使目标进程调用GetModuleHandle,获得DLL在目标进程中的句柄

DWORD dwHandle, dwID;

LPVOID pFunc = GetModuleHandleA;

HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );

// 等待GetModuleHandle运行完毕

WaitForSingleObject( hThread, INFINITE );

// 获得GetModuleHandle的返回值

GetExitCodeThread( hThread, &dwHandle );

// 释放目标进程中申请的空间

VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );

CloseHandle( hThread );

// 使目标进程调用FreeLibrary,卸载DLL

pFunc = FreeLibrary;

hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, (LPVOID)dwHandle, 0, &dwID );

// 等待FreeLibrary卸载完毕

WaitForSingleObject( hThread, INFINITE );

CloseHandle( hThread );

CloseHandle( hProcess );

用这个方法可以卸载一个进程中的DLL模块,当然包括那些非病毒体的DLL。所以,这段代码还是谨慎使用为好。

在完成卸载之后,如果没有别的程序加载这个DLL,你就可以将它删除了。

到此为止,整个的技术细节我就讲完了。不过,我还是不能免俗地再次强调:李马发表本文及其源代码仅作技术讨论之用,请勿将此技术用作破坏之途,李马本人也不为各种可能出现的后果负任何责任。

上一页  2 3 4 5 6 7 

Tags:DLL 远程 注入

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