编译Xposed
Xposed是Android平台上的有名的Hook工具,用它可以修改函数参数,函数返回值和类字段值等等,也可以用它来进行调试。Xposed有几个部分组成:
- 修改过的android_art,这个项目修改部分art代码,使Hook成为可能
- Xposed native部分,该部分主要提供给XposedBridge可调用api和调用修改过的android_art的api,还有生成可替换的app_process程序
- XposedBridge,该项目是主要功能是提供给Xposed的模块开发者api,它将编译成XposedBridge.jar
- XposedInstaller,该项目是Xposed安装器,使得普通用户在使用Xposed更方便,同时,它还可以管理手机上已经安装的Xposed模块,它编译完成后将生成apk文件,本文不讨论如何编译它。
了解了这些,下面我们来试试如何编译它们
准备
- Ubuntu系统,推荐16.04及以上,本文用的18.04
- Android Studio
- Android源码(下载链接,请百度)
- 修改过的android_art:https://github.com/rovo89/android_art
- Xposed native部分:https://github.com/rovo89/Xposed
- XposedBridge:https://github.com/rovo89/XposedBridge
- Xposed构建工具,XposedTools:https://github.com/rovo89/XposedTools
配置
Android ART
将Android源码下的art目录移动到其他路径备份,比如Android源码的上层路径。在Android源码目录执行git clone https://github.com/rovo89/android_art -b xposed-nougat-mr2 art
,将修改过的android art下载到Android源码根目录。
注:请注意上面选择的分支是
xposed-nougat-mr2
,我使用的是 Android7.1.2的源码,所以选择该分支。请根据Android源码版本选择分支。
Xposed Native
转到frameworks/base/cmds
目录,执行git clone https://github.com/rovo89/Xposed xposed
,将Xposed Native部分的源码下载。
XposedBridge
在任意目录执行git clone https://github.com/rovo89/XposedBridge -b art
,然后导入Android Studio中,点Build->Rebuild Project,会在app/build/intermediates/transform/preDex/release
目录下生成.jar文件,将生成的jar文件重命名为XposedBridge.jar
,放入Android源码目录下的out/java/
下。也可以直接生成apk,然后将生成的apk后缀改为jar
注:如果想生成供Xposed模块调用的XposedBridge.jar,则在Android Studio的右侧打开Gradle Project,双击
jarStubs
就会在app/build/api
生成api.jar
XposedTools
在任意目录执行git clone https://github.com/rovo89/XposedTools
,将XposedTools目录下的build.conf.sample
复制一份,并将它重命名为build.conf
,build.conf文件用于配置构建环境,我们来看他的内容:
[General]
outdir = /android/out
javadir = /android/XposedBridge
[Build]
# Please keep the base version number and add your custom suffix
version = 65 (custom build by xyz / %s)
# makeflags = -j4
[GPG]
sign = release
user = 852109AA!
# Root directories of the AOSP source tree per SDK version
[AospDir]
19 = /android/aosp/440
21 = /android/aosp/500
# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox
[BusyBox]
arm = 21
x86 = 21
armv5 = 17
- outdir:指定Android源码中的out目录
- javadir:指定XposedBridge目录,如果你不需要编译XposedBridge.jar可以不指定
- version:Xposed版本,这个版本号将显示在XposedInstaller上
- ApospDir下的数字:设置sdk版本对应的Android源码
- [BusyBox]标签:busybox,可以不指定
配置完成后,就可以执行build.pl编译了,以下有几个例子:
./build.pl -a java
编译XposedBridge.jar,需要在build.conf
里指定javadir
./build.pl -t arm:25
编译生成供cpu架构为arm,sdk为25平台使用的Xposed
编译完成后,将在Android源码目录/out/sdk25/arm
生成可刷入手机的zip文件
常见问题
1.执行build.pl的时候提示找不到函数,比如提示找不到Config::IniFiles
.
可以通过下面的方式来寻找并安装依赖:
(1)执行apt-cache search Config::IniFiles
寻找Config::IniFiles所依赖的库文件:
libconfig-inifiles-perl - Read .ini-style configuration files
(2)执行sudo apt install libconfig-inifiles-perl
安装所依赖的库
编译Xposed的更多相关文章
- xposed源码编译与集成
xposed installer3.0版本之后,传统的xposed框架的使用方法是从官网上下载xposed installer.apk以及xposed-arm-sdk22.zip包.然后具体的使用方法 ...
- Xposed 集成 Android 6.0.1环境中,总结
由于工作需要,需要将xposed集成到android源码中,生成新的ROM就自带xposed的功能. 下面大体上说一下步骤和遇到的问题. 1.下载,并编译android源码,成功. 2.下载 http ...
- Android5.1源码Xposed框架编译
介绍 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作 . 对于Android5.1系统,官方提供 ...
- [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- [转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
使用Android Studio创建的空项目作为Xposed Module App,对于Api Jar包的引用方式,一开始是按照傻瓜式Jar Lib的处理方式,复制XposedBridgeApi-54 ...
- [转载] Android.Hook框架xposed开发篇
本文转载自: http://www.52pojie.cn/thread-396793-1-1.html 原帖:http://drops.wooyun.org/tips/7488 作者:瘦蛟舞 官方教程 ...
- [转载] Android Studio 上第一个 Xposed 模块
本文转载自: http://www.open-open.com/lib/view/open1451364108964.html 环境: 已root手机一枚 Android Studio一枚 官方文档参 ...
- [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...
- android 反编译 逆向工具整理
需要准备的道具需要哪些软件会在后面逆向过程中详细介绍,这里先大致罗列一下 android一台root并安装了xposed框架的手机(主要是为了脱壳) 类似[海马玩]这种模拟器 android-kill ...
随机推荐
- idea运行多模块的maven项目,工作目录不一致的问题
我使用idea开发多模块的maven项目,目录结构如下: segment (父级) ---pom.xml ---core (子模块) ...
- ajax跨域问题(php)
ajax出现请求跨域错误问题,主要原因就是因为浏览器的"同源策略". 解决方法(我只用过下面这3种): 1. 架设服务器代理:即浏览器请求同源服务器,再由后者请求外部服务(之前博主 ...
- monkey操作
1.monkey命令格式 直接adb shell进入后输入monkey [options] <eventcount> 或者每次输入adb shell monkey [options] &l ...
- python:解析js中常见的 不带引号的key的 json
首先要明晰一点,json标准中,key是必须要带引号的,所以标准json模块解析不带引号的key的 json就会抛错 不过有一些lib可以帮我们解析 如:demjson(链接) >>> ...
- [爬虫]Fiddler证书错误
在使用fiddler抓包的时候出现 creation of the root certificate was not successful 这个错误出现这个错误会导致https包抓不到 解决方法:1. ...
- BZOJ_3747_[POI2015]Kinoman_线段树
BZOJ_3747_[POI2015]Kinoman_线段树 Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放 ...
- 设置yum源:
1.企业 阿里开源镜像站: http://mirrors.aliyun.com/ 搜狐开源镜像站: http://mirrors.sohu.com/ 网易开源镜像站: http://mirr ...
- Uiautomator分类
分类中主要使用的类介绍!
- 让你分分钟理解 JavaScript 闭包
闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概 ...
- 【重学计算机】操作系统D4章:设备管理
1. IO的控制方式 演进过程:轮询 --> 中断 --> DMA --> IO通道 经典布局:南北桥 PS:详见<计算机组成原理> 2. IO的实现 软件实现层次:硬件 ...