2581559949 发表于 2017-11-5 08:16

是C++ ,可以对EXE内存进行Inline hook吗?请进,例如Jmp进自己的函数,在调回去

例如:
我已经把DLL注入进去了,
然后对EXE 某一个函数进行HOOK      (注意:不是API hook 是任意函数地址hook)
先跳进我dll的函数,执行完了在跳回去,问题是如何知道我自己的函数地址
jmp 0x???????








请问有例子吗,我需要一个例子,是C++ 的 谢谢

youxiaxy 发表于 2017-11-5 08:16

C中函数名就可以代表 函数首地址。   HOOKAPI 和 HOOK EXE 代码原理都是一样的。没什么差别。基本都是    修改 原始地址 使其 跳转到 我们的函数执行。——》当我们的函数执行完成后--》继续执行 原始代码并跳回到 原始函数 对应位置继续执行。   
例子: EXE是 易语言写的。按钮 调用 一个 子程序    子程序中 会提示一个 信息框;
(只会弹出 一个消息框)
dll是 VC6 写的。 hook掉了 Exe 的 按钮事件 和 子程序   。
(HOOK后。会弹出3个消息框。)

。。看样子是楼主基础知识略显薄弱。有待提高了。

一个good而已 发表于 2017-11-5 12:42

x86中
jmp操作数=目的地址-当前地址-5

2581559949 发表于 2017-11-5 20:23

本帖最后由 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

youxiaxy 发表于 2017-11-5 20:53

2581559949 发表于 2017-11-5 20:23
感谢你,请问有QQ吗? 我想提高这些部分,该看那些教程
另外,我发现你的这个hook代码,有问题?



代码调用 过你的DLL 函数之后   在其他内存段部分执行了 这些PUSH EBP之类的 被占用的指令 ,然后才走到这里。。。。。至于 while这一段 是参数。用于 hook有参数的 函数,。

youxiaxy 发表于 2017-11-5 20:56

2581559949 发表于 2017-11-5 20:23
感谢你,请问有QQ吗? 我想提高这些部分,该看那些教程
你好,你写的这段代码,我没看懂,请问是什么意 ...

你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址。不一定要函数头。不过如果不是HOOK函数头、就不能 带参数....

2581559949 发表于 2017-11-5 22:48

youxiaxy 发表于 2017-11-5 20:56
你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址 ...

最后请问下,你hook头部后,push ebp这些都没有了
调用完毕不恢复,堆栈不平衡,不会崩溃吗?难道内部会自动平衡?

youxiaxy 发表于 2017-11-6 09:01

2581559949 发表于 2017-11-5 22:48
最后请问下,你hook头部后,push ebp这些都没有了
调用完毕不恢复,堆栈不平衡,不会崩溃吗?难道内部会 ...

SetHOOK   函数 会将 原来的 函数的   被 JMPxxxxxxxx占用的完整指令字节复制到 其他地方 用于 继续执行。 比如:
hOOK 了 函数头部, 占用了


当执行到被HOOK函数的时候。跳转到这里执行。先去 保存 寄存器, 然后 调用的 你的函数,在恢复寄存器。然后 执行 原始 函数的 被占用部分的指令最后调回 (原函数+ 被占用字节)的位置继续执行,

,,
调用 完毕,
该执行的指令(原始函数的指令)一句不少的执行了。。
堆栈 和寄存器   还是原来的   堆栈和寄存器。(   如果你不修改的话)。 。

又怎么可能会炸呢。

2581559949 发表于 2017-11-9 16:38

youxiaxy 发表于 2017-11-5 20:56
你仔细看 例子。里面 演示了 hook有参数的 函数 和 没有参数的 函数。这段代码可以 hook 在 任意地址 ...
请你帮我看看我的另外一个问题,谢谢https://www.52hb.com/thread-34679-1-1.html
页: [1]
查看完整版本: 是C++ ,可以对EXE内存进行Inline hook吗?请进,例如Jmp进自己的函数,在调回去