被你放弃N次的Android框架,可以捡起来了

发表于:2020-12-11 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:高宇    来源:51Testing软件测试网原创

分享:
  摘要:Xposed(也被称作Xposed框架、XP框架、Xposed framework),是运行于Android操作系统的一个著名的免费开源Hook框架。其通过替换Android系统的关键文件,可以拦截几乎所有Java函数的调用,并允许通过模块扩展方式来实现各种功能,模块中的自定义代码可以更改调用函数时的行为,常被用来修改Android系统和应用程序的功能。用户可以在一些应用商店或其自带的下载库来下载安装各种模块,相比于重新安装系统来获得新功能,Xposed提供了一种更便捷的方式[1][2]。Xposed模块可以很容易的开启和关闭。你只需要激活或者禁用Xposed模块,然后重启手机即可。
Xposed框架的标志
  但如今,随着Android系统的不断更新,Xposed框架逐渐无法在新设备上运行。此时,EdXposed团队成为了后续版本研发的继任者。2019年1月,ElderDrivers完成了EdXposed的开发。EdXposed是一个Magisk模块,依赖于riru框架,成功将Xposed移植到了Android Pie上,成为最接近原版Xposed的框架。2019年9月,EdXposed正式支持Android Q。2020年1月,EdXposed与Xposed原开发团队达成共识,成为Xposed停止更新后的官方接任者[3]。
  EdXposed有如下几个特点:
  1. 完全支持Android Pie和Q,甚至也可以支持R。
  2.EdXposed具有“应用列表”模式。可以选择要应用Xposed模块进行hook的的应用程序,而系统中的其他应用程序在完全干净的环境中运行。
  3. EdXposed使用Riru注入,不修改libart和app_process。
  安装和使用
  对于Xposed,Xposed Installer是Xposed框架的官方安装器,可以在拥有root权限的设备上安装Xposed框架。Xposed Installer也提供模块的下载、管理、日志显示等功能[4]。鉴于Xposed已经不再适用于新的Android系统,并且网上已经有非常多的教程,在此就不再赘述了。下面着重介绍一下EdXposed的安装方法。
  由于框架的核心点是系统进程注入技术,需要拥有设备的root权限,而且针对不同型号的设备和系统版本需要选择正确的框架版本,满足条件才能安装。
  首先,我们需要解除手机的BL锁,对于不同品牌的手机,解锁方式有所不同。以小米手机为例,可以在官方网站进行申请,步骤较为简单[5]。
  其次,需要在手机上安装第三方Recovery,此处以TWRP为例。
  2.1. 下载并安装ADB/FASTBOOT支持,安装完成后启动手机进入fastboot模式,连接电脑。在命令行中输入fastboot devices并执行,如果显示当前的连接手机,则安装成功。
  2.2. 打开TWRP官网[6],在Devices页面选择自己的机型对应的TWRP安装包,例如小米6,进入后点击对应的下载链接:

  点击想要下载的版本,如twrp-3.4.0-0-sagit.img进行下载:
  下载完成后,在命令行中输入“fastboot flash recovery D:\twrp-3.4.0-0-sagit.img”(刚刚下载的twrp路径)并执行。
  提示刷入成功后,重启进入twrp Recovery页面,如小米是同时按开机键和音量上键进入。
  2.3. 下载Magisk的zip卡刷包和apk安装文件(https://www.download-magisk.com),并使用数据线导入到手机中。在twrp首页,点击“安装”,选择刚刚下载的Magisk的zip包进行安装。
  安装成功后,重启系统,安装Magisk的apk管理软件。
  打开Manager应该可以看到安装成功的页面。
  2.4. 参考EdXposed的官方文档的Install步骤[7],安装EdXposed:
  2.4.1. 在Magisk Manager的“下载”中安装 Riru(Riru - Core)和 Riru - EdXposed 后重启手机。
  2.4.2. 下载安装EdXposed Manager[8],安装完成后打开可以看到EdXposed框架已激活。
  开发
  本节中将介绍如何在AndriodStudio 4.0.1开发环境下创建一个简单的EdXposed模块。其实,EdXposed模块也是一个 Android 程序。与普通程序不同的是,编写EdXposed模块时需要完成以下4个任务:
  1)让手机上的EdXposed框架知道我们安装的这个程序是个EdXposed模块。
  2)模块里要包含有EdXposed的API的jar包,以实现下一步的Hook操作。
  3)这个模块里面要有对目标程序进行Hook操作的方法。
  4)要让手机上的EdXposed框架知道,我们编写的EdXposed模块中,哪一个方法是实现Hook操作的。
  下面开始按步骤进行:
  3.1. 新建项目,可以选择Empty Activity,进入项目页面,在项目目录中找到AndroidManifest.xml文件,插入如下代码:
  本步骤主要对Xposed模块进行声明。
  3.2. 手机连接Android Studio,运行刚刚编写的代码,在手机里会安装一个app,同时,EdXposed框架中会显示出这个模块。
  3.3. 配置Xposed API的依赖。在AndroidStudio 4.0.1中,可以在项目目录中找到build.gradle,插入以下代码。完成之后,build.gradle会提示文件已经修改,点击 “sync now”进行同步。
  本步骤设置了jcenter作为代码仓库,直接从这个仓库里远程寻找de.robv.android.xposed:api:82 的API。
  3.4. 下面打开activity_main.xml,在界面上加入一个button,并在MainAcitiviy里插入以下代码:
  本步骤在MainActivity界面上加入了一个按钮,打开app后点击按钮后会弹出一个toast提示,该提示的内容由 toastMessage() 方法提供,而toastMessage()的返回值为“我在正常运行”。
  至此,我们已经搭建好一个app靶子,其中包含一个之后用来hook的按钮,在关闭和启动Xposed模块时会显示不同的toastMessage。
  3.5. 下面编写hook代码。在MainActivity的路径下新建一个类“HookTest.java”,插入以下代码:
  此处通过IXposedHookLoadPackage接口中的handleLoadPackage方法来实现Hook并篡改按钮的toastMessage。需要设置目标程序的包名,在XposedHelpers.findAndHookMethod中设置想要Hook的类和方法。在afterHookedMethod方法(用来定义Hook了目标方法之后的操作)中,修改了toastMessage()方法的返回值为“嘿嘿!你已被劫持!”,对应之前点击按钮后显示的文字提示。
  3.6. 下面设置Xposed模块入口。在main文件夹中新建assets文件夹,并在其中新建文件xposed_init,文件类型text,并在其中填写刚刚编写的hook类路径“com.example.test.HookTest”。此时,EdXposed框架就能够从这个 xposed_init 读取信息来找到模块的入口,然后进行Hook操作了。
  3.7. 在File -> Settings -> Build, Execution, Deployment ->Debugger找到hotSwap,把Enable hotswap的勾去掉。
  3.8. 点击“运行”!在EdXposed框架里找到自己写的模块,打上勾启动模块,重启手机。
  3.9. 打开app点击按钮显示劫持成功。
  总结
  本文介绍了EdXposed框架的前世今生,安装使用和模块编写,而EdXposed框架的强大不止于此,更多功能大家有兴趣可以自己体验。
  Reference:
  [1].https://www.xda-developers.com/xposed-framework-hub/
  [2].https://github.com/rovo89/XposedBridge/wiki/Development-tutorial#how-xposed-works
  [3].https://zh.wikipedia.org/zh-hans/Xposed_(%E6%A1%86%E6%9E%B6)
  [4].https://repo.xposed.info/module/de.robv.android.xposed.installer
  [5].http://www.miui.com/unlock/index.html 
  [6].https://twrp.me/
  [7].https://github.com/ElderDrivers/EdXposed 
  [8].https://github.com/ElderDrivers/EdXposedManager/releases 

      版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号