C++远程注入dll的通俗理解及易错点

本文详细介绍了C++中实现远程注入DLL的步骤,包括提权、查找目标进程、分配内存、写入内存、创建远程线程等关键操作。特别强调了DLL路径的正确拼接、内存分配、线程创建时的注意事项,以及64位与32位程序兼容性的问题。同时,文中指出了调试时可能遇到的错误,如DLL路径错误、权限不足等,并给出了相应的解决方案。
摘要由CSDN通过智能技术生成

远程注入大致可分为8步

01给自己提权

                int DebugPrivilege =EnableDebugPrivilege(SE_DEBUG_NAME);

02获取目标窗口句柄

               CWnd* hWnd = FindWindow(L"Notepad", NULL);

03获取目标窗口ID

               GetWindowThreadProcessId(hWnd->m_hWnd, &Win_ID);

04获取目标进程句柄

               HANDLE hWnd_Pro = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Win_ID);

05在目标进程内申请内存空间

              LPVOID lpAddr = VirtualAllocEx(hWnd_Pro, NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

6.拼接出dll的绝对路径,而这个绝对路径是给第8步loadLibrary的地址

               要点一:GetCurrentDirectory获取到的是当前路径,***必须***提前把需要注入的dll手动复制过来

                               因为debug的时候这里是没有dll的,写错地址是最常出现的错误
               要点二:loadLibrary需要2字节的LPCWSTR类型,我们这里也要把一个字节的char*改为LPCWSTR
                              获取到的szBuf已经是LPCWSTR类型了,添加dll名称时,每个char后面多加一个'\0'就变成LPCWSTR的结构了
                              比如DDDDDD,char类型是44 44 44 44 44 44,LPCWSTR类型是44 00 44 00 44 00 44 00 44 00 44 00

                        char szBuf[MAX_PATH] = { NULL };
                        DWORD Len_Path=GetCurrentDirectory(sizeof(szBuf), LPWSTR(szBuf));
                        char* dll_name = "\\helper2.dll";//这里填需要注入的dll路径名称
                        int aaaa = strlen(dll_name);
                        for (int i = Len_Path*2; i < (Len_Path + aaaa) * 2; i = i + 1) {
                            if (i % 2 == 0) {
                                szBuf[i] = dll_name[(i - (Len_Path * 2)) / 2];
                            }
                            else {
                                szBuf[i] = '\0';
                            }
                        }

07使用WriteProcessMemory把地址写入目标进程的内存空间。

                       BOOL bRet = WriteProcessMemory(hWnd_Pro, lpAddr, szBuf, MAX_PATH, NULL);

                        第一个参数: 进程的句柄, 可以用第4步OpenProcess返回的句柄
                        第二个参数 : 写入的内存地址起点,可以用第5步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值