Love 梦想 发表于 2011-11-30 12:03:39

APIHOOK 公式疑问(回帖奖励)

本帖最后由 Love 梦想 于 2011-11-30 12:05 编辑

获取假冒的API函数地址公式:
假冒的API地址 = 假冒的API地址 - (真正的API地址+5)

这个公式该怎么理解? 我发现很多关于这个关键部分的代码都是用汇编写的... 有没有可以直接用C写的呢~~~

Mr.C 发表于 2011-11-30 12:14:46

先回个贴拿鱼币

川本姨夫 发表于 2011-11-30 12:41:09

假冒API?dll注入?还是dll替换?:dizzy:

Y.H 发表于 2011-11-30 16:22:08

+5据我所了解的是因为最多能修改5字节还是5位.......(因为要修改地址)

实在有点不知道了,因为关于HOOK的资料的确很少....

gkxawy 发表于 2012-8-19 21:37:33

我是回帖来拿鱼币的

ccqiji 发表于 2012-8-20 15:34:33

我只知道API前5个字节是固定格式

7C80B741 8B FF                mov         edi,edi
7C80B743 55                  push      ebp
7C80B744 8B EC                mov         ebp,esp

biackese 发表于 2012-8-21 16:33:17

本帖最后由 biackese 于 2012-8-21 16:34 编辑

= =不是LS说的那些
因为 HOOK就是 把他要调用函数的时候先跳到自己的
然后 过程就简单了

比如 执行API
push 参数 了
然后call ffffffff= =函数
= =就是这么个意思 然后
我们要做的是先要把这个跳到我们的函数处理过里面的参数在去调用原来的API

所以 我们要把call 函数改成   jmp 我们自己的函数    参数压到堆栈就先调自己的函数 去处理参数 或实现其他一些
所以 地址计算 是 自己的函数-真正的函数-5
call 地址一共占5个字节
比如 call的地址 4E0000
我们的4F0000
然后 写的话 JMP实际跳转的是偏移
就是 4E0000到 4F0000的偏移
就是这条指令到我们的假的   中间的差在减5为什吗减5呢 因为真的那个callXXX占了5个字节
其实是从callXX后一条指令到我们假的值就是偏移
然后就是   fffb
然后写进去的内存就是callxxx被写成我们的例子   jmp 0000fffb
当然OD里看到了 就是jmp 4F0000= =因为OD都是把偏移的计算到实际位置的   方便人的观看

木叶客 发表于 2012-12-4 00:01:41

先回个贴拿鱼币

0c那似暮霭 发表于 2013-1-1 22:14:42

luguo看一看   

pcode 发表于 2013-3-1 15:05:49

还能回复?{:1_1:}

pcode 发表于 2013-3-1 15:06:37

回个贴拿鱼币

吾醉梦醒 发表于 2013-7-8 09:38:25

漂亮的解释回答

Liet_Torve 发表于 2013-7-8 11:16:19

见贴必回。

roluce 发表于 2017-7-16 09:25:05


+5据我所了解的是因为最多能修改5字节还是5位.......(因为要修改地址)

实在有点不知道了,因为关于HOOK的资料的确很少....

castile 发表于 2018-1-7 10:24:34

先回个贴拿鱼币

小小小菜菜菜 发表于 2018-12-20 19:47:40

回帖拿鱼币

jjhcctv 发表于 2019-4-10 00:09:12

回帖拿鱼币

_Konglong 发表于 2019-5-8 19:52:06

{:10_275:}

X-Sliver 发表于 2019-8-13 11:57:48

回帖

熊宝宝要当红军 发表于 2019-8-14 08:19:52

我来看看
页: [1] 2
查看完整版本: APIHOOK 公式疑问(回帖奖励)