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

Android Inline Hook 详解前言原理分析

作者头像
用户2930595
发布于 2018-08-23 01:54:25
发布于 2018-08-23 01:54:25
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

前言

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

原理分析

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

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

  1. 指令替换 在doInlineHook函数中,直接将origin_log中的前几个指令替换为
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android平台inline hook实现[转载]
Inline Hook在之前文章有较多概念性描述,本文则侧重介绍如何去实现一个Inline Hook,并且关注一些实现过程中会遇到的困难与挑战。
用户2930595
2018/08/23
1.3K0
Android平台inline hook实现[转载]
如何编写一个Android inline hook框架
缺点:1、不支持函数替换(即hook后不执行原函数),现在只能修改参数寄存器,无法修改返回值。2、不支持定义同类型的hook函数来接受处理参数,只能通过修改寄存器的方式修改参数。多余4个/或者占两个字节的参数,那么参数还要自己从栈上捞取。所以issues中说的把mov r0,sp去掉用来接收参数也是有问题的,就是参数在栈上的情况,传过来的时候sp不是原来的sp了。
FB客服
2020/02/26
3.5K0
Android Native Hook
Hook 直译过来就是“钩子”的意思,是指截获进程对某个 API 函数的调用,使得 API 的执行流程转向我们实现的代码片段,从而实现我们所需要得功能,这里的功能可以是监控、修复系统漏洞,也可以是劫持或者其他恶意行为。
xiangzhihong
2022/11/30
1.3K0
uboot的relocation原理详细分析「建议收藏」
最近在一直在做uboot的移植工作,uboot中有很多值得学习的东西,之前总结过uboot的启动流程,但uboot一个非常核心的功能没有仔细研究,就是uboot的relocation功能。
全栈程序员站长
2022/06/28
1.7K0
【Android 逆向】函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )
在 【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 ) 一、修改内存页属性 基础上 , 先修改内存页属性 , 取得修改内存的权限 ;
韩曙亮
2023/03/29
6860
android 的hook技术,Android Native Hook技术(一)
ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现。该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是注入的so本身,提供了inline hook能力。
全栈程序员站长
2022/09/01
9880
C++内存加密动态免杀defender
一种规避杀软检测的技术就是内存加密技术。由于杀软并不是一直扫描内存,而是间隙性的扫描敏感内存,因此可以在cs的shellcode调用sleep休眠将可执行内存区域加密,在休眠结束时再将内存解密来规避杀软内存扫描达到免杀的目的。
Creaper
2023/11/20
3.1K0
C++内存加密动态免杀defender
【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )
实际函数 的 函数指针为 unsigned char* pFunc , 拦截函数 的函数指针为 unsigned char* pStub , 在执行 pFunc 函数时 , 无条件跳转到 pStub 函数中 ;
韩曙亮
2023/03/29
1.2K0
4.2 Inline Hook 挂钩技术
InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、开发等领域。本章将重点讲解Hook是如何实现的,并手动封装实现自己的Hook挂钩模板。
王瑞MVP
2023/09/14
6820
4.2 Inline Hook 挂钩技术
【Android 逆向】函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )
【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 ) 博客中简单介绍了 hook 函数 ( 函数拦截 ) 的流程 , 本系列博客介绍函数拦截实例 ;
韩曙亮
2023/03/29
1.6K0
x86平台inline hook原理和实现
0x1000地址的call指令执行后跳转到0x3000地址处执行,执行完毕后再返回执行call指令的下一条指令。
全栈程序员站长
2022/09/06
8460
x86平台inline hook原理和实现
Android安全-SO动态库注入
所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。
战神伽罗
2019/07/22
2.7K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。
用户2930595
2018/08/23
4.2K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
HOOK原理
HOOK中文译为“挂钩”或“钩子”。在iOS逆向中是指改变程序运行流程的一种技术。通过HOOK技术可以让别人的程序执行自己所写的代码。在逆向中经常使用这种技术。所以在学习过程中,我们重点要了解其原理,这样能够对恶意代码进行有效的防护。
conanma
2021/10/28
1.1K0
我为Dexposed续一秒——论ART上运行时 Method AOP实现
两年前阿里开源了Dexposed 项目,它能够在Dalvik上无侵入地实现运行时方法拦截,正如其介绍「enable ‘god’ mode for single android application」所言,能在非root情况下掌控自己进程空间内的任意Java方法调用,给我们带来了很大的想象空间。比如能实现运行时AOP,在线热修复,做性能分析工具(拦截线程、IO等资源的创建和销毁)等等。然而,随着ART取代Dalvik成为Android的运行时,一切都似乎戛然而止。
weishu
2018/09/05
1.8K0
我为Dexposed续一秒——论ART上运行时 Method AOP实现
4.1 应用层Hook挂钩原理分析
InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、等领域。本章将重点讲解Hook是如何实现的,并手动封装实现自己的Hook挂钩模板。
王瑞MVP
2023/09/14
3880
4.1 应用层Hook挂钩原理分析
8种HOOK技术[通俗易懂]
IAT是程序中存储导入函数地址的数据结构,如果HOOK了导入函数地址。就可以在函数调用的时候,将函数流程HOOK到我们指定的流程。但是我个人觉得这种方式最好要结合DLL注入的方式,如果单纯的使用HOOK,那么就需要将需要执行的操作的shellcode写入目标进程,如果操作复杂,可能需要的shellcode量特别大,所以我们需要借助DLL注入,这样就将我们需要执行的代码写入进程内部,在HOOK的Detour函数只需要实现LoadLibrary的操作。
全栈程序员站长
2022/09/01
3.4K0
【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 ) 博客中简单介绍了 hook 函数 ( 函数拦截 ) 的流程 , 本篇博客开始介绍函数拦截实例 ;
韩曙亮
2023/03/29
1.1K0
Libc Realpath缓冲区下溢漏洞分析
2018年1月11日由Jakub Wilk发现并公布该漏洞,CVE编号为CVE-2018- 1000001,利用该漏洞可以实现Linux系统本地提权。
De4dCr0w
2019/02/27
1.5K0
【图片+代码】:GCC 链接过程中的【重定位】过程分析
最近因为项目上的需要,利用动态链接库来实现一个插件系统,顺便就复习了一下关于Linux中一些编译、链接相关的内容。
IOT物联网小镇
2022/04/06
8390
【图片+代码】:GCC 链接过程中的【重定位】过程分析
推荐阅读
相关推荐
Android平台inline hook实现[转载]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验