本文以 Google pixel4 机型为例,介绍了Android刷机与越狱过程。
一、Android 刷机
一、、
前期准备
前置知识:什么是 Android SDK Platform-Tools
Android SDK Platform-Tools 是一个包含了一组实用工具的软件包,用于与 Android 设备进行交互、调试、测试和开发应用程序。这些工具提供了一种在开发过程中与 Android 设备和模拟器进行通信的方式。
简单介绍2个常见的 Android SDK Platform-Tools 中的工具,也是本文中使用的:
adb (Android Debug Bridge):adb 是最常用的工具之一,其允许开发人员在计算机和 Android 设备之间进行通信。用户可通过 adb 在设备上安装和卸载应用程序、上传和下载文件,执行 shell 命令,进行端口转发等操作
fastboot:fastboot 是一个用于刷写 Android 设备的工具,其可用于解锁 Bootloader、刷写系统分区、引导映像等。
1、电脑 Android SDK Platform-Tools 准备
Android SDK Platform-Tools
可从 Android Studio 的 SDK 管理器或sdkmanger命令行工具获取最新的 SDK Platform-Tools;也可以单独下载这些命令行工具,下载地址:
https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn#revisions
*左右滑动查看更多
2、Android SDK Platform-Tools 历史版本
最新版本下载地址:
Windows:
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
*左右滑动查看更多
MacOS:
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
*左右滑动查看更多
Linux:
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
*左右滑动查看更多
下载历史版本:
https://dl.google.com/android/repository/platform-tools_r[版本号]-[操作系统].zip
*左右滑动查看更多
版本号为 Android SDK Platform-Tools 的历史版本,具体版本修订记录可查阅SDK平台工具版本说明。
SDK平台工具版本说明:
https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn
*左右滑动查看更多
操作系统中,Windows 操作系统对应 windows,MacOS 操作系统对应 darwin,Linux 操作系统对应 linux。
如下载兼容 MacOS 的33.0.3 版本,则构造如下地址:
https://dl.google.com/android/repository/platform-tools_r33.0.3-darwin.zip
*左右滑动查看更多
Android SDK Platform-Tools 降级则将旧版本解压后覆盖 SDK 根目录下的 platform-tools (若是单独下载的 platform-tools,则覆盖对应目录或直接多个版本同时使用)。
针对多个版本同时使用可将主力版本更新进环境变量。
MacOS 示例:
sudo vi /etc/paths
Windows 示例:
选择【此电脑 – 属性 – 高级系统设置 – 环境变量】,将对应的 SDK Platform-Tools 目录添加到 path 即可。
3、手机开启开发者选项
选择【设置 – 系统 – 关于手机】,点击【版本号】七次即可开启。
4、手机开启 USB 调试
选择【设置 – 系统 – 开发者选项】,开启【USB 调试】。
5、手机 OEM 与 Bootloader 解锁
进入【开发者选项】,选择【OEM 解锁】进行 OEM 解锁。
手机连接电脑,通过Android SDK Platform-Tools中的adb工具执行adb reboot bootloader命令进入 Bootloader 模式(关机状态下,可长按【电源键】与【音量减键】以进入 Bootloader 模式),手机进入 Bootloader 模式后,连接电脑,通过 Android SDK Platform-Tools 中的 fastboot 工具执行fastboot devices命令验证是否成功进入 Bootloader 模式。
执行命令fastboot flashing unlock进行 Bootloader 解锁。
Bootloader 解锁界面中,用【音量加/ 减】键控制光标,选择【Yes】并按下电源键进行 Bootloader 解锁。
等待操作完毕后执行fastboot reboot命令重启手机。
为什么要解OEM锁?
解 OEM(Original Equipment Manufacturer,原始设备制造商) 锁通常指解开 Android 设备的 Bootloader 锁,解 OEM 锁可以为用户提供更多的灵活性和控制权,解锁 oem 便可解锁以下功能:
自定义固件和操作系统:解 OEM 锁可以允许用户在设备上安装自定义的固件、操作系统或 ROM。这便意味着用户可尝试不同的 Android 版本、定制的用户界面以及其他修改过的操作系统。
Root 权限: 解 OEM 锁通常也是获得 root 权限的一步,root 权限使用户能够访问设备的系统文件、设置权限,以及运行需要特权的应用程序等。
开发和测试:对于开发者而言, 解 OEM 锁后便能允许其使用该设备进行调试、测试和开发应用程序。
6、镜像下载
大家选择对应机型的镜像下载即可。官方镜像下载地址:
Nexus 和 Pixel 设备的出厂映像
https://developers.google.cn/android/images?hl=zh-cn#flame
*左右滑动查看更多
二
刷机行动
1、ANDROID_PRODUCT_OUT 设置
需设置环境变量ANDROID_PRODUCT_OUT值为镜像解压后所在目录地址。
Windows 选择【此电脑 – 属性 – 高级系统设置 – 环境变量】添加对应键值。
MacOS 执行如下命令:
export ANDROID_PRODUCT_OUT=【镜像完整地址】。
2、完整镜像刷入
手机进入 Bootloader 模式,Windows 操作系统运行flash-all.bat , MacOS 则运行 flash-all.sh,等待完成即可。
3、部分镜像刷入
若只想刷入部分镜像,可参考flash-all.sh所执行的命令仅刷入部分镜像,可执行命令如fastboot flash boot boot.img等。
4、示例
手机已开启 USB 调试并解除 Bootloader 锁。
手机连接电脑,终端执行以下命令查看 adb 连接。
此处显示unauthorized,在手机上同意 adb 调试即可。
执行以下命令进入 Bootloader 模式:
adb reboot bootloader
此时手机显示Fastboot Mode,成功进入 Bootloader 模式。
页面中Device state:unlocked表示该机已解除 Bootloader 锁。
执行以下命令查看 fastboot 连接情况:
fastboot devices
设置环境变量ANDROID_PRODUCT_OUT值为镜像解压后所在目录地址。
export ANDROID_PRODUCT_OUT=/Users/Android/flame-qq2a.200405.005
*左右滑动查看更多
执行flash-all.sh进行刷机,等待完成即可。
三
刷机部分问题解决
1、Bootloader 模式下设备未识别
MacOS 执行命令system_profiler SPUSBDataType查看 USB 设备是否成功连接。
Windows 选择【此电脑 – 管理 – 设备管理器】查看设备接入情况,若显示为标黄未知设备则为未能成功识别。
可尝试更换 USB 数据线,Windows 右键该未知设备选择【更新驱动程序】,选择 Android Studio 中的usb_driver文件夹中的驱动程序进行更新。
2、fastboot: error: ANDROID_PRODUCT_OUT not set
同上文设置ANDROID_PRODUCT_OUT变量。
3、刷机完卡在开机界面
pixel6 等机型是不允许向下兼容的,刷过高版本 Android 要降级的话不能使用常规刷机方式。
本次测试使用 pixel4 机型,这是允许向下兼容的,但是在刷机过程中还是出现该情况,这是由于 Android SDK Platform-Tools 的版本问题,对其进行降级即可解决。
4、开机后 Wi-Fi 无法正常连接
Android 7.0 系统以后连接 Wi-Fi 无法正常连接,此为 Android 原生系统访问谷歌服务器验证 Wi-Fi 有效性。
运行以下命令再重启网络即可。
adb shell settings put global captive_portal_https_url
https://www.google.cn/generate_204
*左右滑动查看更多
二、Android 越狱
本次越狱采用 Magisk 进行,内核版本是 5.10 以上可尝试使用 KernelSU。
Magisk 网址:
https://magiskcn.com/
KernelSU 网址:
https://kernelsu.com/
1、Magisk 安装与镜像制作
通过Magisk 下载地址下载 Magisk apk 文件。
https://magiskcn.com/magisk-download
*左右滑动查看更多
手机开启 USB 调试,连接电脑。
使用 adb 工具执行以下命令将 Magisk 安装至手机。
adb install Magisk-Stable-26100.apk(根据文件名与具体地址变化)
*左右滑动查看更多
将先前刷机所下载的镜像中的boot.img文件(位于解压完成文件中的另一压缩包中)提取出来,通过adb执行以下命令推送到手机/sdcard/Download/目录下。
adb push boot.img /sdcard/Download/
*左右滑动查看更多
手机打开 Magisk 选择【安装】。
选择【选择并修补一个文件】,文件选刚刚推送到手机/sdcard/Download/目录下的boot.img文件。
点击【开始】,之后 Magisk 就会自动开始修补,并且将处理好的新 boot 镜像保存在 /sdcard/Download/ 文件夹里。
所生成的新 boot 镜像文件需回传至电脑,可通过adb执行如下命令进行回传。
adb pull /sdcard/Download/magisk_patched_xxx.img(根据文件名变化) 【本地地址】
*左右滑动查看更多
Windows 用户也可直接通过文件挂载进行传输, MacOS 用户可下载第三方文件管理工具(如HandShaker MAC版)。
HandShaker MAC版下载网址
https://www.smartisan.com/apps/#/handshaker
*左右滑动查看更多
2、以新镜像启动
类似上文刷机步骤,执行adb reboot bootloader命令进入 Bootloader 模式。
执行以下命令:
fastboot boot magisk_patched_xxx.img(修补后镜像,根据文件路径文件名改变)
*左右滑动查看更多
执行完成根据需求重启便越狱成功,手机遇特殊情况重启后会恢复到未被修改的 boot.img 镜像,此时仅需进入 Bootloader 模式再次运行一下以上命令即可。
三、Apk root 防御
上文中的刷机方式其实就是修改系统镜像重新刷入。
为了更直观地谈防护措施,我们直接来看一个自编译的安卓开源项目源码。
*注:此处所举例源码分支为 android-10.0.0_r17,适用于 Pixel XL、Pixel 机型,编译为 userdebug 版本。
user 版本是发布给最终用户的版本,也就是普通用户使用的版本。这个版本的系统是最稳定的,它没有开启调试选项,也没有 root 权限,用户只能运行和使用已安装的应用程序,无法访问系统的内部和敏感信息。
而 userdebug 版本是为开发和调试而设计的版本。与 user 版本相比,它提供了更多的调试和开发工具,例如可以通过 adb shell 获取 root 权限,方便开发人员在开发过程中进行调试和测试。也就是说 userdebug 版本的镜像,提供的就是一个 root 的环境。
一、、
系统文件与系统命令
build/make/target/product/base_system.mk代码中列举了 userdebug 版本编译时带的一些包,从中可以看到一些进行调试与测试的一些工具,如“su”,“ss”等等,这些包在编译完成后会生成一些系统文件或目录:
# Packages included only for eng or userdebug builds, previously debug tagged
PRODUCT_PACKAGES_DEBUG :=
adb_keys
arping
gdbserver
init-debug.rc
iotop
iw
logpersist.start
logtagd.rc
procrank
showmap
sqlite3
ss
strace
su
sanitizer-status
tracepath
tracepath6
traceroute6
unwind_info
unwind_reg_info
unwind_symbols
*左右滑动查看更多
检测以上进行调试的工具如/system/bin/su、 /system/xbin/su等是否存在,命令是否能执行,便能判断当前系统是否处于 root 环境。
二、、
系统属性检测
root 的系统可能会存在一些系统属性与正常的 user 版本不一样。
如以下编译完成后的build.prop文件,其存储的是编译完成后的系统属性。
其中构建指纹信息:
ro.bootimage.build.fingerprint=Android/aosp_sailfish/sailfish:10/QP1A.191005.007.A3/08071452:userdebug/test-keys便有很明显的 userdebug 版本的特征。
再看build/core/make.mk代码所展示的,userdebug 版本的系统的ro.debuggable值为1:
ifeq (true,$(strip $(enable_target_debugging)))
# Target is more debuggable and adbd is on by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
# Enable Dalvik lock contention logging.
ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
else # !enable_target_debugging
# Target is less debuggable and adbd is off by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
*左右滑动查看更多
类似的可能会发生变化的系统属性如ro.secure等等,也可作为检测的对象。
三、、
Superuser应用程序
部分 Rooted 设备可能会安装一些 Superuser 管理应用程序,如 SuperSU 或 Magisk Manager 等等,如前文便是介绍了如何使用 Magisk 进行越狱刷机,可尝试进行这些类似应用的检测。
四、、
特权进程
Rooted 设备上可能会运行一些具有特殊权限的 root 进程,可尝试对进程列表进行检测以查找特权进程。
五、、
调试状态
root 的系统就是为了方便进行调试与测试等操作,设备可调试便可能存在被 Rooted 的可能。
六、、
Hooking框架
Rooted 设备为了更方便地进行应用调试,可能会使用 Hooking 框架来修改应用程序的行为,可尝试检测一些常见的 Hooking 框架,如 Xposed 框架等等。
插播一条招聘信息
一、安全研究工程师实习生(24/25届)
工作地点:深圳
岗位职责:
1、具有较强的责任感、具备能够独立的开展工作的能力、自学能力强、做事踏实认真;
2、对防御对抗、反溯源、攻击利用等相关红队工具进行研究和开发;
3、熟悉OWASP TOP 10,具有网络安全、系统安全、Web安全等方面的理论基础;
4、熟悉常见编程语言中的一种(Java、Python、PHP、GO),并能够熟练写出针对性的测试脚本;
5、参与区域内网渗透测试、代码审计、红蓝对抗活动、最新漏洞动态跟踪及复现、风险评估、客户培训等工作;
6、主要参与新服务、新技术创新服务的研究;
7、根据ATT&CK框架梳理研究相关TPPs,并形成对应的检测规则。
加分项:
1、具有渗透测试经验或逆向分析能力或溯源分析能力,曾经参与过大型的红蓝对抗项目;
2、熟悉Java、Python、PHP、GO等编程,并有良好的编程习惯和丰富的代码经验;
3、具备钻研精神,愿意在安全领域做出技术突破;
4、具有较强的责任感、具备能够独立的开展工作的能力、自学能力强、做事踏实认真;
二、代码审计工程师实习生(24/25届)
工作地点:深圳
岗位职责:
1、跟踪和分析业界最新安全漏洞。
2、挖掘Java、PHP程序中未知的安全漏洞和代码缺陷,并对漏洞进行验证,编制安全加固报告;
3、主要参与新服务、新技术创新服务的研究;
任职要求:
1、对JAVA/PHP编程有较深入的了解,具备较强的Java/PHP代码审计能力,有丰富实战能力;
2、熟悉JAVA/PHP主流框架,具备有一定的编程能力;
3、深入理解常见安全漏洞产生原理及防范方法;
4、熟练掌握源代码测试工具及测试流程,有CNVD、CNNVD等漏洞证书、CVE或CTF比赛获奖者者优先。
5、熟悉主流的源代码审计工具;
6、思路清晰,具有优秀的分析、解决问题的能力,有良好的学习能力及团队协作能力;
7、具备较强的沟通能力、抗压能力,团队合作精神及钻研精神。
简历投递可扫描本文末二维码添加小编微信,或直接发送至邮箱[email protected]
往期回顾
原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| Android Root测试环境实践