This guide is only for advanced users who already knows some basic terminal commands, ADB or fastboot. Android Platform Tools (ADB and stuff) is required
I have only tested the following steps on a Mac. I am NOT responsible and will not listen to your rant if you have bricked/fried your device. I don't solve technical problems on your end. I won't teach you the basics like how to install adb or how to execute a command.
Please do the following steps first:
adb
. Execute adb shell getprop ro.boot.slot_suffix
uuu.exe
in your working directory. Try executing uuu
to see if it works.The output of the command will be the suffix of the partition when executing uuu
commands.
This will erase all user data.
adb reboot bootloader
to enter fastboot mode.fastboot oem unlock
uuu FB: oem unlock
fastboot reboot
uuu FB: reboot
This step is required to use custom kernels. To disable the AVB, flash the blank vbmeta file with the following command:
fastboot --disable-verity --disable-verification flash vbmeta blank_vbmeta.img
uuu FB: flash vbmeta_a blank_vbmeta.img
uuu FB: flash vbmeta_b blank_vbmeta.img
It will bootloop first, then it would boot to recovery, saying that it failed to boot the Android system. You need to choose the factory reset option here. Use volume to control the cursor and the power button to confirm. After a factory reset the OS should boot correctly.
The kernel source in this repo was patched with KernelSU support, lower CPU frequency support and a more power-saving cpu frequency governor. Use the walkman.config
file provided as the config.
My prebuilt one is HERE. To flash it, enter fastboot, then execute: (If you have a a100, change the file name)
fastboot flash boot boot-zx500.img
.uuu FB: flash boot_a boot-zx500.img
uuu FB: flash boot_b boot-zx500.img
adb shell
to enter shell.su -
to gain root privilege.nvpflag shp 0x00000006 0x00000000
then nvpflag sid 0x00000000
to switch the destination code to E. (for UAE, SEA, HK, SK and Oceania markets, with high-gain support)You need your key string for the device first. Enable adb, then execute adb shell cat /vendor/usr/data/icx_nvp.cfg
. You can find you key string at the NAS section. Make sure you have java version >1.8 in you path by executing java -version
. Download the firmware decryptor HERE. Run the decryptor by executing java -jar nwwmdecrypt.jar -i <input file> -o <output file> -k <key string>
in your terminal/CMD/Powershell.
After decrypting, extract the zip file. Use payload_dumper to unpack the payload.bin file in the extracted zip file.
The first 128 bytes of the firmware update file contains the file magic and the SHA-228 digest. The first byte is the magic "NWWM", the next 56 bytes is the SHA-224 digest stored as ASCII hex digits. The rest is unknown.
The encrypted data is a standard Android OTA update zip file. The transformation scheme is AES/CBC/PKCS5Padding.
The encryption key is stored in plain text at /vendor/usr/data/icx_nvp.cfg
as a 48 character long ASCII text. The first 32 bytes are the AES key and the next 16 bytes are the initialisation vector. NW-A100 series and NW-ZX500 series has different keys.
Hold Vol- & FF when powering on.
All the configuration, flags, keys, etc. are stored in the nvp as raw fields. nvp
, nvpflag
, nvpinfo
, nvpnode
, nvpstr
and nvptest
in /vendor/bin
are believed to be debug tools used to manipulate the values in nvp. nvp
is used to display the binary partition in hex format. nvpflag
is used to view and write some flags such as destination. nvpstr
controls some other string variables in nvp. The purposes of the others are unknown.