(部分来自windows核心编程)远程注入dll

本文详细介绍了一种通过远程线程调用LoadLibrary实现DLL注入的技术。具体步骤包括:使用FindWindow和GetWindowThreadProcessId获取目标进程ID;使用OpenProcess打开进程;在远程进程中分配内存并写入DLL路径;最后创建远程线程加载DLL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

{//仅仅支持ANSI路径
            //find the wnd
            HWND hwnd = FindWindow(NULL,"1.txt - 记事本");

            //get pid
            DWORD tid,pid;
            tid = GetWindowThreadProcessId(hwnd,&pid);
            if (0==pid)//for test
            {
                pid = GetCurrentProcessId();
            }
            HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);

            //////////////////////////////////////////////////////////////////////////
            //接下来的方法是使远程线程调用LoadLibrary
            //kernel32的
            HMODULE hModule = GetModuleHandle("Kernel32");
            PTHREAD_START_ROUTINE pfnThreadRtn = 
                (PTHREAD_START_ROUTINE)GetProcAddress(hModule,"LoadLibraryA");//路径不要有宽字符

            //在远程线程中写入地址

            char* pszLibFileRemote = 
                (char*) VirtualAllocEx(hProcess, NULL, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);

            WriteProcessMemory(hProcess, pszLibFileRemote, 
                (PVOID)"D:\\coding\\dll_hook\\dllInj\\demo\\demo\\debug\\ForHook.dll", 
                MAX_PATH, NULL);


            HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, 
                pfnThreadRtn, //
                pszLibFileRemote, 0, NULL);
            //
            WaitForSingleObject(hThread, INFINITE);


        }

//上面的程序忘记了释放申请的内存
//看看能否删除dll便知道有没有注入,关闭记事本会自动释放dll。

转载于:https://www.cnblogs.com/d20062303732/archive/2012/05/19/2509238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值