欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]学习Androidx86模拟器root安装xposed

[原创]学习Androidx86模拟器root安装xposed

学习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


苍天啊。大地啊。终于成功了


再次安装


安装成功


TODO

利用 init.superuser.rc 在init.rc中添加。让su –daemon启动就运行。

安卓模拟器中。由于/目录是挂载到内存的ramdisk。执行更改以后。又被还原了。

此处我暂时还没有解决。

我尝试将D:\android-sdk\system-images\android-23\default\x86下面的ramdisk.img 重新解包修改init.rc 打包 发现模拟器无法启动,如果有成功的麻烦指点一下。



上传的附件 doc.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功