一、Xposed 框架实现 Hook 的原理介绍

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 替换过的进程文件,并且,Xposed
Framework 还定义了一个 jar 包,系统启动的时候,也会加载这个包:
/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

二、Xposed框架运行的条件

1.Rooted Device / Emulator (已root的手机或者模拟器)
2.Xposed Installer (Xposed安装程序下载)
3.Hooking Android App (要被Hook的目标 App)

三、安装过程

1. 推荐下载 Xposed3.1.5 版本,XposedInstaller_3.1.5.zip。

​ 下载安装后,若科学上网可以直接激活,之前http改为https需要搭梯子。

2.离线激活方式:

​ https://dl-xda.xposed.info/framework/ 从该网址找到自己的手机API - sdk对应的版本 (arm|x86)(32 | 64位)

eg: 雷电模拟器 4.0.43 版本 - 》 (X86 api 25)

-> 下载25版本https://dl-xda.xposed.info/framework/sdk25

3.下载后将压缩包中的 system 解压到一个新建文件夹中,再将以下 script.sh shell脚本放置该文件中:

##########################################################################################
#
# Xposed framework installer zip.
#
# This script installs the Xposed framework files to the system partition.
# The Xposed Installer app is needed as well to manage the installed modules.
#
##########################################################################################grep_prop() {REGEX="s/^$1=//p"shiftFILES=$@if [ -z "$FILES" ]; thenFILES='/system/build.prop'ficat $FILES 2>/dev/null | sed -n $REGEX | head -n 1
}android_version() {case $1 in15) echo '4.0 / SDK'$1;;16) echo '4.1 / SDK'$1;;17) echo '4.2 / SDK'$1;;18) echo '4.3 / SDK'$1;;19) echo '4.4 / SDK'$1;;21) echo '5.0 / SDK'$1;;22) echo '5.1 / SDK'$1;;23) echo '6.0 / SDK'$1;;24) echo '7.0 / SDK'$1;;25) echo '7.1 / SDK'$1;;26) echo '8.0 / SDK'$1;;27) echo '8.1 / SDK'$1;;*)  echo 'SDK'$1;;esac
}cp_perm() {cp -f $1 $2 || exit 1set_perm $2 $3 $4 $5 $6
}set_perm() {chown $2:$3 $1 || exit 1chmod $4 $1 || exit 1if [ "$5" ]; thenchcon $5 $1 2>/dev/nullelsechcon 'u:object_r:system_file:s0' $1 2>/dev/nullfi
}install_nobackup() {cp_perm ./$1 $1 $2 $3 $4 $5
}install_and_link() {TARGET=$1XPOSED="${1}_xposed"BACKUP="${1}_original"if [ ! -f ./$XPOSED ]; thenreturnficp_perm ./$XPOSED $XPOSED $2 $3 $4 $5if [ ! -f $BACKUP ]; thenmv $TARGET $BACKUP || exit 1ln -s $XPOSED $TARGET || exit 1chcon -h 'u:object_r:system_file:s0' $TARGET 2>/dev/nullfi
}install_overwrite() {TARGET=$1if [ ! -f ./$TARGET ]; thenreturnfiBACKUP="${1}.orig"NO_ORIG="${1}.no_orig"if [ ! -f $TARGET ]; thentouch $NO_ORIG || exit 1set_perm $NO_ORIG 0 0 600elif [ -f $BACKUP ]; thenrm -f $TARGETgzip $BACKUP || exit 1set_perm "${BACKUP}.gz" 0 0 600elif [ ! -f "${BACKUP}.gz" -a ! -f $NO_ORIG ]; thenmv $TARGET $BACKUP || exit 1gzip $BACKUP || exit 1set_perm "${BACKUP}.gz" 0 0 600ficp_perm ./$TARGET $TARGET $2 $3 $4 $5
}##########################################################################################echo "**************************"
echo "Xposed framework installer"
echo "**************************"if [ ! -f "system/xposed.prop" ]; thenecho "! Failed: Extracted file system/xposed.prop not found!"exit 1
fiecho "- Checking environment"
API=$(grep_prop ro.build.version.sdk)
APINAME=$(android_version $API)
ABI=$(grep_prop ro.product.cpu.abi | cut -c-3)
ABI2=$(grep_prop ro.product.cpu.abi2 | cut -c-3)
ABILONG=$(grep_prop ro.product.cpu.abi)XVERSION=$(grep_prop version system/xposed.prop)
XARCH=$(grep_prop arch system/xposed.prop)
XMINSDK=$(grep_prop minsdk system/xposed.prop)
XMAXSDK=$(grep_prop maxsdk system/xposed.prop)XEXPECTEDSDK=$(android_version $XMINSDK)
if [ "$XMINSDK" != "$XMAXSDK" ]; thenXEXPECTEDSDK=$XEXPECTEDSDK' - '$(android_version $XMAXSDK)
fiARCH=arm
IS64BIT=
if [ "$ABI" = "x86" ]; then ARCH=x86; fi;
if [ "$ABI2" = "x86" ]; then ARCH=x86; fi;
if [ "$API" -ge "21" ]; thenif [ "$ABILONG" = "arm64-v8a" ]; then ARCH=arm64; IS64BIT=1; fi;if [ "$ABILONG" = "x86_64" ]; then ARCH=x86_64; IS64BIT=1; fi;
fi# echo "DBG [$API] [$ABI] [$ABI2] [$ABILONG] [$ARCH] [$XARCH] [$XMINSDK] [$XMAXSDK] [$XVERSION]"echo "  Xposed version: $XVERSION"XVALID=
if [ "$ARCH" = "$XARCH" ]; thenif [ "$API" -ge "$XMINSDK" ]; thenif [ "$API" -le "$XMAXSDK" ]; thenXVALID=1elseecho "! Wrong Android version: $APINAME"echo "! This file is for: $XEXPECTEDSDK"fielseecho "! Wrong Android version: $APINAME"echo "! This file is for: $XEXPECTEDSDK"fi
elseecho "! Wrong platform: $ARCH"echo "! This file is for: $XARCH"
fiif [ -z $XVALID ]; thenecho "! Please download the correct package"echo "! for your platform/ROM!"exit 1
fiecho "- Placing files"
install_nobackup /system/xposed.prop                      0    0 0644
install_nobackup /system/framework/XposedBridge.jar       0    0 0644install_and_link  /system/bin/app_process32               0 2000 0755 u:object_r:zygote_exec:s0
install_overwrite /system/bin/dex2oat                     0 2000 0755 u:object_r:dex2oat_exec:s0
install_overwrite /system/bin/oatdump                     0 2000 0755
install_overwrite /system/bin/patchoat                    0 2000 0755 u:object_r:dex2oat_exec:s0
install_overwrite /system/lib/libart.so                   0    0 0644
install_overwrite /system/lib/libart-compiler.so          0    0 0644
install_overwrite /system/lib/libsigchain.so              0    0 0644
install_nobackup  /system/lib/libxposed_art.so            0    0 0644
if [ $IS64BIT ]; theninstall_and_link  /system/bin/app_process64             0 2000 0755 u:object_r:zygote_exec:s0install_overwrite /system/lib64/libart.so               0    0 0644install_overwrite /system/lib64/libart-compiler.so      0    0 0644install_overwrite /system/lib64/libart-disassembler.so  0    0 0644install_overwrite /system/lib64/libsigchain.so          0    0 0644install_nobackup  /system/lib64/libxposed_art.so        0    0 0644
fimkdir -p /system/priv-app/XposedInstaller
chmod 0755 /system/priv-app/XposedInstaller
chcon -h u:object_r:system_file:s0 /system/priv-app/XposedInstaller
cp system/priv-app/XposedInstaller/XposedInstaller.apk /system/priv-app/XposedInstaller/XposedInstaller.apk
chmod 0644 /system/priv-app/XposedInstaller/XposedInstaller.apk
chcon -h u:object_r:system_file:s0 /system/priv-app/XposedInstaller/XposedInstaller.apkif [ "$API" -ge "22" ]; thenfind /system /vendor -type f -name '*.odex.gz' 2>/dev/null | while read f; do mv "$f" "$f.xposed"; done
fiecho "- Done"
exit 0

4.将该文件夹push进手机 system 中 :

adb remountadb push 刚刚创建的文件夹 /systemadb shell chmod 777  文件夹名 chmod 777  文件夹名 /shell脚本chmod 777  文件夹名 /system

5.运行script.sh脚本:

chmod 777  script.sh ./script.sh

6.重新手机,再打开xposed框架,成功激活:

Xposed环境安装相关推荐

  1. M1 Pro 安卓模拟器+Xposed环境

    吐槽 最近换了台mac,发现mac对程序员真的太友好了,一些环境配置起来很方便,借助brew几乎都是一行命令的事. 但是有一些环境还不是那么好配,在这做一下记录. 这次要说的是安卓模拟器 我本人是有一 ...

  2. 2021年大数据常用语言Scala(二):Scala开发环境安装

    目录 开发环境安装 安装JDK 安装scala SDK 步骤 具体操作 安装IDEA scala插件 步骤 开发环境安装 学习如何编写scala代码之前,需要先安装scala编译器以及开发工具 sca ...

  3. linux学 java_[操作系统]Linux学习第二步(Java环境安装)

    [操作系统]Linux学习第二步(Java环境安装) 0 2017-05-19 00:02:21 jdk版本:jdk-8u131-linux-x64.rpm 注:以下操作在root用户或具有root权 ...

  4. ZooKeeper集群环境安装与配置

    原文:出自本人的Linux博客http://blog.csdn.net/unix21/ ZooKeeper版本:3.4.5 约定:3台虚拟机 前提:需要安装JDK,关于Linux环境JDK安装配置参考 ...

  5. docker 离线安装 mysql_Oracle数据库之docker 离线环境安装oracle

    本文主要向大家介绍了Oracle数据库之docker 离线环境安装oracle,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 因测试需要,需在内网的测试环境搭建一套docker ...

  6. lua菜鸟教程_Lua 环境安装

    Lua 环境安装 Linux 系统上安装 Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文使用了5.3.0版本进行安装: curl -R -O h ...

  7. android环境安装之android4.2安装(转)

    准备学习android,着手安装android时听说很麻烦,在网上看了很多android安装说明,都是android比较早的版本,我这里安装了android4.2,简单记录一下. 安装分为几步,首先申 ...

  8. DRF工程搭建、环境安装与配置

    DRF需要以下依赖: Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) Django (1.10, 1.11, 2.0) DRF是以Django扩展应用的方式提供的,所以我们 ...

  9. MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决

    MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 一.简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发.发布并支持的.有以下特点: MySQL是 ...

  10. Windows下R语言环境安装

    Windows下R语言环境安装 R官网: https://www.r-project.org/ 按照如下步骤下载windows中的安装文件R-4.1.0-win.exe 文件已经下载完成:R-4.1. ...

最新文章

  1. sqlyog连接服务出现的2003和1130错误问题
  2. php javascript wav波形绘制,PHP分析.wav文件并绘制png格式的波形图
  3. 七天快排优化真的存在!
  4. 流程表单中js如何清空SheetUser控件数据?
  5. jetson nano 人脸识别
  6. html网页注册信息不完全时有警示_??使用Github做一个完全免费的个人网站(步骤很细)...
  7. 性能测试真如你想象的那么简单?
  8. MySQL日常应用操作记录
  9. 信号完整性分析大作业_Matplotlib数据可视化 amp; Pandas数据分析 综合实训大作业...
  10. linux如何检查uwsgi安装成功,linux安装uwsgi出错
  11. POJ1321-Chess Problem(dfs基础题)
  12. java怎么设置_java环境配置怎么设置?Java基础教程
  13. python中shape的解释
  14. google浏览器插件之身份验证器Authenticator MFA
  15. 液晶显示器LCD与LED的区别
  16. 千克与磅之间的转换 Exercise05_05
  17. python中finally是什么意思_什么是pythontry-finally语句?它能起到什么样的作用?
  18. matlab图像压缩像素编码,基于DCT的图像压缩编码算法的MATLAB实现
  19. 信用卡违约客户的预测模型的选择(二)验证过程
  20. Linux kernel内存管理之OOM相关参数

热门文章

  1. cucumber rest assured做接口测试
  2. android解析xml nbsp报错,Android Studio 3 AndroidManifest.xml报错error: unknown eleme
  3. selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: eleme
  4. step5: 编写spider爬取
  5. cdn搭建原理_CDN运行过程四大要点,附技术原理图解,智能DNS解析
  6. 代码坏的味道21:被拒绝的遗赠 (Refused Bequest)
  7. canvas+audio+range 模拟音乐播放器
  8. alios是安卓吗_阿里云OS到底是国产系统还是安卓系统?
  9. USB PD快充协议详解(待续)
  10. 人人都应该掌握的一些电脑操作技巧