老机复活:ASUS ZenFone 5 (A501CG/T00J) 国行 CUCC → 国际版 WW Android 5.0 全流程
机型:ASUS ZenFone 5 A501CG(T00J) · Intel Atom Z2560(Clover Trail+,x86)· 8GB ROM
起点:Android 4.3 JSS15Q,版本CUCC_user_1.17.40.17,SKU=CUCC(联通定制),IFWI 59.29,未 root、bootloader 锁定
终点:Android 5.0WW_user_3.24.40.87,SKU=WW,bootloader 已解锁,TWRP 3.0.M4-0,SuperSU 2.82 root
全程命令行可复现,文中命令为实测原文。
一、为什么不能”直接刷 WW 包”(先讲原理,后面全是它的推论)
ASUS 的固件包 UL-ASUS_T00F-WW-3.24.40.87-user.zip 里 META-INF/com/google/android/updater-script 写死了四道校验:
1 | getprop("ro.build.asus.sku") == "WW" || abort("Please use the right SKU for updating...") |
我们的设备是 CUCC / 4.3 / ASUS_T00J,四条全挂。
再往下还有 两段式安装:
1 | set_stage("/dev/block/mmcblk0p4", "3/3"); # release != 5.0 时自动置 3/3 |
三个关键事实(本篇全部技巧的来源):
- recovery 模式下的
getprop不读/system/build.prop,只读 recovery 分区 ramdisk 里的/default.prop。
所以改系统的 build.prop 对”刷机时的校验”毫无作用 —— 必须让 recovery 自身报告 WW/白名单指纹。
恰好 87 包自带的recovery.img,其 ramdisk/default.prop就是sku=WW / release=5.0 / device=ASUS_T00F / fingerprint=...WW_user_3.24.40.87_20151222_34,全部命中白名单。 - 因为它是
release=5.0,第 15 行不会自动置阶段标记,于是必须手工把阶段写成3/3。 p4分区是一个 8MB 的 ext4 小分区,set_stage实际是把3/3这个字符串裸写在该分区偏移0x340(实测确认)。
因此整体思路 = 换一个”自称 WW”的 recovery + 手工写阶段标记 + 用固件自带的 update-binary 来干这件事,全程不需要解锁、不需要签名(因为我们不打包、不伪造签名)。
二、准备清单
| 用途 | 文件 | 来源 |
|---|---|---|
| 目标固件 | UL-ASUS_T00F-WW-3.24.40.87-user.zip(723MB) |
ASUS 官网 |
| 备用固件 | UL-ASUS_T00F-WW-2.21.40.30-user.zip(731MB) |
ASUS 官网 |
| 4.3 提权 | RootZenFone APK(1.4.6r 一类) | 社区镜像 |
| 解锁镜像 | root/fastboot.img、root/ifwi_ctp_a500cg.bin、vanilla/dnx_fwr_ctp_a500cg.bin |
v-mas/asus-zenfone-5-root-n-utils |
| TWRP | TWRP-3.0-M-4.0-20160609-T00F.zip → 内含 recovery.img |
AndroidFileHost(X AnwarMov 的 flid=52033 文件夹) |
| Root | SR5-SuperSU-v2.82-SR5-20171001224502.zip |
Chainfire(?retrieve_file=1) |
| 驱动 | Intel USB Driver / Windows 自动装的 Android Bootloader Interface |
— |
⚠️ 我们没有下载 CN 版
3.24.40.87(官网 404)——本方案根本不需要它。
三、步骤 0:侦察设备
1 | adb devices -l |
结论:老 Intel droidboot(协议 0.5),fastboot oem unlock / fastboot flashing unlock 一律无效,别信那类教程。
四、步骤 1:在 4.3 上提权(只为改 build.prop)
装 RootZenFone APK(4.3 时代工具,运行前先断网)→ 确认后:
1 | adb shell "su -c id" # uid=0(root) 即可 |
五、步骤 2:伪装属性(要改 4 个文件,不是 1 个)
老 Intel 机型的属性是分层加载的:/system/build.prop 之下还有按硬件 SKU 命名的覆盖文件,运行时真正生效的是后者。
1 | adb shell "su -c 'ls -l /system/build*.prop'" |
每个文件里改这 5 行:
1 | ro.build.asus.sku=WW |
(指纹取 87 包白名单里的 4.4.2 条目;release=4.4.2 是为了后面走”自动置阶段”分支。)
1 | # 备份 |
只改系统属性不会让刷机校验通过(见原理),但 4.4.2 伪装在后面”用 update-binary 写阶段标记”时是必要的——那次
getprop读的是 Android 运行时属性。
六、步骤 3:刷入”自称 WW”的 recovery
1 | # 从 87 包里解出 recovery.img(10.29MB,Intel OSIP 格式,魔数 $OS$) |
七、步骤 4:手工把阶段标记写成 3/3
思路:拿固件包自带的 update-binary,在 Android 里(有 root、getprop 返回我们伪装的 WW/4.4.2)跑一个只做 set_stage 的最小脚本包——不碰 system,零风险。
1 | # 自制 stage3.zip:把 87 包的 update-binary + 只含 set_stage 的 updater-script 一起打包 |
验证(挂载 p4 直接看裸字节):
1 | adb shell "su -c 'dd if=/dev/block/mmcblk0p4 of=/sdcard/p4.bin bs=1M'" |
八、步骤 5:自动安装 WW 5.0
1 | # 固件包放 /data/local/tmp(放 /sdcard 会被系统 FOTA 服务扫到并删掉!) |
屏幕上会依次执行:Device image SKU: WW → format /system → 写 system → boot → droidboot → flash IFWI,约 5–8 分钟,完成后自动重启(首次开机 ART 重编译会显示”Android 正在升级…”,双核 Atom 上等了约 8 分钟)。
验证:
1 | adb shell getprop ro.build.display.id # LRX21V.ASUS_T00J_WW_user_3.24.40.87_20151222_34 |
至此 CUCC → WW 完成,且系统自带 GMS。
九、步骤 6:解锁 Bootloader(fastboot 法,无需降级)
ASUS 官方 Unlock APK 只有 KitKat 版,Lollipop 上要解锁只能走社区 fastboot 法。原理:bootloader 会校验
boot/recovery(日志里的secure device / signed image),但fastboot(droidboot) 分区本身不校验,所以能先把 droidboot 换成”允许写 IFWI”的版本,再写解锁版 IFWI。
1 | adb reboot bootloader |
验证解锁:刷一个未签名镜像,若直接 OKAY(不再有 secure device / signed image)即为已解锁:
1 | fastboot flash recovery kit_recovery_root.img # 修改版 recovery,能被接受 → 解锁成功 |
副作用:打补丁的 droidboot 会伪造序列号(fastboot 里显示 0123456789ABCDEF),Android 内序列号仍正常;如需还原,刷回原厂 droidboot.img 即可(解锁状态存在 IFWI 里,不受影响)。
十、步骤 7:刷 TWRP + Root
1 | # TWRP 3.0.M4-0(T00F/T00J 通用,x86) |
进入 recovery:fastboot reboot recovery 在这台 droidboot 上无效(只是普通重启),用以下二选一:
1 | adb reboot recovery |
TWRP 起来后 adb 是 root,并自带 twrp 命令行工具:
1 | adb shell "id" # uid=0(root) |
十一、步骤 8:收尾
1 | adb shell reboot |
最终状态
| 项目 | 结果 |
|---|---|
| 系统 | Android 5.0,LRX21V.ASUS_T00J_WW_user_3.24.40.87_20151222_34 |
| SKU | WW(自带 GMS) |
| Bootloader | 已解锁 |
| Recovery | TWRP 3.0.M4-0(adbd 为 root,支持 twrp CLI) |
| Root | SuperSU 2.82(system mode) |
| IFWI | 59.29(解锁版) |
十二、踩坑列表(血泪版)
- ASUS 固件包写死了 SKU/版本/机型/指纹四道 assert,国行机直接 sideload WW 包必定
abort("Please use the right SKU...")。且 assert 在任何写入之前执行,所以”试刷”本身安全——可以拿它当诊断探针(本次就是靠它的Device image SKU: CUCC输出定位问题)。 - recovery 里的
getprop不读/system/build.prop,只读 recovery 分区 ramdisk 的/default.prop。所以”改系统 build.prop 再进 recovery 刷机”这条路根本不通。 - 老 Intel 机型属性是分层加载的:除
/system/build.prop外还有build.single.prop、build.a501cg.prop、build.a501cg-single.prop,运行时生效的是 SKU 覆盖文件——只改 build.prop 重启后getprop毫无变化(本次实测:文件改了、运行时仍是 CUCC)。 - 不要拿
2.21.40.30当中间跳板:87 包的指纹白名单里没有它,装完仍会在第 14 行 abort。 release==5.0且阶段标记为空时,脚本会”什么都不做”(静默无输出,最容易误判成”刷过了”)。必须手工写3/3。- 阶段标记藏在 p4 这个 8MB ext4 分区的裸偏移
0x340,不是普通文件;手工echo到块设备前先dd备份该分区。 - 想跑
set_stage最稳的办法是用固件包自带的update-binary:它自带set_stage/get_stage/write_osip_image/flash_ifwi等 ASUS 扩展;在 Android 里以 root 直接执行即可(./update-binary 3 1 <包.zip>,脚本从包的updater-script读)。 - 固件包别放
/sdcard:ASUS 的 FOTA 服务会扫描根目录并把包删掉(本次体积从 891MB 掉到 178MB 才发现)。放/data/local/tmp/或子目录。 - Android 4.3 的 toolbox 极度残缺:
printf、tail、head、find、wc全都没有,脚本里别用;用echo/cat/dd/ls。 - CN 版
3.24.40.87官网 404 不影响本方案——用 BY SKU 的 WW 包 + 自带 recovery 即可,不需要 CN 包做跳板。 fastboot reboot recovery在这台 droidboot 上无效(返回 OKAY 但只是普通重启)。结果就是:进不了 TWRP → 系统正常启动 →install-recovery.sh又把刚刷的 TWRP 覆盖回原厂 recovery(更迷惑的是,/system/recovery-from-boot.p还在)。正确姿势是adb reboot recovery或音量上+电源进 droidboot 菜单选 RECOVERY。- TWRP 启动失败会掉进 Cloverview 模式:手机只显示 USB 图标,Windows 出现无驱动的
CLOVERVIEW(VID_8086&PID_09EE)。这不是变砖——长按电源 15–20s 强制断电再开机即可;实在不行再用iSocUSB 驱动 + xFSTK 1.5.1重写 bootloader(此时不需要 xFSTK)。 - bootloader 的签名校验只覆盖
boot/recovery(日志secure device / signed image):这就是”必须解锁才能刷 TWRP”的原因;而fastboot(droidboot) 与 IFWI 的可写性正是解锁漏洞所在。 - 打补丁的 droidboot 会伪造序列号(fastboot 里变
0123456789ABCDEF),部分依赖序列号的修复工具会失效;刷回原厂droidboot.img可还原。 - 刷机前务必先 root 拿到写
/cache/recovery/command的权限(该目录属system:cache,shell 用户写不了),否则就得靠人手按键去 recovery 菜单里选 “apply update from ADB”。 - 4.3 的旧
/data直接进 5.0 会长时间卡在开机动画(或者 bootloop 边缘反复重启)。首屏”Android 正在升级…”在这台双核 Atom 上等了 ~8 分钟属于正常,别急着断电;之后最好恢复出厂设置。 - 恢复出厂设置会关闭 USB 调试,导致
adb显示unauthorized:需要在手机上重新开启并勾选”一律允许”;必要时adb kill-server && adb start-server重新触发授权弹窗。 - 现代 fastboot 会刷屏
Warning: skip copying xxx image avb footer (partition size: 0),对这台不支持 AVB 的老机器无意义,忽略即可。 fastboot oem *全部不支持(本机实测unknown OEM command),任何fastboot oem unlock/fastboot flashing unlock教程对 T00J 都无效。- PC 侧脚本也踩坑:PowerShell 里
Align4 $pos+110+$nsize这类写法会被当成整串参数、$b[$i-1]的数组索引要加括号;解析 OSIP/cpio 时注意 zip 套 zip、cpio 的 4 字节对齐、以及 build.prop 必须保持 LF 换行(否则getprop的值会带\r)。
附:核心命令速查
1 | # CUCC 4.3 → WW 5.0 |
本文全部命令均在该台设备上实测通过;涉及写 IFWI(eMMC boot0)的步骤请保证电量充足、数据线稳定,中断将需要 xFSTK 救砖。