Android Inline Hook 详解

作者: difcareer | 来源:发表于2016-12-23 19:03 被阅读970次

前言

网上有几篇关于Android inline hook的文章,这篇尤其不错,还有对应的示例代码。为了方便调试看结果,我将其改为gradle工程,代码见这里。你需要将其导入的AS中,然后就可以进行native debug来调试分析原理了。

原理分析

在改动后的代码中,我的目标是hook住origin_log,然后在桩函数new_log中执行自己的逻辑,并能够调用原函数。

直接来分析最重要的几步:

  1. 指令替换
    在doInlineHook函数中,直接将origin_log中的前几个指令替换为
LDR.W PC,[?]
addr_new_log

并将原指令保存起来,这样在调用origin_log的时候,直接就跳转到new_log中。

  1. 指令修复
    在调用原函数的时候,需要将原指令取出来执行,但因为此时的上下文(PC),已经不是之前的PC了,所以原封不动的执行原指令肯定不行,需要做修复,修复说白了就是原来基于PC寻址的,在Hook的时候提前计算好绝对地址,然后用绝对地址寻址。
    等效的理解就是原来是个相对路径,换个执行环境后,相对路径需要被替换为等效的绝对路径才不会有错。

  2. 函数跳回
    在执行到修复指令的最后,需要和原函数中没有被替换的指令衔接在一起,这时候需要跳回来,在hook时,计算出被替换的指令的位置,最后也是通过LDR.W PC [?]方式跳转回来。

这三部关键位置完成,就完美的将桩插入到目标函数中了。

如果觉得我的文章对你有帮助,想要打赏我,请扫下面的微信(吐槽下简书的打赏提现略坑)

Paste_Image.png

相关文章

  • Android Inline Hook 详解

    前言 网上有几篇关于Android inline hook的文章,这篇尤其不错,还有对应的示例代码。为了方便调试看...

  • Android Inline Hook详解

    Hook Hook在Android系统的应用根据框架层次可以分为两类,Java层和Native层,常见的实现方式如...

  • Android inline Hook

    前言 上一章介绍了java层使用Xposed的HOOK,但是Xposed无法对so层进行Hook,这里我们就讨论一...

  • Android Arm Inline Hook

    相信有搞过Windows开发的都会跟我一样感慨吧,相比起Win32 Ring3的Inline hook Arm的I...

  • HOOK SSDT(inline hook)

    HOOK SSDT(inline hook)主要代码: 更多游戏逆向视频www.yxfzedu.com

  • hook原理小结

    常用的hook方式主要有导入表hook、导出表hook和inline hook三种。 一,导入表hook 首先需要...

  • Android平台inline hook实现[转载]

    转自游戏安全实验室 Inline Hook在之前文章有较多概念性描述,本文则侧重介绍如何去实现一个Inline H...

  • HOOK了MessageBoxW函数

    说明 该函数通过消息hook注入dll到目标程序,之后通过inline hook 了messageboxw函数的头...

  • Linux Preload Hook原理与实践

    Preload简介Linux常见Hook技术对比函数调用类型内核模块Hook应用层Inline HookGot表应...

  • Android实现so的hook(Android-Inline-

    需求:给一个目标apk,要求hook它的native层代码,但是不能修改它原本的so文件。 实现方法:通过/pro...

网友评论

本文标题:Android Inline Hook 详解

本文链接:https://www.haomeiwen.com/subject/ltokvttx.html