查看原文
其他

学习Android x86模拟器root 安装xposed

IamHuskar 看雪学院 2019-05-26

如果可以在模拟器上学习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,

更多干货等着你~

扫描二维码关注我们,更多干货等你来拿!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存