[Android开发] Xposed 插件开发之一: Xposed入门

原创 2016年09月18日 09:27:00

一、什么是Xposed

Xposed Framework 为来自国外XDA论坛(forum.xda-developers.com)的rovo89自行开发的一个开源的安卓系统框架。

它是一款特殊的安卓App,其主要功能是提供一个新的应用平台,玩家们安装Xposed框架后,就能够通过Xposed框架搭建起的平台安装更多系统级的应用,实现诸多神奇的功能。

Xposed框架的原理是修改系统文件,替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并执行一些初始化操作(执行XposedBridge的main方法)。然后我们就可以在这个Zygote上下文中进行某些hook操作。

Github开源地址: https://github.com/rovo89/Xposed

二、安装Xposed

手机必须先Root,5.0以上通用安装方法(ps: V80仅支持Android 5.以上)


  1. 安装apk
  2. 在Recovery刷入对应的zip包

ps: 必须了解自己当前系统的CPU版本和系统版本:
sdkXX (XX 代表安卓系统版本,sdk21代表5.0系统,sdk22代表5.1系统,sdk23代表6.0系统)
arm## (## 代表cpu版本,arm代表32位cpu ,arm64代表64位cpu)

官方下载:
http://forum.xda-developers.com/showthread.php?t=3034811

网盘下载:
http://pan.baidu.com/s/1bpxEMh5 密码:wm7a

三、编写Xposed插件

ide利用AndroidStudio

先编写被劫持的测试app
测试劫持一个app的方法,先写一个app,这个app很简单,点击按钮,显示天平。
这里写图片描述

1. 创建插件项目

这里创建TestXposed一个

2. 导入Xposed的api库

方法1:
Android Studio的依赖:

repositories {
    jcenter();
}

dependencies {
    provided 'de.robv.android.xposed:api:82'
}

方法2: 下载jar包
地址: https://bintray.com/rovo89/de.robv.android.xposed/api

Download有两个jar包:
api-82-sources.jar: 包含源码的
api-82.jar: 不包含源码

这里写图片描述

下载api-82.jar,复制到Android Studio的module的libs目录下,右键Add as library
这里写图片描述

修改依赖方式compile files修改为providedfiles,原因是Xposed里已有该jar包内容,再次打包进去会冲突。

dependencies {
    provided fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
}

这里写图片描述
ps: 上面那个修改很重要,不修改就会导致handleLoadPackage没有回调。

3. 修改AndroidManifest.xml文件

在Application标签里面加三个meta-data

<!-- 是否是xposed模块,xposed根据这个来判断是否是模块 -->
<meta-data
    android:name="xposedmodule"
    android:value="true" />

<!-- 模块描述,显示在xposed模块列表那里第二行 -->
<meta-data
    android:name="xposeddescription"
    android:value="测试Xposed模块" />

<!-- 最低xposed版本号(lib文件名可知) -->
<meta-data
    android:name="xposedminversion"
    android:value="30" />

这里写图片描述

4. 编写hook类

创建一个类,实现IXposedHookLoadPackage接口,重写handleLoadPackage方法,我这里创建了一个Main类。

这里写图片描述

这里写图片描述

5. 创建xposed_init文件

在main目录下创建assets目录,在assets目录下创建xposed_init文件,不要后缀名。这个就是模块的入口,只有一行代码,就是说明入口类

这里写图片描述

6.运行结果

运作安装刚刚编写的插件,打开Xposed,勾选刚刚安装的插件。重启手机。
打开测试程序,点击按钮就能发现文字不是天平了

这里写图片描述

ok,基本模型搭建成功。

四、Xposed怎么样工作

写完demo,梳理一下Xposed的工作过程:

开机时, ./init.rc 脚本文件会启动 Zygote 进程,Zygote对应的具体程序是 /system/bin/app_process ,然后加载需要的类,调用初始化的方法,之后启动的每个应用都是Zygote的拷贝,所以Zygote进程是十分重要的.

通过在类路径中添加一个jar包,在 app_process 的特定位置调用jar包中的方法,Xposed框架实现了带扩展功能的 app_process ,然后将原有的 app_process 替换掉.

在 /data/data/de.robv.android.xposed.installer/bin/ 目录下有一个 XposedBridge.jar 文件,它就是被引用的jar包,源码在 github ,main函数在 /src/de/robv/android/xposed/XposedBridge.java 中,每个进程每次启动时都会被调用.加载模块的功能也是在这里实现.

Xposed真正强大的是它可以hook调用的方法.当你反编译修改apk时,你可以在里面插入xposed的命令,于是你就可以在方法调用前后注入自己的代码.

XposedBridge有一个私有的本地方法 hookMethodNative ,代码实现放在 app_process 中.在调用被hook的方法前会先调用此方法, hookMethodNative 有一个 handleHookedMethod 方法,可以修改传递给被hook函数的参数,变量甚至是调用其他方法.

版权声明:本文为博主原创文章,转载请带上出处,谢谢。

Android xposed框架开发入门

近期在搞信息安全大赛,我们的作品是要基于xposed来做钩子,所以就研究了一下这个技术。但是真心感觉这个坑很多啊。。我是搞了半天才把框架搭建起来能够使用。写下来,各位后来的童鞋少走点坑吧。哈哈。入门涉...
  • u013496707
  • u013496707
  • 2016年03月21日 13:12
  • 10247

Xposed模块开发入门教程

前言:在高手如云的XDA论坛上Xposed框架都被许多开发者誉为“安卓第一神器”。究竟是什么神奇的能力让它在众多APP中脱引而出呢?本文将指引大家完成一个Xposed上最简单的Demo,让大家领略一下...
  • chenhao0428
  • chenhao0428
  • 2016年05月10日 09:34
  • 14675

Xposed框架以及开发jar包

  • 2016年06月24日 23:51
  • 970KB
  • 下载

Xposed框架开发入门(一)

最近在学习Android逆向的时候涉及到了Hook方面的知识,所以研究了下Xposed和Cydia Substrate框架,虽然最后还是成功搞起了,但是一路下来感觉还是有很多不顺的,所以在学习的时候就...
  • qq_24280381
  • qq_24280381
  • 2017年03月30日 21:20
  • 1708

Xposed开发指南

转:http://sorcerer.farbox.com/post/android/xposedkai-fa-zhi-nan 一个修改系统的项目Xposed的工作原理 hook和取...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2017年02月06日 11:48
  • 1109

【Xposed模块开发】用Android Studio开发第一个Xposed模块

最近打算学习Xposed模块的开发。 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process程序控制zygote进...
  • mrglaucusss
  • mrglaucusss
  • 2016年03月23日 15:19
  • 8083

Android Hook框架Xposed原理与源代码分析

对于Xposed框架源代码详细解读重制版~纯手打~
  • wxyyxc1992
  • wxyyxc1992
  • 2013年12月14日 16:58
  • 33262

Xposed框架和开发用到的jar包

  • 2016年07月03日 15:02
  • 970KB
  • 下载

xposed模块开发步骤总结

一、成为xposed模块 要成功xposed模块,被xposed识别,一般需要在清单文件中标识该三个元数据(meta-data)...
  • CSDN_LQR
  • CSDN_LQR
  • 2016年08月18日 21:34
  • 6728

Android Hook框架Xposed详解:从源代码分析到开发指南

转:http://www.sjsjw.com/kf_mobile/article/1_19087_30637.asp 1 Introduction 1.1 概述 Xpos...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2016年11月27日 18:16
  • 2761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Android开发] Xposed 插件开发之一: Xposed入门
举报原因:
原因补充:

(最多只允许输入30个字)