想修改MessageBeep的的内存 实现加载DLL, 在Win7-64位下运行正常, 但是拿到Win10-64位上运行时, 在LoadLibraryExA()内部访问越界, 请高手指点原因.
bool CTestInjectDlg::BeepToLoad()
{
char tLoad[] = {
0x40, 0x57, /* 0-2 push rdi */
0x45, 0x33, 0xc0, /* 2-3 xor r8d, r8d */
0x33, 0xd2, /* 5-2 xor edx, edx */
0x48, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*7-10 lea rcx, qwrod ptr ["AAA32.dll"]*/
0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*17-10 mov rax, [LoadLibraryExA] */
0xff, 0xd0, /* 27-2 call rax, */
0x33, 0xC0, /* 29-2 xor eax, eax */
0x5f, /* 30-1 pop rdi */
0xc3 /* 31-1 ret */
};
*(__int64*)(tLoad+9) = (__int64)DLL_NAME;
*(__int64*)(tLoad+19) = (__int64)LoadLibraryExA;
HANDLE tProc = GetCurrentProcess();
SIZE_T tLen = 0;
bool tRet = WriteProcessMemory(tProc, (LPVOID)MessageBeep, tLoad, 32, &tLen);
if(false == tRet)
MessageBox("WriteProcessMemory FAIL", 0, 0);
else
MessageBox("WriteProcessMemory SUCC", 0, 0);
return tRet;
}
void CTestInjectDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_Addr_MessageBeep = (FUNC_MessageBeep)MessageBeep;
BeepToLoad();
//MessageBeep(tRet);
}
void CTestInjectDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_Addr_MessageBeep(0);
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!