学习Android x86模拟器root 安装xposed
如果可以在模拟器上学习xposed,可能会比手机上来得方便,包括调试等等;而在PC上x86上模拟arm将会非常慢。
如果采用安卓x86镜像,由于部分apk带有arm原生的so,所以有部分apk不能在android x86模拟器上运行。但是如果仅仅用来学习xposed hook 也不用去买一部android手机。
另外就是安装xposed需要root。不能保证所有真机都可以root。
以下把遇到的坑和流程记录一下。
1、(SDK MANAGER下载)模拟器选择 android 6.0 api 23
2、(AVD manager)创建模拟器
配置好必要的参数 名字设置为test_xposed、版本Android 6.0 API 23、内置存储和SD卡都为500M、skin动态、USE HOST GPU打勾(否则会很慢)
先启动一下试试看
3、启动成功运行了
4、尝试安装xposed框架
https://forum.xda-developers.com/showthread.php?t=3034811
下载安装apk 目前版本是3.1.5
XposedInstaller_3.1.5.apk - [Click for QR Code] (2.96 MB, 885904 views)
#adb devices 查看模拟器已经运行并连接
安装apk
#adb install XposedInstaller_3.1.5.apk
模拟器中已经安装
点击 INSTALL version 98会联网下载框架需要的文件。
显示错误因为我们的模拟器还没有root
5、Android x86模拟器的root
位于源码/system/extras/su/su.c原生的su只允许 shell 和 root 用户 操作。
是不是将这两句删除编译就可以了呢?经过测试,普通user 依然无法使用setuid(0) setgid(0)
即使已经在adb命令行中将 su的权限修改为 4775 -rwsr-xr-x 也不行
这里应该和android的安全机制有关。尚未弄清楚。在ubuntu下测试是可行的。
我决定看看superuser是如何做的。
https://github.com/koush/Superuser
通过阅读Superuser-master\Superuser\jni\su\su.c
发现调用是通过在root 环境下调用su –daemon命令运行一个su-daemon服务打开一个端口监听。
普通用户执行su 通过socket将命令传递给具有root 权限的su-daemon 执行,将结果返回到普通su.
由于Superuser是结合数据库以及UI 限制的。我们考虑到模拟器不需要太多安全性。也避免麻烦。我们不需要像SuperUser那样的ROOT用户界面以及判断,对于所有的请求我们都允许。所以我们需要修改源码,所有UI数据库相关的都去掉。
只留下su目录
我使用的是android-ndk-r16-beta1编译
修改Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := su
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_SRC_FILES := su/su.c su/utils.c su/daemon.c su/pts.c
include $(BUILD_EXECUTABLE)
修改Application.mk
APP_ABI := x86
APP_PLATFORM := android-23
APP_PIE = true
支持的平台x86 安卓平台版本android-23
PIE记得打开
同时修改源码关键部位
关键几处指出来。其余的参看源码。
去掉验证 superuser是否安装 禁用限制等等
直接将选项修改为 ALLOW执行su
在含有和jni目录平级的目录中执行ndk-build
编译好的文件就在libs/x86/su中
6、接下来将su push到/system/bin当中
adb push su /system/bin
提示read only
尝试mount rw
执行Mount –o rw,remount /system
又出现 /dev/block/vda' is read-only
没办法 放大招了。查看模拟器的运行命令
查看模拟器的完整命令行
wmic process where caption="emulator.exe" get caption,commandline /value
查看进程命令行。增加 -writable-system 参数
emulator.exe -writable-system -avd test_xposed
重新mount system分区
mount -o rw,remount /system
终于OK了
我们先在adb root 下运行su --daemon&
在手机上普通用户试试su
苍天啊。大地啊。终于成功了
再次安装
安装成功
To Do
利用 init.superuser.rc 在 init.rc 中添加。让 su –daemon 启动就运行。
安卓模拟器中。由于/目录是挂载到内存的ramdisk。执行更改以后。又被还原了。
此处我暂时还没有解决。
我尝试将 D:\android-sdk\system-images\android-23\default\x86 下面的ramdisk.img 重新解包修改 init.rc 打包 发现模拟器无法启动,如果有成功的麻烦指点一下。
本文由看雪论坛 IamHuskar 原创
转载请注明来自看雪社区
往期热门阅读:
点击阅读原文/read,
更多干货等着你~
扫描二维码关注我们,更多干货等你来拿!