本文为看雪论坛精华文章
看雪论坛作者ID:psycongroo
前言 今天的主题——远程线程注入DLL,用以在他人EXE中实现自己代码功能的操作,这次就不仅限于键盘记录了。准备工作
阅读并实现本文主题,需要以下工具及知识:
1. C++/C语言的基本知识 2. 进程监控软件procexp 当然,倘若读者并没有掌C++/C语言,也可以继续阅读浏览。因为本文主要为萌新笔者的学习笔记,因此也并没有过于深奥晦涩难懂的地方。只要对基本原理,核心API函数留有印象即可。原理 在讲解远程注入DLL原理之前,读者需要知道从代码层级上DLL加载时的函数调用流程。
代码中加载DLL 要在一个Win32 app中,也就是我们的exe程序中加载DLL只需要调用一个函数——LoadLibraryA/W。 以下是 LoadLibrary文档 :
HMODULE LoadLibraryA/W( LPCWSTR lpLibFileName //DLL文件的全路径);
以下为一个控制台程序加载DLL示例:
#include int main(){
LoadLibrary(L"F://Project//MyDll.dll");}
参数 LPCWSTR lpLibFileName为DLL文件的路径,需要说的是,当加载的DLL文件和EXE在同一文件夹下可只写DLL为文件名。 当DLL被使用LoadLibraryA/W加载后,在DLL文件中的DllMain函数会被自动调用。
以下为创建的DLL文件:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH: MessageBox(NULL, L"内容", L"标题", MB_OK); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case D