首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带Detours的API挂钩

不带Detours的API挂钩
EN

Stack Overflow用户
提问于 2012-01-24 20:52:56
回答 2查看 5.9K关注 0票数 6

简介: Windows 7 64位.C++。64位应用程序和DLL的.没有的挂钩.

问题:--我在获得一个演示在中挂钩的工作示例的问题上遇到了困难。大部分的out似乎都是在32位Windows是唯一的操作系统的时候编写的.从那以后,我克服了理解的64位障碍,成功地注入了一个DLL。我在这个知识之旅的下一个步骤是联系。出于对这个话题的怀旧,微软的Detours不支持64位(免费),我当然不会为任何东西支付1万美元。因此,我在本教程中采用了传统的方法。

这个tut很棒,但是我在理解这个片段时遇到了一点困难:

代码语言:javascript
复制
void BeginRedirect(LPVOID newFunction)
{
    BYTE tempJMP[SIZE] = {0xE9, 0x90, 0x90, 0x90, 0x90, 0xC3};
    memcpy(JMP, tempJMP, SIZE);
    DWORD JMPSize = ((DWORD)newFunction - (DWORD)pOrigMBAddress - 5);
    VirtualProtect((LPVOID)pOrigMBAddress, SIZE, 
                PAGE_EXECUTE_READWRITE, &oldProtect);
    memcpy(oldBytes, pOrigMBAddress, SIZE);
    memcpy(&JMP[1], &JMPSize, 4);
    memcpy(pOrigMBAddress, JMP, SIZE);
    VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
}

特别是,我正在努力处理tempJMP字节和所有的memcpy。我有一个我想劫持的记事本的InsertDate()函数的地址,但是我不确定它的目标是什么.这是新功能的地址吗?或者它不是相对的?我只是在找一些指点。

EN

回答 2

Stack Overflow用户

发布于 2012-05-11 08:59:00

Hotpatchable函数从下面的指令mov、edi开始,并在前面加上5个NOP指令(如果我记得正确的话,代码洞穴)。

当热补丁,移动edi,edi被覆盖在代码洞穴的短跳转。代码洞穴也会重新编写,跳转到钩子处理程序(拦截API调用的函数,然后将其转发给真正的API函数)。

票数 2
EN

Stack Overflow用户

发布于 2012-02-21 13:48:59

整个想法是“覆盖”执行Messagebox的原始代码:

代码语言:javascript
复制
JuMP <CustomMessageBoxFunction>
RETurn (back to program execution) 

所以,

首先,他将其外壳代码复制到JMP数组中:

代码语言:javascript
复制
 memcpy(JMP, tempJMP, SIZE);

然后,他将原始汇编代码字节从原始地址复制到临时存储"oldBytes“,以便在执行自定义函数后将其复制回来:

代码语言:javascript
复制
memcpy(oldBytes, pOrigMBAddress, SIZE);

然后,他将先前计算的地址大小复制到JMP命令之后的jmp数组中:

代码语言:javascript
复制
memcpy(&JMP[1], &JMPSize, 4);

最后,他的JMP[]数组包含调用其函数所需的外壳代码。

代码语言:javascript
复制
JMP 1234
RET

因此,现在他必须将其复制到程序希望找到原始MessageBox函数的原始字节上:

代码语言:javascript
复制
memcpy(pOrigMBAddress, JMP, SIZE);

现在来问您的问题,如果您想挂起InsertDate(),那么您可以使用InsertDate的地址,而不是使用pOrigMBAddress。

但我不确定这是否适用于64位窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8993979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档