做服装批发必逛的网站,线上产品推广方案,党务公开网站 建设背景,上海网络推广营销策划方案免责声明#xff1a;内容仅供学习参考#xff0c;请合法利用知识#xff0c;禁止进行违法犯罪活动#xff01;
上一个内容#xff1a;46.修复HOOK对代码造成的破坏
以 46.修复HOOK对代码造成的破坏 它的代码为基础进行修改
优化的是让引擎支持从短跳JMP#xff08;E9内容仅供学习参考请合法利用知识禁止进行违法犯罪活动
上一个内容46.修复HOOK对代码造成的破坏
以 46.修复HOOK对代码造成的破坏 它的代码为基础进行修改
优化的是让引擎支持从短跳JMPE9与callE8的位置上支持hook
完整代码地址下载名为 htdHook1.0.zip 的文件 链接https://pan.baidu.com/s/17_aXbMCyexGIlP3Yz_ajIA 提取码ilbw --来自百度网盘超级会员V4的分享 Ollydbg.exe编写硬编码的方式
首先在想要写硬编码的地址上右击选择下图 数据窗口中跟随 然后双击下图黄色框框位置会弹出 编辑此处数据这个窗口然后在HEX 6这个输入框写硬编码就可以了写完点确定就完成了 效果图 优化后的效果图 HOOKPOINT.cpp文件也进行了修改
HOOKPOINT::HOOKPOINT(LPVOID _adr, LPVOID _adrRet, HOOKBACK _hbk, uchar lenth, HOOKPOINT* _BackP, HOOKPOINT* _NextPoint):Address(_adr), AddressRet(_adrRet), DestCall(_hbk), BackPoint{ _BackP }, NextPoint{ _NextPoint }
{DWORD offcount;/**下面是修复 call硬编码是E8 JMP硬编码是E9_adr是要做hook的地方 假设做hook的地方是call xxxxcall 后面的地址是通过它是有一个公式要跳转到的目标地址 - 执行jmp指令的内存地址eip - 5 这个公式算出来的只单纯的对它修复地址是原来的但是这个代码被我们的辅助代码进行了修复也就是它的内存地址进入了辅助代码的内存空间里这就导致要跳转的位置不正确所以对call或者jmp这种跳转做修复时它们后面跟的地址也要使用 要跳转到的目标地址 - 执行jmp指令的内存地址eip - 5 这个公式计算公式里的值全都要用辅助代码给它的哪个地址才可以下面只实现了长跳的jmp与call*/char* code (char*)(_adr);unsigned* u (unsigned*)(code 1);unsigned dest u[0] (unsigned)_adr 5;bool fix{};/**switch的case用的是int类型然后code[0]是一个char类型然后switch会做一个隐形的类型转换所以要把code[0]的值当做int类型来写*/switch (code[0]){case 0xFFFFFFE8: {}case 0xFFFFFFE9:{fix true;break;}default:break;}CodeFix new char[lenth 0x5];memcpy(CodeFix, _adr, lenth);if (fix) {AfxMessageBox(L非借壳是否会卡拉和监考老师);u (unsigned*)(CodeFix 1);u[0] GetJMPCode(dest, (unsigned)CodeFix);}/**下面是之前分析剑侠情缘用来无敌的代码mov [esi 10], edi mov eax, [esi10]jmp Addresslenth // 这个是执行完剑侠情缘原有代码让它再跳回去CodeFix长度是 lenth0x5,lenth是要进行hook位置的指令长度0x5是执行完指令之后让他跳回去*/DWORD dOld;CodeFix[lenth] 0xE9;unsigned* adr (unsigned*)(CodeFix lenth 1);adr[0] GetJMPCode((unsigned)_adr lenth, (unsigned)CodeFix[lenth]);VirtualProtect(CodeFix, lenth0x5, PAGE_EXECUTE_READWRITE, dOld);
}
CWndMain.cpp文件修改修改了OnBnClickedButton2函数
hook.SetHook((LPVOID)0x41FD2C, NewWudi, 5, (LPVOID)0x41FE40);