学习Android x86模拟器root 安装xposed

Posted 看雪学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习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)创建模拟器


学习Android x86模拟器root 安装xposed


配置好必要的参数 名字设置为test_xposed、版本Android 6.0 API 23、内置存储和SD卡都为500M、skin动态、USE HOST GPU打勾(否则会很慢)


学习Android x86模拟器root 安装xposed


先启动一下试试看


3、启动成功运行了


学习Android x86模拟器root 安装xposed


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 查看模拟器已经运行并连接


学习Android x86模拟器root 安装xposed


安装apk


#adb install XposedInstaller_3.1.5.apk


学习Android x86模拟器root 安装xposed


模拟器中已经安装


学习Android x86模拟器root 安装xposed


点击 INSTALL version 98会联网下载框架需要的文件。


学习Android x86模拟器root 安装xposed

学习Android x86模拟器root 安装xposed


显示错误因为我们的模拟器还没有root  


学习Android x86模拟器root 安装xposed


5、Android x86模拟器的root


位于源码/system/extras/su/su.c原生的su只允许 shell 和 root 用户 操作。  


学习Android x86模拟器root 安装xposed


是不是将这两句删除编译就可以了呢?经过测试,普通user 依然无法使用setuid(0) setgid(0)


学习Android x86模拟器root 安装xposed


即使已经在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 x86模拟器root 安装xposed

学习Android x86模拟器root 安装xposed

我使用的是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是否安装 禁用限制等等  


学习Android x86模拟器root 安装xposed

学习Android x86模拟器root 安装xposed


直接将选项修改为 ALLOW执行su


学习Android x86模拟器root 安装xposed


在含有和jni目录平级的目录中执行ndk-build


学习Android x86模拟器root 安装xposed


编译好的文件就在libs/x86/su中


6、接下来将su push到/system/bin当中


adb push su /system/bin


提示read only


学习Android x86模拟器root 安装xposed



尝试mount rw


执行Mount –o rw,remount /system


又出现 /dev/block/vda' is read-only


没办法 放大招了。查看模拟器的运行命令


查看模拟器的完整命令行


wmic process where caption="emulator.exe" get caption,commandline /value


学习Android x86模拟器root 安装xposed


查看进程命令行。增加 -writable-system 参数


emulator.exe -writable-system -avd test_xposed


学习Android x86模拟器root 安装xposed


重新mount system分区


mount -o rw,remount /system


学习Android x86模拟器root 安装xposed


终于OK了


学习Android x86模拟器root 安装xposed


我们先在adb root 下运行su --daemon&


学习Android x86模拟器root 安装xposed


在手机上普通用户试试su


学习Android x86模拟器root 安装xposed
     

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


学习Android x86模拟器root 安装xposed


再次安装


学习Android x86模拟器root 安装xposed


安装成功


学习Android x86模拟器root 安装xposed



To Do



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

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


此处我暂时还没有解决。


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





本文由看雪论坛 IamHuskar 原创

转载请注明来自看雪社区



往期热门阅读:




点击阅读原文/read,

更多干货等着你~

以上是关于学习Android x86模拟器root 安装xposed的主要内容,如果未能解决你的问题,请参考以下文章

Intel x86 模拟器启动但 android 无法启动

android emulator 安装中文输入法

在 HAXM x86 模拟器上安装 Google 设置(Google Maps SDK)

Android调试移动端webview

Android模拟器系统映像和AMD处理器

Android x86模拟器Intel Atom x86 System Image配置与使用方法