好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 as614001 于 2021-8-5 16:50 编辑
在开头定义了
bool is_hook_enable_1 = false; //hook开启标志
DWORD hookEnable(BOOL is_hook_enable) {
if (is_hook_enable) return NULL;
MessageBox(NULL, L"3333", L"看看", 0);
is_hook_enable = true;
//hDlg = hModule;
DWORD WeChatWinDLL = getWeChatWinDLL();
//取得hook点
DWORD hook_point = WeChatWinDLL + offset;
BYTE jmpCode[HOOK_INS_LEN] = { 0 };
jmpCode[0] = 0xE9;//jmp 的字节码
//新跳转指令中的数据=跳转的地址-原地址(HOOK的地址)-跳转指令的长度
*(DWORD*)&jmpCode[1] = (DWORD)func - hook_point - HOOK_INS_LEN;//计算并填入跳转的目标地址
//获取进程句柄
HANDLE wx_handle = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetCurrentProcessId());
//备份hook点数据
int rpm_result = ReadProcessMemory(wx_handle, (LPCVOID)hook_point, (LPVOID)bakcode, HOOK_INS_LEN, NULL);
if (rpm_result == 0) {
MessageBox(NULL, L"内存数据读取失败", L"错误", 0);
return NULL;
}
//覆盖hook点数据
int wpm_result = WriteProcessMemory(wx_handle, (LPVOID)hook_point, jmpCode, HOOK_INS_LEN, NULL);
if (wpm_result == 0) {
MessageBox(NULL, L"内存数据写入失败", L"错误", 0);
return NULL;
}
return hook_point;
}
执行
hookEnable(is_hook_enable_1 );
hookEnable(is_hook_enable_1 );
hookEnable(is_hook_enable_1 );
会多次弹窗,看上去是没有赋值到is_hook_enable_1,是因为c++内部变量都是变量?如何可以修改可以生效呢?
百度了下
c++的形参 实参 传递,实参传递的copy值,详见百度 C++中函数变量的引用 。 一脸懵逼的出来啦
加 &
楼下的说得对
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|