CreateRemoteThread注入DLL奇怪的问题
PROCESS_INFORMATION pi; STARTUPINFO si; memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); BOOL bRet = CreateProcess(_T("C:\\111.exe"), NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi); if (bRet) { WCHAR wFilePath[256] = _T("C:\\EmptyDLL.dll"); LPWSTR pszLibFile = NULL; int len = (lstrlenW(wFilePath) + 1) * 2; pszLibFile = (PWSTR)VirtualAllocEx(pi.hProcess, NULL, len, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(pi.hProcess, pszLibFile, (PVOID) wFilePath, len, NULL); PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("Kernel32")), "LoadLibraryW"); HANDLE hRemoteThread = CreateRemoteThread(pi.hProcess, NULL, 0, pfnThreadRtn, pszLibFile, 0, NULL); WaitForSingleObject(hRemoteThread, INFINITE); if (pszLibFile != NULL) { VirtualFreeEx(pi.hProcess, pszLibFile, 0, MEM_RELEASE); } CloseHandle(hRemoteThread); ResumeThread(pi.hThread); DWORD dwErr = GetLastError(); CString str; str.Format(_T("0x%08x"), dwErr); MessageBox(str); }
也可以在DLL的资源里面加入配置文件,控制加载,具体做法我忘了。
[解决办法]
可能是dll加载顺序的问题。
我认为调用CreateProcess,并且设置了CREAT_SUSPEND标志,则主线程创建后,执行前,本exe需要的dll并没有加载到本进程空间,而你的远程线程要使用kernel32.dll中函数。
我觉得这样修改一下估计就不会报错了:
HANDLE hRemoteThread = CreateRemoteThread(pi.hProcess, NULL, 0, pfnThreadRtn, pszLibFile, 0, NULL);
ResumeThread(pi.hThread);
WaitForSingleObject(hRemoteThread, INFINITE);
if (pszLibFile != NULL)
{
VirtualFreeEx(pi.hProcess, pszLibFile, 0, MEM_RELEASE);
}
CloseHandle(hRemoteThread);
DWORD dwErr = GetLastError();
CString str;
str.Format(_T("0x%08x"), dwErr);
MessageBox(str);
[解决办法]
pszLibFile = (PWSTR)VirtualAllocEx(pi.hProcess, NULL, len, MEM_COMMIT, PAGE_READWRITE);
这句有问题,在多核机器上有问题应该改成这样
pszLibFile = (PWSTR)VirtualAllocEx(pi.hProcess, NULL, len, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
[解决办法]
只有注入代码 你没有写执行代码啊
GetExitCodeThread (hRemoteThread, int code);
CloseHandle(hRemoteThread);
handle1=LoadLibraryEx ("C:\\EmptyDLL.dll", 0, 0)
int Faddress=GetProcAddress (handle1, DllFunctionName)
int verityaddress=code+Faddress-handle1
CreateRemoteThread (pHandle, 0, 0, verityaddress, 0, 0, 0)
CloseHandle (hRemoteThread)
CloseHandle (pHandle)
我是其他语言转C++刚接触C++没几天 随手翻译的代码 DLL注入我这边有2种完整的代码都是可以编译执行的 可惜不是C++的
哪些翻译的不对请指教 上面只有执行代码 verityaddress=code+Faddress-handle1 这条算法我也没搞清楚
[解决办法]
我猜测是线程同步的问题
[解决办法]
弄不来啊,顶你一下吧
[解决办法]
学习
[解决办法]
顶一下
[解决办法]
学习
[解决办法]