读书人

远程DLL注入导致目标进程crash,该怎么

发布时间: 2012-02-25 10:01:49 作者: rapoo

远程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即可。
[解决办法]

C/C++ code
    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了。

读书人网 >VC/MFC

热点推荐