Android手机Root指南:从模拟器到实体设备

本文详细介绍了Android设备Root的概念、优缺点及具体操作步骤,包括使用rootAVD工具Root模拟器和通过Magisk Root实体Pixel 6设备,适合移动应用安全测试人员参考。

如何Root Android手机

本博客将介绍如何Root AVD模拟器和实体Pixel 6设备。但在深入这些主题之前,我们先来了解Rooting的含义以及Root Android手机的一些优缺点。

首先——什么是Rooting?

Rooting Android设备是指绕过设备限制成为超级用户的过程——通常称为“root用户”或简称为“root”。作为超级用户,用户将拥有系统级资源的访问权限,并在设备上拥有更大的控制权。

其次——为什么要Root设备?

测试Android移动应用通常需要Rooted设备。如上所述,Rooting将赋予我们手机上的超级用户权限,使我们能够执行使测试更轻松的操作(例如在系统中安装代理CA证书)。

Android操作系统基于Android开源项目(AOSP)(https://source.android.com/),这是Google维护的官方开源计划,用于Android操作系统的开发。其目的是提供源代码和工具,使开发者、硬件制造商和其他人能够构建自己的自定义Android版本。

关于AOSP的快速说明:设备制造商(例如三星)和运营商(例如T-Mobile)会为其Android版本添加自己的更新和更改,因此他们的Android版本基于AOSP,但不是1:1匹配。Android更新在到达设备之前需要经过运营商和设备制造商的审核。我推荐使用直接从Google购买(而非通过运营商)的Google设备进行测试,因为它最接近AOSP。

此外,用户还可以刷入自定义ROM,这些ROM与AOSP不同。

什么是ROM?

ROM是可以刷入设备的自定义固件。该名称是一个遗留名称,至今仍在使用。ROM代表只读存储器,这是旧版Android设备上固件存储的位置。现代手机上的固件存储在内部闪存中。ROM这个名称一直沿用,意指自定义固件。

自定义ROM示例:

关于Calyx Institute(支持CalyxOS的团队)的有趣事实——他们提供无限移动互联网解决方案(https://calyxinstitute.org/membership/internet)。分享是因为我觉得这很酷 🙂

第三——绕过安全控制(这听起来不好…)

确实如此。Root个人手机时要小心。(我不建议你这样做,并强烈反对Root个人手机。)如果你决定Root个人手机,请确保在完成预期操作(例如安装自定义ROM)后锁定的bootloader。

不建议在Rooted手机上运行敏感应用程序(例如银行、工作电子邮件客户端),原因有几个。应用程序运行在手机上,其他应用程序可能可以访问所有内容,包括应用程序的数据目录。几条经验法则——始终假设应用程序不安全,保持保护措施以防止数据丢失(例如存储在应用程序数据目录中的会话令牌,其他应用程序可以访问)。我可以就这个话题写一整篇新博客/书,但始终要假设运行在你手机上的应用程序希望访问手机上其他应用程序的所有数据(https://techcrunch.com/2024/03/26/facebook-secret-project-snooped-snapchat-user-traffic/)。Root手机使应用程序(和攻击者)更容易访问不应提供给该应用程序的信息,或对另一个应用程序执行未经授权的操作。

Root手机需要解锁bootloader。简而言之,bootloader加载内核。bootloader提供安全功能,包括确保代码来自可信来源。解锁bootloader会移除一项安全控制。关于bootloader功能的更多信息可以在这里找到:https://source.android.com/docs/core/architecture/bootloader

最后——有很多工具可用…我怎么知道一个工具是否安全?

在使用第三方工具时,你需要尽职调查。对初学者来说,一个好的规则是坚持使用OWASP移动应用程序安全框架(https://owasp.org/www-project-mobile-app-security/)中列出的工具。这些工具已经过审查。

开始前的警告:移动测试有一些可疑的工具和仓库可用。始终确保使用官方仓库和工具。在使用前审查工具。你不想在环境中引入坏/恶意代码。注意来源,因为像rootAVD这样的工具存在分支和副本。

Rooting模拟器

我个人喜欢在物理设备上进行移动测试,但在Android中,模拟器仍然是一个可靠的选择。Android虚拟设备(AVD)提供了一个可行的平台。我们将使用模拟器,因为它是免费的!关于安装和使用AVD的详细信息可以在这里找到:https://developer.android.com/studio/run/managing-avds

免费的东西很酷

Root模拟器的一个非常简单的方法是使用rootAVD(https://gitlab.com/newbit/rootAVD)。

TL;DR:rootAVD使用Magisk(https://github.com/topjohnwu/Magisk)Root你的AVD。

运行rootAVD附带的rootAVD.sh shell脚本(或Windows附带的rootAVD.bat批处理脚本)。你需要安装Android调试桥(ADB)(https://developer.android.com/tools/adb)才能使rootAVD工作。

rootAVD.sh显示Root AVD的命令

返回的第一个命令通常是最佳使用命令。注意输出已找到AVD模拟器并提供了要运行的命令。我们将使用的命令针对ramdisk镜像文件。ramdisk镜像将被修改,以在AVD上给我们root访问权限。在终端中使用第一个命令。

1
./rootAVD.sh system-images/android-34/google_apis_playstore/arm64-v8a/ramdisk.img

部分命令输出

接下来,打开Magisk应用程序,它将提示重启以完成设置。

打开带有酷Logo的应用程序

检查你是否成功Root设备的最简单方法,IMO,是使用ADB在设备上获取shell访问权限。在终端中输入命令adb shell以在AVD上获取shell。输入su以访问su二进制文件并授予你的shell提升权限。如果设备已Root,whoami将返回root。

ADB Shell输出显示Root访问权限

当你第一次输入命令su时,手机上的提示将询问你是否要授予com.android.shell root访问权限。确保授予访问权限。

如果你错过了授予shell超级用户访问权限的十秒窗口,没关系。只需在AVD上打开Magisk应用程序并点击“Superuser”图标。

Magisk应用程序中的Superuser

通过切换下图所示的字段来授予进程权限。因为此进程请求了root访问权限,它将显示在这里。

通过切换按钮授予权限

Woot!Root访问权限已授予

现在你的shell将允许你访问su二进制文件!我们可以继续捕获流量。

Root已实现

Rooting物理设备

本演练使用Pixel 6。

首先,我们需要设置允许Rooting的条件。在手机上,我们需要:

  • 启用开发者选项
  • 启用USB调试
  • 解锁Bootloader

开发者选项

要在Pixel设备上启用开发者选项,转到设置 –> 关于手机 –> 快速连续点击版本号(七次),直到你启用了开发者选项。

点击版本号直到启用开发者工具

开发者选项可以在设置 –> 系统 –> 开发者选项中找到。

USB调试

在开发者选项中,你需要启用USB调试。此选项允许我们使用USB协议与手机交互。

OEM解锁

在开发者选项中,你需要确保启用了OEM解锁。切换OEM解锁选项以启用。

关于OEM解锁的侧栏:

如果你无法启用OEM解锁怎么办?如果你的手机是通过运营商(T-Mobile、Verizon)购买的,很可能此选项不可用。首先,我建议始终直接从Google获取手机,或者如果使用经销商,确保设备是“运营商解锁”。也就是说,我通过打电话给运营商,解释我是一名安全研究人员,需要此功能进行测试,取得了成功。我还解释说,我需要运行一个剥离了Google的自定义ROM,并且在手机上启用Google(并跟踪和存储关于我的一切)比解锁bootloader更危险。我只是说值得进行一次对话——员工很乐于助人,愿意听取你的情况!

解锁Bootloader

一旦完成,你需要解锁bootloader。你需要ADB(https://developer.android.com/tools/adb)来执行此操作。运行这些命令。

警告:执行此操作后,设备上的所有信息都将丢失。

1
2
3
adb reboot bootloader
fastboot flashing unlock
fastboot reboot

很好,我们已经将手机设置到所需状态。现在开始Rooting。

Root

从这里(https://developers.google.com/android/images)下载你的Android设备正在运行的镜像。我使用的是运行Android版本14的Pixel 6设备,因此我将选择截图中的版本。你需要确保下载手机上正在运行的版本。

从此网站下载镜像

下载了一个.zip文件。提取该文件的内容。

1
unzip oriole-ap2a.240905.003.f1-factory-655c44e7.zip -d root

当你提取内容时,内容中有一个压缩文件,你需要提取它以获取所需的boot.img文件。

提取Zip文件的内容

1
unzip image-oriole-ap2a.240905.003.f1.zip -d boot_image

定位boot.img

很好!现在我们有了所需的boot.img。使用ADB将该文件推送到手机上的Download文件夹。

1
adb push boot_image/boot.img /sdcard/Download/

使用ADB将镜像推送到手机

现在,使用ADB在手机上安装Magisk。从这里下载APK文件:https://github.com/topjohnwu/Magisk/releases

使用ADB在手机上安装Magisk

打开Magisk应用程序 –> 选择安装 –> 选择选择和修补文件 –> 选择你上传到下载的boot.img文件。

选择此选项以修补镜像

该过程创建了一个修补后的boot.img文件,我们可以用它来Root Android。你的文件名会不同;注意修补后的boot.img文件的路径和文件名。

修补镜像的部分位置

使用ADB将文件从手机中取出。

1
adb pull /storage/emulated/0/Download/magisk_patched-28100_JydcU.img ./patched_boot.img

使用ADB将修补镜像移出手机

一旦你将文件从手机中取出,启动到bootloader。

1
adb reboot bootloader

使用以下命令获取当前插槽。我使用的Pixel 6使用A/B分区,因此我们需要确保刷入正确的分区。

1
fastboot getvar current-slot

返回的当前插槽为插槽B

在我的示例中返回了插槽b。这就是我将使用的。使用以下命令用Magisk修补的boot.img刷入分区。

1
fastboot flash boot_b patched_boot.img

用修补镜像刷入分区

重启。

1
fastboot reboot

确保设备已Root。

Whoami返回Root

就是这样——手机已Root!

简而言之

在本博客中,我们学习了什么是Rooting,Rooting设备的一些优缺点,以及Root AVD和实体手机的方法。Rooting Android手机对测试人员很有用,因为需要超级用户访问权限来全面测试应用程序或手机的软件和固件是否存在漏洞。Rooting还允许对个人手机进行自定义修改,例如安装自定义ROM。一旦手机被Root,测试人员就拥有完整的系统访问权限,可以观察应用程序的行为,并可以监控进出设备的网络流量。然而,缺点是Rooting手机会削弱设备上通常存在的安全功能。

Rooting手机赋予你对设备及其设置的超级用户权力。有用,确实,但也危险,因此请谨慎使用。快乐黑客!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计