前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Inline Hook 详解前言原理分析

Android Inline Hook 详解前言原理分析

作者头像
用户2930595
发布2018-08-23 09:54:25
1.8K0
发布2018-08-23 09:54:25
举报

前言

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

原理分析

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

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

  1. 指令替换 在doInlineHook函数中,直接将origin_log中的前几个指令替换为
代码语言:javascript
复制
LDR.W PC,[?]
addr_new_log

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

  1. 指令修复 在调用原函数的时候,需要将原指令取出来执行,但因为此时的上下文(PC),已经不是之前的PC了,所以原封不动的执行原指令肯定不行,需要做修复,修复说白了就是原来基于PC寻址的,在Hook的时候提前计算好绝对地址,然后用绝对地址寻址。 等效的理解就是原来是个相对路径,换个执行环境后,相对路径需要被替换为等效的绝对路径才不会有错。
  2. 函数跳回 在执行到修复指令的最后,需要和原函数中没有被替换的指令衔接在一起,这时候需要跳回来,在hook时,计算出被替换的指令的位置,最后也是通过LDR.W PC [?]方式跳转回来。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 原理分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档