小米平板5(nabu) 刷完后发现data分区是加密的,而且因为网络原因无法激活的解决办法 (ABX二进制patch绕过Setup Wizard)
背景
刷入第三方ROM(如DerpFest)后,首次开机会进入Google激活向导(Setup Wizard)。如果网络无法连接Google服务器,系统会卡在"正在准备您的平板电脑 / 无法连接到互联网"界面,无法进入桌面。
常规解决思路(连VPN、设置WiFi代理)在激活界面操作受限,加上data分区加密,导致大多数ADB绕过方法失效。
本文记录一种通过直接patch ABX二进制设置文件来绕过激活的方法
环境
- 设备:小米平板5(nabu)
- ROM:DerpFest Android 16 + arch arm
- Recovery:PitchBlack Recovery(TWRP变种)(你可以在这里找到它 https://github.com/nabu-alarm/installation-guide/releases
WiFi代理方法
激活界面可以添加WiFi并设置HTTP代理,理论上可以走电脑的***代理出去。操作步骤:
- 电脑***开启Allow LAN
- 平板添加WiFi时设置代理主机名为电脑局域网IP(如
192.168.1.63),端口7890
问题:Android激活时发出的是HTTPS请求,HTTP代理对系统级连通性检测(connectivitycheck.gstatic.com)不一定生效,即使手机可以用这个方法,平板的DerpFest版本仍然报告无法连接互联网。
ADB直接写入settings
通常的绕过方法:
adb shell settings put global device\_provisioned 1
adb shell settings put secure user\_setup\_complete 1
问题:系统首次启动前ADB默认关闭,进入系统后才有ADB权限,形成死锁。
Recovery里执行settings命令
进入PitchBlack Recovery后ADB可用,但:
/system/bin/sh: settings: inaccessible or not found
settings命令依赖cmd,而cmd依赖libandroid\_runtime.so等完整Android运行时库,在recovery环境里这些库不存在,无法执行。
挂载其他分区修改文件
Recovery里尝试挂载product、system_ext分区寻找SetupWizard APK并删除,但:
mount被fstab锁定,无法手动挂载- data分区加密,首次开机前无法直接访问
---
正确思路:Boot进PitchBlack Recovery挂载Data
PitchBlack Recovery(或TWRP)在Mount界面可以直接勾选Data分区挂载,即使加密也能解密挂载(需要设备没有设置锁屏密码,出厂状态默认可以)。
挂载后通过ADB可以访问/data目录。
---
关键发现:settings文件是ABX二进制格式
Android将settings存储在:
/data/system/users/0/settings\_global.xml
/data/system/users/0/settings\_secure.xml
虽然扩展名是.xml,实际是**ABX(Android Binary XML)**格式,无法用普通文本编辑器或sed修改。
用grep可以确认:
grep -i "device\_provisioned" /data/system/users/0/settings\_global.xml
# 输出:Binary file matches
---
解决方案:Python patch ABX文件
第一步:把文件pull到电脑
adb pull /data/system/users/0/settings\_global.xml C:\\Desktop\\settings\_global.bin
adb pull /data/system/users/0/settings\_secure.xml C:\\Desktop\\settings\_secure.bin
第二步:分析二进制结构
f = open(r'C:\\Desktop\\settings\_global.bin', 'rb')
d = f.read()
f.close()
idx = d.find(b'device\_provisioned')
print('context:', d\[idx:idx+40])
输出:
context: b'device\_provisioned/\\x00\\x05\\x00\\x010/\\x00\\x06\\x00\\x07android/\\x00\\x07\\x00'
可以看到device\_provisioned的值0紧跟在固定的字节序列/\\x00\\x05\\x00\\x01之后,直接替换这个字节即可。
第三步:patch settings_global.xml(device_provisioned)
f = open(r'C:\\Desktop\\settings\_global.bin', 'rb')
d = bytearray(f.read())
f.close()
target = b'device\_provisioned/\\x00\\x05\\x00\\x010'
replace = b'device\_provisioned/\\x00\\x05\\x00\\x011'
pos = d.find(target)
if pos >= 0:
d\[pos:pos+len(target)] = replace
print('patched!')
f = open(r'C:\\Desktop\\settings\_global\_patched.bin', 'wb')
f.write(d)
f.close()
第四步:patch settings_secure.xml(user_setup_complete)
f = open(r'C:\\Desktop\\settings\_secure.bin', 'rb')
d = bytearray(f.read())
f.close()
target = b'user\_setup\_complete/\\x00\\x05\\x00\\x010'
replace = b'user\_setup\_complete/\\x00\\x05\\x00\\x011'
pos = d.find(target)
if pos >= 0:
d\[pos:pos+len(target)] = replace
print('patched!')
f = open(r'C:\\Desktop\\settings\_secure\_patched.bin', 'wb')
f.write(d)
f.close()
第五步:push回设备
adb push C:\\Desktop\\settings\_global\_patched.bin /data/system/users/0/settings\_global.xml
adb push C:\\Desktop\\settings\_secure\_patched.bin /data/system/users/0/settings\_secure.xml
第六步:重启
adb reboot
重启后直接进入桌面,Setup Wizard不再出现。
---
注意事项
- 进入Recovery后记得在Mount界面勾选Data,否则
/data目录为空 - 两个文件都要patch,只改一个可能仍然触发激活流程
- 进入桌面后建议尽快连网完成Google账号登录,让激活状态同步到服务器
- 本方法适用于data分区未设置锁屏密码的首次刷机状态
---
总结
| 步骤 | 操作 |
|---|---|
| 1 | 重启进入PitchBlack Recovery |
| 2 | Mount界面勾选Data分区 |
| 3 | ADB pull两个settings文件到电脑 |
| 4 | Python脚本patch二进制ABX文件 |
| 5 | ADB push回设备 |
| 6 | 重启进入系统 |
整个过程不需要格式化data,不丢失已有数据。 (格式化data当然只影响userdata分区)
(文章很多都是ai帮我总结的 而且我感觉自己写的话 逻辑也没有ai清晰 而且我已经折腾得很累了 我把文章审查了一遍保证没有错误 把关键得地方强调补充了一遍

浙公网安备 33010602011771号