好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 Andy0214 于 2019-2-20 09:14 编辑
一、Xposed框架实现Hook的原理介绍
Dalvik 孵化器 Zygote是 Android 的核心,每运行一个 app,Zygote 就会 fork 一个虚拟机实例来运行 app,Xposed Framework 深入到了Android 核心机制中,通过改造 Zygote 来实现一些很牛逼的功能。Zygote 的启动配置在/init.rc 脚本中,由系统启动的时候开启此进程,对应的执行文是/system/bin/app_process,这个文件完成类库加载及一些函数调用的工作。
当系统中安装了 Xposed Framework 之后,会对 app_process 进行扩展,也就是说,Xposed Framework 会拿自己实现的app_process 覆盖掉 Android 原生提供的 app_process 文件,当系统启动的时候,就会加载由 Xposed Framework 替换过的进程文件,并且,XposedFramework 还定义了一个 jar 包,系统启动的时候,也会加载这个包:
/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar
二、工具的准备:
1、Android Studio
2、Xposed 安装程序
de.robv.android.xposed.installer_v32_de4f0d.rar
(452 KB, 下载次数: 156)
3、一部root的手机或者模拟器
4、将Xposed程序安装到手机上
安装后效果:
安装后要安装更新框架:
三、Hook模块的实现(使用Android Studio实现)
1、创建Xposed工程
(1)建lib文件夹将XposedBridgeApi-xxx.jar拖入其中 :
XposedProject.7z
(120.14 KB, 下载次数: 165)
(2)选中XposedBridgeApi-xxx.jar文件单击右键选择Add As Library导入
(3)修改build.gradle->dependencies->**** files(‘lib/XposedBridgeApi-xxx.jar’)的***为provided
(4)在AndroidManifest.xml中增加三个meta-data用来标示Xposed模块以及模块信息
(5)新建一个类,实现接口IXposedHookLoadPackage以及接口中的handleLoadPackage方法
(6)创建assets文件夹
(7)在assets文件夹中创建文件xposed_init并在其中写上实现接口IXposedHookLoadPackage类的完整路径
(8)要修改的五个地方,切记
至此,基本的工作都做完了,然后就是hook想要的东西了
四、Hook基本程序的实现
我的案例是一个登录程序,登录的时候需要账户和密码,我们就来hook这两个参数
具体代码:
参数说明|LoadPackageParam lpparam 这个参数包含了加载的应用程序的一些基本信息。
然后我们将写好的hook模块和要hook的程序安装到手机上,打开Xposed程序,勾选添加hook模块
重启手机
运行我们要hook的程序,在monitor中查看hook到的数据
或者在Xposed日志中查看日志:
上面介绍到的是hook方法,在方法调用前后hook方法参数;
接下来介绍一下怎么hook某各类中的所有值:
还是上面的登录程序的例子,程序中明文写了要判断登录的账户和密码;我们可以直接hook出来,看看能够成功登录的账户和密码:
登录程序主要代码:
我们就hook ACCOUNT 和 PASSWORD这两个值
在afterHookedMethod方法中实现:
注意:
1、重写XC_MethodHook的两个方法beforeHookedMethod和afterHookedMethod,这两个方法会在原始的方法的之前和之后执行.
您可以使用beforeHookedMethod 方法来打印/篡改方法调用的参数(通过param.args) ,甚至阻止调用原来的方法(发送自己的结果).
afterHookedMethod 方法可以用来做基于原始方法的结果的事情.您还可以用它来操纵结果 .当然,你可以添加自己的代码,它将会准确地在原始方法的前或后执行.
2、只能 hook 方法和构造方法,不能 hook 接口和抽象方法抽象类中的非抽象方法是可以 hook的, 接口中的方法不能 hook (接口中的method默认是publicabstract抽象的.field 必须是publicstaticfinal)
3、hook 一个类的方法,该类是子类并且没有重写父类的方法,此时应该 hook 父类还是子类.(hook 父类方法后,子类若没重写,一样生效.子类重写方法需要另外 hook) (如果子类重写父类方法时候加上 spuer ,hook 父类依旧有效)
案例中的hook模块和测试的程序源码
所有附件:
链接: https://pan.baidu.com/s/1pQ6BskWhu22t498X5zCs8A 提取码: ysrq
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|