能力值:
( LV2,RANK:10 )
|
-
-
2 楼
自己忙活了一天,發現我VirtualAlloc出來的內存被回收從而導致的崩潰.導致內存不可讀,其他問題還待研究.
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
我懂了,楼主想利用那个经典的DLL加载BUG
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
內存加載dll而已..
本進程內存加載已經實現 ,跨進程的內存加載就不行咯. 接著啃
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
就是那个进程加载DLL A然后DLL A加载DLL B,然后进程卸载DLL A,但是DLL B却驻留在内存里面了 这个bug。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
新人回帖!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
看高手解答。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
跨进程加载DLL ,可以使用CreateRemoteThread 创建远程线程函数来进行加载。
HANDLE hHandle = ::OpenProcess(PROCESS_ALL_ACCESS, false, nPid);
if (NULL == hHandle)
{
CloseHandle(hHandle);
return false;
}
DWORD dwWritten;
LPVOID lpBuf = VirtualAllocEx(hHandle, NULL, MAX_PATH, MEM_COMMIT, PAGE_READWRITE);
if (NULL == lpBuf)
{
CloseHandle(hHandle);
return false;
// 失败处理
}
if (WriteProcessMemory(hHandle, lpBuf, (LPVOID)str, MAX_PATH, &dwWritten))
{
// 要写入字节数与实际写入字节数如果不相等,则调用失败!
if (dwWritten != MAX_PATH)
{
VirtualFreeEx(hHandle, lpBuf, MAX_PATH, MEM_DECOMMIT);
CloseHandle(hHandle);
return false;
// 失败处理
}
}
else
{
VirtualFreeEx(hHandle, lpBuf, MAX_PATH, MEM_DECOMMIT);
CloseHandle(hHandle);
return false;
// 失败处理
}
// 使目标进程调用LoadLibrary,加载DLL
DWORD dwID;
HANDLE hThread = CreateRemoteThread(hHandle, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID);
// 等待线程执行完毕
WaitForSingleObject(hThread, INFINITE);
|
|
|