吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14063|回复: 20
收起左侧

[Android 原创] Android Studio + Xposed实现简单的hook(详细篇)

  [复制链接]
Andy0214 发表于 2019-2-20 09:00
本帖最后由 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, 下载次数: 153)
3、一部root的手机或者模拟器
4、将Xposed程序安装到手机上
安装后效果:
Screenshot_2017-08-31-15-21-381.png Screenshot_2017-08-31-15-23-39.png

安装后要安装更新框架:
安装更新.png

三、Hook模块的实现(使用Android Studio实现)
1、创建Xposed工程
(1)建lib文件夹将XposedBridgeApi-xxx.jar拖入其中 :
XposedProject.7z (120.14 KB, 下载次数: 163)
clipboard.png

(2)选中XposedBridgeApi-xxx.jar文件单击右键选择Add As Library导入
clipboard1.png
(3)修改build.gradle->dependencies->****  files(‘lib/XposedBridgeApi-xxx.jar’)的***为provided
clipboard2.png
(4)在AndroidManifest.xml中增加三个meta-data用来标示Xposed模块以及模块信息
clipboard3.png
(5)新建一个类,实现接口IXposedHookLoadPackage以及接口中的handleLoadPackage方法
clipboard4.png
(6)创建assets文件夹
clipboard5.png
(7)在assets文件夹中创建文件xposed_init并在其中写上实现接口IXposedHookLoadPackage类的完整路径
clipboard6.png
(8)要修改的五个地方,切记
clipboard7.png
至此,基本的工作都做完了,然后就是hook想要的东西了

四、Hook基本程序的实现
我的案例是一个登录程序,登录的时候需要账户和密码,我们就来hook这两个参数
具体代码:
参数说明|LoadPackageParam lpparam 这个参数包含了加载的应用程序的一些基本信息。
clipboard9.png
然后我们将写好的hook模块和要hook的程序安装到手机上,打开Xposed程序,勾选添加hook模块
clipboard10.png
重启手机
clipboard11.png
运行我们要hook的程序,在monitor中查看hook到的数据
clipboard12.png
或者在Xposed日志中查看日志:
clipboard13.png

上面介绍到的是hook方法,在方法调用前后hook方法参数;
接下来介绍一下怎么hook某各类中的所有值:
还是上面的登录程序的例子,程序中明文写了要判断登录的账户和密码;我们可以直接hook出来,看看能够成功登录的账户和密码:
登录程序主要代码:
clipboard14.png
我们就hook  ACCOUNT  和   PASSWORD这两个值
在afterHookedMethod方法中实现:
clipboard15.png
注意:
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



免费评分

参与人数 16吾爱币 +27 热心值 +12 收起 理由
媚眼的丹客 + 1 + 1 谢谢@Thanks!
雁字回时月man楼 + 1 + 1 很有用
zyz + 1 感谢发布详细教程
墨香~ + 1 + 1 热心回复!
笙若 + 1 + 1 谢谢@Thanks!
w20064360 + 1 + 1 谢谢@Thanks!
qiujingchao + 1 谢谢@Thanks!
lxj199610 + 1 谢谢@Thanks!
dj1149 + 1 + 1 谢谢@Thanks!
stars-one + 1 + 1 我很赞同!
奥斯特 + 1 + 1 用心讨论,共获提升!
小鱼儿211 + 1 + 1 用心讨论,共获提升!
qtfreet00 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
默之 + 1 热心回复!
威威丶ww + 1 + 1 我很赞同!
汇成千古的守望 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gunxsword 发表于 2019-2-20 12:31
期待更多的后续教程,比如怎么把HOOK的结果,用一个悬浮窗显示出来之类的实用教程,再次感谢!
gunxsword 发表于 2019-2-20 12:24
感谢分享,非常好,条理清晰,之前也看过几个入门的教程,您这个算是讲的最清楚,易懂的了,感觉看过这个.我就会了.呵呵!
汇成千古的守望 发表于 2019-2-20 09:21
王哪摸 发表于 2019-2-20 09:50
牛逼,一点儿都看不懂
ouyanghua 发表于 2019-2-20 10:00
谢谢分享。。。。。
多幸运遇见baby 发表于 2019-2-20 10:08
谢谢@Thanks!
沉浮2018 发表于 2019-2-20 10:15
挺不错的。
weliong 发表于 2019-2-20 10:16
牛 就这样的 还叫简单的hook
头像被屏蔽
yaojing 发表于 2019-2-20 10:36
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 13:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表