当前位置: 首页 > news >正文

安卓开机自启动方案

安卓开机自启动方案----基于Magisk

一、需求描述

本文的开机自启动应用场景并非普通的安卓APP启动,主要的目标是在设备启动时执行shell脚本,并使用frida-inject进行frida脚本注入动作。在通常的情况下,开机启动某个app可以通过安卓的广播功能来进行,但是此方式并不能确保成功启动,在锁屏情况下也可能导致失败,并且对于有些国内深度定制的安卓系统是完全无效的。

二、Init.d尝试

起初,由于我们的场景是拥有root权限的,笔者打算通过激活安卓的Init.d来实现需求。大致的流程如下:

安装环境(busybox)-激活init.d-复制shell脚本到指定目录

这套方案在经过一番尝试后被我放弃了,原因如下:

  1. 部署繁琐,需要安装busybox并激活init.d,这一步骤实现完全自动话有些麻烦,当大规模批量部署时,耗时会大大增加
  2. 不能够适配所有安卓设备或系统,比如我用的测试机器红米Note3 MIUI9就失败了

三、使用Magisk实现

刷入Magisk,刷入方法可以见此文章,如果不需要xposed功能可以不刷EdXposed,本文中我们只将Magisk用于自启动,所以不需要。

成功刷入Magisk后重启设备,观察Magisk的启动日志,可以发现Magisk在启动的时候会执行 /data/adb/post-fs-data.d目录下的shell脚本,那么我们只需要将待执行的sh脚本复制到这个目录并给予执行权限即可,这一步骤可以写成adb命令直接在PC端完成(windows下bat,mac、Linux下sh),例如以下代码:

# 推送到设备
adb push caller.sh /data/local/tmp/caller.sh
# 复制脚本到Magisk启动目录
adb shell "su -c 'dd if=/data/local/tmp/caller.sh of=/data/adb/post-fs-data.d/caller.sh' "
# 给予可执行权限
adb shell "su -c 'chmod 777 /data/adb/post-fs-data.d/caller.sh' "

此时,重启设备便能够自动执行caller.sh脚本,附上一张执行了我们脚本的Magisk日志

Screenshot20210208150353068com.topjohnwu.magisk.png

四、注意事项

1.MIUI的系统限制

可能是出于系统安全考虑,在高版本的MIUI中,系统是不允许直接开启usb安装功能的,必须插入SIM卡然后用移动数据流量激活,这就使得调试以及部署变得异常麻烦。但是如果先把apk文件推送到手机存储,然后手动安装是可以的,因此我们有一个曲线救国的方案,即先用adb推送到存储、然后用pm命令进行安装,具体命令如下:

# 路径根据具体需求修改
adb push 待安装的apk文件 /storage/emulated/0
# 安装
adb shell "su -c 'pm install /storage/emulated/0/待安装的apk文件' "

如果有root权限,可以直接执行这个脚本

2.脚本编写注意

不要直接将耗时的脚本甚至无限循环的脚本(例如监测某app是否存活、如果挂掉就将其拉起的场景)复制到Magisk启动目录,这可能会导致系统卡在Logo界面,例如MIUI的"卡米",如果确实需要开启启动这样的脚本,可以另写一个脚本,然后通过nohup执行原来的脚本,例如需要执行无限循环的A脚本,可以编写B脚本,B脚本的内容为 nohup sh A.sh >/dev/null 2>&1 &,然后将B脚本复制到Magisk启动目录即可。

不过如果不慎将无限循环的脚本复制到启动目录导致系统进不去,也不用慌,进Recovery(刷Magisk前肯定是先刷了第三方Recovery的,例如Twrp),利用Twrp的文件管理将启动目录下的脚本删除即可。

http://www.dtcms.com/a/265755.html

相关文章:

  • Kafka生态整合深度解析:构建现代化数据架构的核心枢纽
  • Sklearn安装使用教程
  • 机器人焊接电源节气阀
  • 工程化实践——标准化Eslint、PrettierTS
  • 读书笔记:《DevOps实践指南》
  • android 网络访问拦截器的编写的几种方式
  • React 学习(3)
  • springboot 中使用 websocket
  • PHP:从入门到实践——构建高效Web应用的利器
  • 2011年英语一
  • AlpineLinux安装x11vnc服务端实现远程桌面登录
  • Zephyr RTOS 防止中断影响数据写入
  • cv610将音频chn0配置为g711a,chn1配置为 aac编码,记录
  • ARM SMMUv3故障和错误(五)
  • mac 电脑安装Homebrew来安装npm与node成功后,安装nvm的流程
  • macOS 26正式发布,全新Liquid Glass设计语言亮相
  • join性能问题,distinct和group by性能,备库自增主键问题
  • 微信小程序在用户拒绝授权后无法使用wx.opensetting再次获取定位授权
  • 针孔相机模型
  • python学习打卡day59
  • 【轨物洞见】光伏机器人与组件、支架智能化协同白皮书
  • Linux操作系统之文件(二):重定向
  • Android 系统默认的Launcher3,Android 系统的导航栏(通常是屏幕底部)显示的 4 个快捷应用图标,如何替换这4个应用图标为客户想要的。
  • Fiddler中文版抓包工具在后端API调试与Mock中的巧用
  • Treap树
  • thinkphp8接管异常处理类
  • linux系统 weblogic10.3.6(jar) 下载及安装
  • 后端 Maven打包 JAR 文件、前端打包dist文件、通过后端服务访问前端页面、Nginx安装与部署
  • Josn模块的使用
  • MVC 架构设计模式