小米平板5(nabu) 刷完后发现data分区是加密的,而且因为网络原因无法激活的解决办法 (ABX二进制patch绕过Setup Wizard)

背景

刷入第三方ROM(如DerpFest)后,首次开机会进入Google激活向导(Setup Wizard)。如果网络无法连接Google服务器,系统会卡在"正在准备您的平板电脑 / 无法连接到互联网"界面,无法进入桌面。

常规解决思路(连VPN、设置WiFi代理)在激活界面操作受限,加上data分区加密,导致大多数ADB绕过方法失效。

本文记录一种通过直接patch ABX二进制设置文件来绕过激活的方法


环境


WiFi代理方法

激活界面可以添加WiFi并设置HTTP代理,理论上可以走电脑的***代理出去。操作步骤:

  1. 电脑***开启Allow LAN
  2. 平板添加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清晰 而且我已经折腾得很累了 我把文章审查了一遍保证没有错误 把关键得地方强调补充了一遍

posted @ 2026-05-02 10:52  气温骤降  阅读(59)  评论(0)    收藏  举报