This guide will help you root, de-bloat and secure these amazing Android-based BOOX eReaders from ONYX:
- BOOX Page 7
- Boox Go Color 7 (Gen I)
- Boox Go 7 (Gen II)
The guide assumes that you are using a Mac with Homebrew installed and have just unboxed the device and are turning it on for the first time. (Congrats!)
- You're concerned about the amount of data this device sends to
.cnservers. - You want a lean and mean eReader a la Kindle.
- You're bored and need something fun to do!
- DO NOT CONNECT THE DEVICE TO WI-FI
- Complete onboarding setup
- Enable USB Debugging
- Root the device
- Install AFWall+ and AdAway
- Remove unnecessary apps
- Sideload wanted apps and whitelist them
- Harden the device
- Use and enjoy!
- Credits
These devices are very chatty with Onyx servers in .cn. Not much is known about what they are sending.
Err on the side of paranoia caution and keep the eReader offline until we're done.
Complete the First Time wizard after powering on the device. Don't bother reading the Privacy Policy; it's bunk. Accept the agreements, and select any time zone. We will change that later.
- "Apps" -> Hamburger Menu -> "App Management" -> "USB Debug Mode"
- Connect the device via USB.
- Tap "OK" on the device, then click "Allow" on your Mac.
- Install adb:
brew install android-platform-tools - Confirm the device shows up; should not be blank:
adb devices - Determine the boot slot that your device is using; will be
_aor_b:adb shell getprop ro.boot.slot_suffix - Reboot into Emergency Download Mode:
adb reboot edl
✅ Courtesy of @doomgoatman over at MobileRead. Original post. Thanks!
NOTE: These instructions theoretically work with a BOOX Go Color 7 Gen II, but they haven't been tested against it.
✅ I was able to perform the steps below without an EDL cable. Your mileage may vary!
- Download the latest (at this time of writing) FairPhone FP4 /e/OS Android 14 images:
curl -Lo fp4.zip https://images.ecloud.global/official/FP4/IMG-e-4.0-a14-20260610633982-official-FP4.zip && unzip fp4.zip - Download the recovery image:
curl -Lo ./misc-recovery.img https://www.mobileread.com/forums/attachment.php?s=1a0597ae2ac65b1fbcc7f0c14e100aef&attachmentid=221178&d=1771657615 - Download the latest update for Boox Go 7:
curl 'http://en-data.onyx-international.cn/api/firmware/update?where=\{%22buildNumber%22:0,%22buildType%22:%22user%22,%22deviceMAC%22:%22%22,%22lang%22:%22en_US%22,%22model%22:%22Go7%22,%22submodel%22:%22%22,%22fingerprint%22:%22%22\}' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko)' |jq -r .downloadUrlList[0] | xargs curl -Lo ./update.upx - Get the Boox Update Decrypter:
git clone https://github.com/Hagb/decryptBooxUpdateUpx.git
cd decryptBooxUpdateUpx
git submodule update --init --recursive
- Install the Payload Dumper tool:
brew install payload-dumper-go - Decrypt the update:
python3 DeBooxUpx.py Go7 ../update.upx ../update.zip - Extract partitions:
payload-dumper-go -o stock_images payload.bin - Install the
edlutility: here - Ensure that you are still in the
edldirectory:pwd - Get the loader for this device:
curl -Lo ./go7_loader.bin https://github.com/bkerler/Loaders/raw/refs/heads/main/lenovo_motorola/0000000000000000_bdaf51b59ba21d8a_fhprg.bin
- Download and extract the unlocked fastboot/recovery image:
curl -Lo ./frp.zip https://github.com/user-attachments/files/24603170/frp_oemunlock.zip
unzip ./frp.zip
- Backup partitions:
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r abl_a abl_a_backup.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r abl_b abl_b_backup.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r frp frp_backup.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r devinfo devinfo_backup.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r boot_a boot_a_backup.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc r boot_b boot_b_backup.img
- Overwrite boot partitions:
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w boot_a stock_images/boot.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w boot_b stock_images/boot.img
- Overwrite other partitions:
# Stock boot to both slots
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w boot_a stock_images/boot.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w boot_b stock_images/boot.img
# FairPhone 4 ABL to both slots
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w abl_a fp4/abl.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w abl_b fp4/abl.img
# Unlocked fastboot/recovery
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w frp frp_oemunlock.img
# Stock recovery to both slots
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w recovery_a stock_images/recovery.img
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w recovery_b stock_images/recovery.img
# Misc-recovery to trigger recovery boot
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc w misc misc-recovery.img
# Erase devinfo (required for unlock to take effect)
python3 ./edl/edl.py --loader=go7_loader.bin --memory=emmc e devinfo
- Reset the device:
python3 ./edl/edl.py --loader=go7_loader.bin reset
NOTE: Steps 3, 4 and 5 can be skipped if you're rooting a Page 7.
-
Install the
edlutility: here -
Ensure that you are still in the
edldirectory:pwd -
Retrieve the EDL loader for this device:
curl -Lo ./loader.zip https://github.com/user-attachments/files/16236986/sm6225.zip(Go here if this link 404s).NOTE: Skip this step if you're rooting at Page 7.
-
Unzip the loader:
unzip ./loader.zipNOTE: Skip this step if you're rooting at Page 7.
-
Confirm the loader's checksum matches the below:
$: md5sum ./sm6225.bin ee47e72f618563ed1555feff9ba95db6 ./sm6225.bin
NOTE: Skip this step if you're rooting at Page 7.
-
Extract the boot partition, replace
_awith_bdepending on step 3 from the last section:edl --loader=sm6225.bin r boot_a boot.img(WARNING: This will fail if you try to runedl --loader=sm6225.binwithout any commands first. You must do this in one go. Otherwise, you will get USB timeouts. If this happens, long press the power button to restart the device.)NOTE: Omit the
--loaderargument if you're rooting a Page 7. -
Reboot the device; might need to run this twice:
edl --loader=sm6225.bin reset --resetmode=resetNOTE: Omit the
--loaderargument if you're rooting a Page 7. -
Push the boot image to the device:
adb push boot.img /sdcard/Download/boot.img
- Go to the home screen. Tap on "Apps" then on the snowflake.
- Set all toggles to "OFF".
📝 NOTE: Magisk will NOT open if you are running a Go 7 Gen II. However, you should still be able to approve superuser requests.
-
Install Magisk:
curl -Lo magisk.apk https://github.com/topjohnwu/Magisk/releases/download/v28.0/Magisk-v28.0.apk ; adb install magisk.apk -
Open Magisk on the device; click Install; click Select and Patch a File; select
boot.img; click "Let's Go"; take note of the newly-created boot image. -
Retrieve the patched boot image:
adb pull /sdcard/Download/magisk_patched-28000-[ID].img ./boot-patched.img -
Re-enter EDL:
adb reboot edl -
Write the patched boot image:
edl --loader=sm6225.bin w boot_a boot-patched.img # or boot_a depending on step 3(WARNING: Same warning above applies here.)NOTE: Omit the
--loaderargument if you're rooting a Page 7. -
Reboot the device; might need to run this twice:
edl --loader=sm6225.bin reset --resetmode=resetNOTE: Omit the
--loaderargument if you're rooting a Page 7.
AFWall uses iptables to grant or deny Internet access to all applications on your tablet.
-
curl -Lo afwall.apk https://github.com/ukanth/afwall/releases/download/v3.6.0/AFWall_3.6.0_Free.apk -
Install it:
adb install afwall.apk -
Open AFWall+ on the device and grant it superuser access.
-
Check all three boxes next to apps that should have internet access.
-
Run the commands below to avoid "Connected, but no Internet" errors upon connecting to Wi-Fi access points (see also)
adb shell settings put global captive_portal_mode 0 adb shell settings put global_captive_portal_detection_enabled 0 adb shell settings put global wifi_watchdog_on 0 adb shell settings put global captive_portal_detection_enabled 0 adb shell settings put global wifi_watchdog_background_check_enabled 0 adb shell settings put global captive_portal_server httpstat.us adb shell settings put global captive_portal_https_server "https://httpstat.us/204"
AdAway is a /etc/hosts based DNS blocking solution. No DNS workarounds!
curl -Lo adaway.apk https://github.com/AdAway/AdAway/releases/download/v6.1.4/AdAway-6.1.4-20241027.apk && adb install adaway.apk- Enable AdAway in AFWall+.
adb shell- Run the command below:
pm uninstall --user 0 com.android.bips
pm uninstall --user 0 com.android.bluetoothmidiservice
pm uninstall --user 0 com.android.cameraextensions
pm uninstall --user 0 com.android.cts.ctsshim
pm uninstall --user 0 com.android.dreams.phototable
pm uninstall --user 0 com.android.emergency
pm uninstall --user 0 com.android.internal.display.cutout.emulation.corner
pm uninstall --user 0 com.android.internal.display.cutout.emulation.double
pm uninstall --user 0 com.android.internal.display.cutout.emulation.hole
pm uninstall --user 0 com.android.internal.display.cutout.emulation.tall
pm uninstall --user 0 com.android.internal.display.cutout.emulation.waterfall
pm uninstall --user 0 com.android.internal.systemui.navbar.gestural
pm uninstall --user 0 com.android.internal.systemui.navbar.gestural_extra_wide_back
pm uninstall --user 0 com.android.internal.systemui.navbar.gestural_narrow_back
pm uninstall --user 0 com.android.internal.systemui.navbar.gestural_wide_back
pm uninstall --user 0 com.android.internal.systemui.navbar.threebutton
pm uninstall --user 0 com.android.printservice.recommendation
pm uninstall --user 0 com.android.providers.blockednumber
pm uninstall --user 0 com.android.providers.contacts
pm uninstall --user 0 com.android.quicksearchbox
pm uninstall --user 0 com.android.smspush
pm uninstall --user 0 com.android.theme.font.notoserifsource
pm uninstall --user 0 com.android.vending
pm uninstall --user 0 com.google.android.apps.restore
pm uninstall --user 0 com.google.android.gms.location.history
pm uninstall --user 0 com.google.android.overlay.gmsconfig.common
pm uninstall --user 0 com.google.android.syncadapters.calendar
pm uninstall --user 0 com.google.android.syncadapters.contacts
pm uninstall --user 0 com.onyx.aiassistant #AI Assistant app
pm uninstall --user 0 com.onyx.android.production.test #Test feature
pm uninstall --user 0 com.onyx.appmarket # Appmarket app
pm uninstall --user 0 com.onyx.calculator # Calculator app
pm uninstall --user 0 com.onyx.clock # Clock app
pm uninstall --user 0 com.onyx.dict # Dict app
pm uninstall --user 0 com.onyx.easytransfer # Easytransfer app
pm uninstall --user 0 com.onyx.gallery # Gallery app
pm uninstall --user 0 com.onyx.kime # Kime app
pm uninstall --user 0 com.onyx.latinime # Keyboard app, removing it will leave you with the Google Speech-to-text keyboard
pm uninstall --user 0 com.onyx.mail # Mail app
pm uninstall --user 0 com.onyx.musicplayer # Music player
pm uninstall --user 0 com.onyx.voicerecorder # Voice Recorder
pm uninstall --user 0 com.qualcomm.embms
pm uninstall --user 0 com.qualcomm.qti.seccamservice
pm uninstall --user 0 com.qualcomm.qti.server.qtiwifi
pm uninstall --user 0 com.qualcomm.qti.services.systemhelper
pm uninstall --user 0 com.qualcomm.qti.uim
pm uninstall --user 0 com.qualcomm.qti.uimGbaApp
pm uninstall --user 0 com.qualcomm.qti.xrcb
pm uninstall --user 0 com.qualcomm.qti.xrvd.service
pm uninstall --user 0 com.qualcomm.qtil.aptxui
pm uninstall --user 0 org.chromium.chrome # Chrome browserNOTE: This will not remove the default Onyx launcher, as it is required for configuring the device.
Download the apps that you want to install either on APKMirror or F-Droid. Always verify those checksums!
- Change NTP servers:
adb shell settings put global ntp_server pool.ntp.org; adb shell settings put global ntp_server_2 en.pool.ntp.org - Change captive portal endpoints:
adb shell settings put global captive_portal_http_url "http://connectivitycheck.android.com/generate_204"
adb shell settings put global captive_portal_https_url "https://connectivitycheck.android.com/generate_204"
adb shell settings put global captive_portal_fallback_url "http://connectivitycheck.gstatic.com/generate_204"- Revisit your AFWall configuration and ensure that the apps you want whitelisted are whitelisted.
You're finally ready to connect your eReader to the world! Enjoy!
Optional Stuff
Migrating from one Boox to another locally
adband pull the entire SwiftBackup folder:adb pull /sdcard/SwiftBackupadband push the entire SwiftBackup folder:adb push ./SwiftBackup /sdcard