使用远程线程的DLL注入在执行时不起任何作用
DLL injection using remote thread does nothing at execution
这么长时间以来,我一直在努力找出问题所在。我见过一些人分配:
GetProcAddress(GetModuleHandle("KERNEL32.dll"), "LoadLibraryA")
我想知道这是否是我必须做的,但我只是不明白那行代码到底做了什么。它与MY dll函数无关,为什么要加载它?
Main(控制台应用程序A.K.A注射器):
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
char* dllPath = "C:\Users\Kalist\Desktop\Projects\DLL\bin\Debug\DLL.dll";
typedef DWORD (WINAPI *pThreadFunc)();
char* ProcToInject = "calc.exe";
int main(){
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE procSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
DWORD procID;
if(procSnap){
if(Process32First(procSnap, &pe32)){
do{
if(!strcmp(pe32.szExeFile, ProcToInject)){
procID = pe32.th32ProcessID;
break;
}
}while(Process32Next(procSnap, &pe32));
}
CloseHandle(procSnap);
}
HANDLE procAccess = OpenProcess(PROCESS_ALL_ACCESS, false, procID);
void* memSpace = VirtualAllocEx(procAccess, NULL, strlen(dllPath)+1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(procAccess, memSpace, dllPath, strlen(dllPath)+1, NULL);
HINSTANCE getLibadd = LoadLibrary(dllPath);
pThreadFunc pThreadFuncVar = (pThreadFunc)GetProcAddress(getLibadd, "threadFunc");
CreateRemoteThread(procAccess, NULL, 0, (LPTHREAD_START_ROUTINE)pThreadFuncVar, memSpace, 0, NULL);
CloseHandle(procAccess);
}
DLL远程进程:
#include <iostream>
#include <windows.h>
extern "C" DWORD WINAPI threadFunc(){
MessageBox(0, "Injection worked!", "Injection message", MB_OK);
return 0;
}
代码的问题是pThreadFuncVar
包含注入器进程中threadFunc的地址。但是,您的Dll.Dll甚至没有加载到目标进程中。即使加载了dll,也可能不会在同一地址加载,因此pThreadFuncVar
地址在目标进程中仍然没有意义。
在每个进程中,只有少数基本模块(如KERNEL32)加载在同一地址。因此,如果您将LoadLibraryA的地址用于CreateRemoteThread,它将从您复制到目标进程内存的路径加载dll。这将反过来调用dll的dll附加过程,这是您想要放置MessageBox调用的位置。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 当我将 DLL 注入现有进程时,DLLMain 不执行任何操作
- 通过 dll 注入在主线程中执行代码
- 在窗口执行目标 TLS 回调之前注入 dll
- 该代码注入第三方Qt应用程序并执行一些方法来获取Qt应用程序信息
- 如何在可执行文件中注入图标资源
- 如何在 ubuntu 上将可执行文件注入另一个可执行文件
- 注入的 DLL 不执行任何操作
- 是否可以从外部进程注入和执行应用程序
- 如何执行注入到进程中的应用程序
- 进程执行前的 DLL 注入
- 使用代码注入在远程进程中执行函数
- 使用远程线程的DLL注入在执行时不起任何作用