C++ WriteProcessMemory 使 MessageBox 使程序崩溃
C++ WriteProcessMemory makes MessageBox crash the programm
我想写一点AntiHack,但我对其中的一部分有问题。这个想法是通过从NTDLL.DLL挂接LdrLoadDll来防止dll注入。我通过谷歌搜索找到了一个功能,它可以做到这一点:
// function call: BlockAPI(m_hProc, "NTDLL.DLL", "LdrLoadDll");
bool zProtect::BlockAPI(HANDLE hProcess, char* libName, char* apiName)
{
BYTE pRet[]={ 0x31, 0xC0, // XOR eax, eax
0xC3 }; // RET
HINSTANCE hLib = NULL;
VOID *pAddr = NULL;
bool bRet = FALSE;
DWORD dwRet = 0;
hLib = LoadLibrary(libName);
if(hLib)
{
pAddr = (VOID*)GetProcAddress(hLib, apiName);
if(pAddr)
{
DWORD dwback;
if(!VirtualProtectEx(hProcess, (LPVOID)pAddr, sizeof(pRet), PAGE_EXECUTE_READWRITE, &dwback))
return false;
if(WriteProcessMemory(hProcess, (LPVOID)pAddr, &pRet, sizeof (pRet), &dwRet))
{
if(dwRet)
bRet = TRUE;
}
if(!VirtualProtectEx(hProcess, (LPVOID)pAddr, sizeof(pRet), dwback, &dwback))
return false;
}
FreeLibrary(hLib);
}
return bRet;
}
它工作正常,但是消息框(空,消息,"检测到",MB_OK); 如果在 BlockApi(..) 之后执行,则会崩溃;
Ausnahme (erste Chance) bei 0x75312113 (user32.dll) in DLLTester.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000002D Unbehandelte Ausnahme bei 0x75312113 (user32.dll) in DLLTester.exe: 0xC000041D: Ausnahmefehler während eines Benutzerrückrufs
谢谢棒棒虻
编辑:我发现,在消息框崩溃发生之前,上一个调用是睡眠(1000);来自我的检测线程!
旧问题(发布模式下崩溃)已修复!
这很简单...
无论谁调用LoadLibrary,都会崩溃。为什么消息框导致加载 DLL?不知道。。。也许它想为图标加载一些资源 DLL。
(作者:帕维尔·
我将尝试将 LdrLoadDll 函数替换为一个函数,该函数使用 GetModuleHandle 检查每个加载的 dll。(我不知道这是否可能!
编辑:对于那些想知道的人:消息框(...);负荷
"C:\WINDOWS\system32\uxtheme.dll"
!
相关文章:
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序