gpt4 book ai didi

C++ WriteProcessMemory 使 MessageBox 使程序崩溃

转载 作者:行者123 更新时间:2023-12-02 07:46:42 25 4
gpt4 key购买 nike

我想写一点 AntiHack,但其中一部分有问题。这个想法是通过从 NTDLL.DLL 中 Hook LdrLoadDll 来防止 dll 注入(inject)。我通过谷歌搜索找到了一个可以执行此操作的函数:

// 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;
}

工作正常,但是 MessageBox(NULL, msg, "DETECTED", 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

谢谢,哈哈哈哈哈

编辑:我发现,在 MessageBox 崩溃之前,之前的调用是 Sleep(1000);来 self 的检测线程!

老问题( Release模式下崩溃)已修复!

最佳答案

很简单...

Whoever calls LoadLibrary, will crash. Why MessageBox causes loading a DLL? No idea... maybe it wants to load some resource DLL for the icon.

(作者:帕维尔 A)

<小时/>

我将尝试用一个函数替换 LdrLoadDll 函数,该函数使用 GetModuleHandle 检查每个加载的 dll。 。 (我不知道这是否可能!)

编辑:对于那些想知道的人:消息框(...);负载

"C:\WINDOWS\system32\uxtheme.dll"

!

关于C++ WriteProcessMemory 使 MessageBox 使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com