分类

安卓应用安卓游戏苹果应用攻略资讯

          资讯

          inline

          作者:56手游   来源:www.56.com.cn   日期:2024-03-04 19:00

          hook 计算机里面一般是指 挂钩某函数, 就是替换掉原来的函数。

          inline hook , 是直接在以前的函数替里面修改指令,用一个跳转或者其他指令来达到挂钩的目的。

          这是相对普通的hook来说,因为普通的hook只是修改函数的调用地址,而不是在原来的函数体里面做修改。

          一般来说 普通的hook比较稳定使用。 inline hook 更加高级一点,一般也跟难以被发现。所以很多人比如病毒制作者都比较推崇inline hook。

          静态InlineHook的简单实现

          inline hook 是直接在以前的函数替里面修改指令,用一个跳转或者其他指令来达到挂钩的目的。

          ssdt是利用api来挂钩的,相当于替换API,用ICESword可以很简单的判断出来。

          底下是我在网上看过一篇文章的说的一个比喻,刚好能回答你的问题:

          如果说SSDT Hook只是把某位"内核API先生"绑架,然后用我们的“自己人”来接管其工作,而ICESword却可以从其他联系途径找到被绑架的"内核API先生"并“报警”,那么——Inline Hook可以说是给"内核API先生"动了手术,让他成为"我们阵营的一分子"。

          呵呵,很幽默的一个比喻

          inline

          C++实现inline hook,注入后程序异常退出

          前文说到使用 基于LIEF的InlineHook实现 ,在这里我们再借助 keystone 和 capstone 来完善一下这个想法,解决一些比较枯燥且容易出错的事,比如 地址偏移的计算,指令备份还原 ...

          我这么描述可能还是不直观,直接上IDA看看我们效果

          hook之后使用三条指令跳转到 trampolines

          [手动狗头].png

          你要搞清楚一个概念,DLL被加载后地址是要重定位的,所有的全局变量、函数这些,都会随DLL加载的基址不同,地址会进行对应偏移的。

          你WriteProcessMemory那句,往oldFunctionAddr地址写东西,肯定会引起异常的,谁知道被你hook的程序这个地址是啥东西?有没有分配过内存呢?

          你要往被注入进程写东西,就必须先用VirtualAllocEx申请内存,你一定要牢记这个概念,所有地址都是动态的,函数、全局变量只有偏移量是固定的。

          以上就是关于inline HOOK啥意思的?全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

          相关文章

          推荐应用

          猜您喜欢

          网友评论

          我要跟帖
          取消
          所有评论 共 0