一、Xposed框架简介

● Xposed是Android平台上的一个常用的HOOK框架,可以在不改变程序源代码的前提下,影响程序的运行。一个支持Xposed的Android应用程序被称为一个Xposed模块,用户可以在Xposed中安装各种各样的Xposed模块,在启用或关闭Xposed模块之后,需要重新引导系统才能生效。
● Xposed模块使用Java语言开发,这意味着开发人员可以使用Android Studio开发一个自己的Xposed模块,就像开发一个Android应用程序一样简单。

二、Xposed框架安装

● 安装Xposed框架的前提是手机要有root权限,或者有第三方Recovery
● 在Android手机上安装Xposed是一件有风险的事,在尝试之前需要对手机的Recovery、root等知识有一定的了解,否则请不要贸然尝试。同时不建议在日常使用的手机上尝试安装Xposed框架,因为一些应用程序可以检测它,并且以此为理由来封禁您的帐号(例如微信)。
● Xposed有两种安装方法,第一种是通过Xposed Installer来安装,首先安装上Xposed Installer,它会自动检测手机的Android版本,同时可以下载Xposed来执行安装,安装时候可以直接进行安装(可能需要root权限)也可以通过Recovery来安装。第二种方式就是直接下载Recovery的包来安装,使用Recovery进行刷入。

三、Xposed框架开发环境搭建

● 上文已经提到,开发一个Xposed模块并不困难,因为Xposed模块也是使用Java语言开发的,这里使用Android Studio来开发一个Xposed模块。
在创建好工程之后,首先需要配置Gradle,以添加Xposed依赖库,在app文件夹下的build.gradle文件中,将以下语句添加到dependencies中:

compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

在旧版本的Gradle中,上面的语句应该替换为:

provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'

这样就配置好了Xposed的依赖库,下面我们需要在AndroidManifest.xml中,声明本程序是一个Xposed模块,在中添加以下XML语句:

<meta-dataandroid:name="xposedmodule"android:value="true"/>
<meta-dataandroid:name="xposeddescription"android:value="My Xposed Module"/>
<meta-dataandroid:name="xposedminversion"android:value="54"/>

● 上面三个meta-data指定了Xposed模块标识、Xposed模块描述(显示在Xposed Installer中的模块库中)以及最低Xposed版本。
● 最后,我们在工程的assets文件夹下新建一个文本文件,命名为xposed_init,这个文件用于配置Xposed的入口类名,在文件中直接写入实现了IXposedHookLoadPackage接口的类名即可,本类中的实例为:

cn.xiaolus.xposed_xiaolu.XposedMain

经过上述配置,Xposed开发环境就已经准备完毕,可以开始编写Xposed模块了。

四、Xposed API使用

● Xposed最常用的功能就是修改函数的行为,例如返回值,这里也只阐述这部分API的使用。首先我们新建一个Java类,命名为XposedMain,位于包cn.xiaolus.xposed_xiaolu当中,这和xposed_init中的配置一致,该类需要实现IXposedHookLoadPackage接口。在该接口中,提供了一个名为handleLoadPackage的方法,这个方法在Android系统每次加载一个包的时候都会被调用。

public class XposedMain implements IXposedHookLoadPackage {/*** 加载每个包时的回调方法* @param loadPackageParam 加载的Package的参数* @throws Throwable*/@Overridepublic void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) {//Do something}
}

如前所属,因为在每个包加载的时候这个方法都会被调用,所以请勿在此方法中编写耗时的操作,否则整个系统都可能会卡死。一般而言我们只需要关心我们目标程序所在的包即可,通过以下的方法可以取出加载的包名:

@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) {//判断当前加载的包名if(loadPackageParam.packageName.equals("cn.xiaolus.syscheck")) {//Do something}
}

对于我们关心的包来说,我们还需要找到对应的类和方法,这样才可以修改其运行的行为,通过以下代码可以实现我们的目标:

@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) {// 判断当前加载的包名if(loadPackageParam.packageName.equals("cn.xiaolus.syscheck")) {// XposedHelpers.findAndHookMethod("cn.xiaolus.syscheck.SecCheck",loadPackageParam.classLoader,"checkRoot", new XC_MethodHook() {/*** 在Hook指定的方法之前调用此回调方法* @param param 方法Hook参数* @throws Throwable*/@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);param.setResult(false);}/*** 在Hook指定的方法之后调用此回调方法* @param param 方法Hook参数* @throws Throwable*/@Overrideprotected void afterHookedMethod(MethodHookParam param) throws  Throwable {super.afterHookedMethod(param);param.setResult(false);}});}
}

● 上面的代码使用了XposedHelpers的findAndHookMethod方法,需要四个参数或者五个参数,四个参数的用于HOOK无参数的方法,参数分别为完整类名、ClassLoader对象、方法名以及一个回调接口;五个参数的话在方法名之后需要提供Class[]形式的参数类型表,其他参数相同。
● XC_MethodHook接口有两个回调方法,一个是beforeHookedMethod,一个是afterHookedMethod,分别是在HOOK指定的函数之前调用和之后调用,具体使用哪个回调方法可以自己尝试。在这两个方法中可以通过MethodHookParam参数获得并修改函数的各种参数,例如通过setResult方法修改函数的返回值,就实现了对函数方法返回值的修改。
● 运行程序,目标函数无论执行情况如何,返回值都为false,这一般用于一些权限或者框架检测的破解和绕过,也可以用于其他的用途。

五、总结

● Xposed是一款优秀的Android HOOK框架,优势是模块编写起来相对比较容易,功能强大,缺点也比较明显,每次重新编译框架或者开启、关闭框架,都需要重新引导系统,比较麻烦,同时不能直接HOOK C/C++编写的函数,也比较容易被检测出来(当然了你可以把检测代码也HOOK掉),也是其局限性之一。

来自:https://www.yuque.com/wrlu/security/android-xposed-hook

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:
一、面试合集

二、源码解析合集

三、开源框架合集

欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取

Android Xposed 框架相关推荐

  1. Android.Hook框架xposed篇(Http流量监控)

    瘦蛟舞 · 2015/08/03 10:30 官方教程:github.com/rovo89/Xpos- 官网:repo.xposed.info/module/de.r- apk:dl-xda.xpos ...

  2. Android之Xposed框架完全使用指南

    文章目录 Xposed环境搭建 Xposed简介 Xposed原理 Xposed的安装 Xposed插件开发 Xposed插件编写流程 Xposed开发之Hook构造函数 相关API 无参构造函数的h ...

  3. 014 Android之Cydia与Xposed框架入门

    文章目录 Android Hook框架介绍 Cydia Substrate 插件编写步骤 实例:编写Cydia修改系统字体颜色 Xposed 插件编写步骤 实例:Hook获取手机序列号 准备工作 获取 ...

  4. xposed 修改参数_【Android 原创】2020春节红包第三题Xposed框架Hook的应用

    作者论坛账号:CrazyNut 准备工具以及思路 首先不了解Xposed框架Hook的可以看看大佬的基础教程 - <教我兄弟学Android逆向12 编写xposed模块> 本文不需要会看 ...

  5. Xposed框架Xposed安装器|Xposed for Android 5.0/5.1/6.0|详细安装教程

    Xposed简介: Xposed Installer(xposed框架)是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同 ...

  6. Android 集成Xposed框架

    前言 Xposed(框架) Xposed框架(Xposed Framework)是一套开源的.在Android高权限模式下运行的系统框架服务,可以在不修改APK文件的情况下影响程序运行(修改系统)的框 ...

  7. Android应用防xposed注入,android hook 框架 xposed 如何实现注入

    转:http://www.cnblogs.com/jiayy/p/4305018.html 前面分析的adbi框架和libinject都是使用so注入的方式,实现将指定代码装入目标进程,这种方式有几个 ...

  8. 小米4 Android 6.0 版本 Root 并安装 Xposed 框架攻略

    本文首发:http://prototypez.github.io/2016/05/16/root-and-install-Xposed-framework-on-XiaoMi4-with-Androi ...

  9. android 模拟器 xposd,xposed开发入门向之入门前准备工作 模拟器安装xposed框架

    本帖最后由 永恒陌 于 2019-12-20 15:15 编辑 2019-12-20: 这个模拟器的系统是自带root的.可以依葫芦画瓢在别的模拟器上装. ---------------------- ...

最新文章

  1. Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
  2. 【Linux】一步一步学Linux——sum命令(234)
  3. hacktoberfest_我第一次参加Hacktoberfest中学到了什么
  4. 爬虫的单线程+多任务异步协程:asyncio 3.6
  5. PHP经典项目案例-(一)博客管理系统5
  6. 【转】Ubuntu下配置支持Windows访问的samba共享
  7. lz0-007 读书笔记11
  8. VC助手使用问题————all instance of the license* are in use .VA will be disabled
  9. 【Bug】解决 java.sql.SQLSyntaxErrorException 异常
  10. python3安装步骤-Mac安装python3的方法步骤
  11. mcrotime php_php时间函数time、date和microtime的区别 | 木凡博客
  12. 感知机(Perceptron)为什么不能表示异或(XOR)
  13. lambda表达式最实用的例子,最实用的案例
  14. 五十个html js特效动画,基于mo.js制作的17种炫酷图标动画特效
  15. 全网最详细的渗透测试靶机实操步骤——vulnhub靶机实战(七)IMF【包含了sql注入,文件上传,gif图片木马制作,缓冲区溢出漏洞sploit等诸多知识点的靶机,超多干货】
  16. java生成树形Excel_poi从excel中读取父子关系型(树形)数据结构到数据库
  17. U盘在别人电脑上正常显示,插在自己电脑读不出来(只显示CD驱动器)
  18. 完全二叉树与满二叉树
  19. Glide的使用回收内存问题
  20. 【算法专题】卡特兰数

热门文章

  1. 转载:国学与古代文学的关系
  2. Rasa课程、Rasa培训、Rasa面试、Rasa实战系列之Finding Unexpected Intents
  3. Window 开机连接ocsp.globalsign.com
  4. 我们为什么选择NEXTCHIP?为什么要选择ISP?为什么要选择AHD?为什么选择北京冠宇铭通?
  5. 读论文 Automatic generation and detection of highly reliable fiducial markersnunder occlusion
  6. 一个人工作之余6元上线一款APP的血泪史
  7. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战
  8. 如何用sql profile 找出执行慢的sql
  9. oh-my-zsh配置指南
  10. oeasy教您玩转linux010203显示logo