远程DLL注入导致目标进程crash
远程DLL注入会导致目标进程crash,crash地址是目标进程kernel32.dll的地址空间,有人知道怎么回事吗?或者怎么避免目标进程crash吗?
[解决办法]
the target os version?
your code won't work in vista because of ASLR in vista
[解决办法]
你调试这段代码,看一下执行到哪行代码时出现问题。另外在注入的dll开头显示一个MessageBox以确定线程是否已创建成功。
[解决办法]
DWORD dwID;
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pfnStartAddr, lpBuf, 0, &dwID );
你打算用LoadLibraryA作为线程的起动函数?这恐怕不行吧?线程函数有自己得规范,不是啥都能传得。
我恐怕你首先得在目标进程注入一段合法得线程函数代码,然后把这段代码得起点传给CreateRemoteThread即可。
[解决办法]
HMODULE hKernel32Lib = LoadLibrary("Kernel32.dll"); LPVOID lpRemoteFuc = NULL; DWORD dwRemoteLib = NULL; if(!hKernel32Lib) { AfxMessageBox(_T("Can not load library")); return; } lpRemoteFuc = GetProcAddress(hKernel32Lib,"LoadLibraryA"); if(lpRemoteFuc) { g_hRemoteThread = ::CreateRemoteThread(g_hRemoteProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpRemoteFuc,g_lpRemoteFucParam, 0, &g_dwRemoteThreadid); ::WaitForSingleObject(g_hRemoteThread,INFINITE); ::GetExitCodeThread(g_hRemoteThread,&dwRemoteLib); } FreeLibrary(hKernel32Lib);
[解决办法]
这样应该不行吧?你等于用本进程的remotefun 地址传过去?
[解决办法]
贴一下你DLL中DllMain及相关的初始化代码。
[解决办法]
我在自己电脑上执行了几十次,每次都是0x7c801d77。要不你换下面代码试试。
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)LoadLibraryA;
另外记得DllMain中要返回false。
[解决办法]
呵呵, 查毒吧。
所有进程的ntdll.dll和kernel32.dll都会加载到相同地址。 如果你取到的是不同的值, 那只能说明你进程中kernel32.dll已经被别人hook了。