是C++ ,可以对EXE内存进行Inline hook吗?请进,例如Jmp进自己的函数,在调回去
例如:我已经把DLL注入进去了,
然后对EXE 某一个函数进行HOOK (注意:不是API hook 是任意函数地址hook)
先跳进我dll的函数,执行完了在跳回去,问题是如何知道我自己的函数地址
jmp 0x???????
请问有例子吗,我需要一个例子,是C++ 的 谢谢
C中函数名就可以代表 函数首地址。 HOOKAPI 和 HOOK EXE 代码原理都是一样的。没什么差别。基本都是 修改 原始地址 使其 跳转到 我们的函数执行。——》当我们的函数执行完成后--》继续执行 原始代码并跳回到 原始函数 对应位置继续执行。
例子: EXE是 易语言写的。按钮 调用 一个 子程序 子程序中 会提示一个 信息框;
(只会弹出 一个消息框)
dll是 VC6 写的。 hook掉了 Exe 的 按钮事件 和 子程序 。
(HOOK后。会弹出3个消息框。)
。。看样子是楼主基础知识略显薄弱。有待提高了。 x86中
jmp操作数=目的地址-当前地址-5
本帖最后由 2581559949 于 2017-11-5 20:50 编辑
youxiaxy 发表于 2017-11-5 08:16
C中函数名就可以代表 函数首地址。 HOOKAPI 和 HOOK EXE 代码原理都是一样的。没什么差别。基本都 ...
感谢你,请问有QQ吗? 我想提高这些部分,该看那些教程
你好,你写的这段代码,我没看懂,请问是什么意思
while(dwArgCount)
{
*((DWORD*)lpTmp)=(DWORD)(0x282474FFUL + ((dwArgCount*4)<<24));
dwArgCount--;
lpTmp+=4;
}
*lpTmp++=0xFF;
*lpTmp++=0x15;
*((DWORD*)lpTmp)=(DWORD )lpAddress+4;
0x282474FFUL
2581559949 发表于 2017-11-5 20:23
感谢你,请问有QQ吗? 我想提高这些部分,该看那些教程
另外,我发现你的这个hook代码,有问题?
代码调用 过你的DLL 函数之后 在其他内存段部分执行了 这些PUSH EBP之类的 被占用的指令 ,然后才走到这里。。。。。至于 while这一段 是参数。用于 hook有参数的 函数,。 2581559949 发表于 2017-11-5 20:23
感谢你,请问有QQ吗? 我想提高这些部分,该看那些教程
你好,你写的这段代码,我没看懂,请问是什么意 ...
你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址。不一定要函数头。不过如果不是HOOK函数头、就不能 带参数.... youxiaxy 发表于 2017-11-5 20:56
你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址 ...
最后请问下,你hook头部后,push ebp这些都没有了
调用完毕不恢复,堆栈不平衡,不会崩溃吗?难道内部会自动平衡? 2581559949 发表于 2017-11-5 22:48
最后请问下,你hook头部后,push ebp这些都没有了
调用完毕不恢复,堆栈不平衡,不会崩溃吗?难道内部会 ...
SetHOOK 函数 会将 原来的 函数的 被 JMPxxxxxxxx占用的完整指令字节复制到 其他地方 用于 继续执行。 比如:
hOOK 了 函数头部, 占用了
当执行到被HOOK函数的时候。跳转到这里执行。先去 保存 寄存器, 然后 调用的 你的函数,在恢复寄存器。然后 执行 原始 函数的 被占用部分的指令最后调回 (原函数+ 被占用字节)的位置继续执行,
,,
调用 完毕,
该执行的指令(原始函数的指令)一句不少的执行了。。
堆栈 和寄存器 还是原来的 堆栈和寄存器。( 如果你不修改的话)。 。
,
又怎么可能会炸呢。
youxiaxy 发表于 2017-11-5 20:56
你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址 ...
请你帮我看看我的另外一个问题,谢谢https://www.52hb.com/thread-34679-1-1.html
页:
[1]