android hook 程序,Android Hook 原理及应用

Rate this post

什么是hook

Hook的中文意思是“钩子”, 在安卓系统中,不同的应用程序都有触发事件和逻辑处理过程,而hook就是像钩子一样,勾住某个事件,在该事件执行的前或后执行自己的代码。比如,对于一个应用程序,我们不能直接去修改它的代码,就可以通过hook的方式,将自己的代码注入到该应用程序中。

Hook的原理如下,在安卓系统中,每个应用程序的进程都是由Zygote进程产生的,Zygote进程又是由Init进程启动。一个Dalvik虚拟机实例会在Zygote进程启动时被创建,每当一个新的应用进程执行的时候,这个Dalvik虚拟机实例就会被复制到新的应用进程里面,这样,每个应用进程都有一个独立的Dalvik实例。因此,Xposed替换了app_process。XposedBridge中有一个native函数,hookMethodNative, 它在app_process中使用,这个函数让对象可以利用java的反射机制对内置方法进行覆写。

Hook方法的分类

对于安卓的hook机制,可分为两种,第一种需要root权限,他可以hook系统以及所有的应用程序。第二种不需要root权限,局限性是它只能hook自身的进程,不能hook其他的应用程序。

几种常用的hook框架

Xposed

Xposed修改了系统启动时加载的Zygote进程的相关逻辑,和加载的资源,由于所有应用的启动都拷贝自Zygote进程,所以Xposed可以实现hook,做任何事情,甚至修改系统行为。

Xposed包含了4个工程,分别是XposedInstaller, Xposed, XposedBridge, XposedTools。

XposedInstaller app是用来进程整体的管理控制的。它需要有root权限才能够正常运行。功能如下:启用Xposed插件功能,下载和启动指定插件应用程序,禁用Xposed插件功能等等。

Xposed相当于是另一个用于xposed的Zygote,它会替换系统原来的Zygote。因此,需要root之后,由XposedInstaller放到/system/bin目录下。

XposedBridge属于Xposed框架的java部分,编译出XposedBridge.jar包。

XposedTools用来编译Xposed和XposedBridge。

Cydia Substrate

Cydia Substrate与Xposed组件的hook原理其实是一样的,两者都可以作为java hook的框架。Cydia Substrate可以修改任何主进程的代码,即可以是java代码,也可以的native代码(由C或C++编写的)。由于Xposed只可以hook app_process中的java函数,所以Cydia Substrate非常的强大而实用。

Legend

Legend是Lody开源的安卓免root环境下的一个hook框架,代码资源在https://github.com/asLody/legend。这个框架有代码设计简洁,通用性高的特点,适合软件的逆向工程。

总结

本篇文章我们了解了什么是Hook,hook的基本原理,以及常用的hook框架,分别是Xposed,Cydia Substrate,Legend。

如果你有任何问题,欢迎写邮件与我联系,我的邮箱是:219647@supinfo.com

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值