How to unlock the bootloader an root Kyocera e4810 ONLY

BS"D

Process utilizes a “downgrade attack” with a signed aboot partition.
If you aren’t interested in the technicals, skip to “Unlocking” section below for bootloader unlocking instructions.

Discovery

SBL1, the secondary bootloader, is responsible for loading aboot - the Android bootloader.
The aboot partition is just a regular ELF file which, as per this writeup, has a special Hash Table Segment containing the attestation certificate.
This cert has a Subject field (as referenced above in the past) containing the image signature info, including: software version, hardware version, debug flag, and more.
SBL1 computes the hash of the public key in the firmware image and compares it against Kyocera’s public key hash burned into hardware fuses on the SoC. If they match, it then verifies the public key with the image contents and enforces version checks (and/or if newer version detected = blow eFuse with the latest version number).
Here’s where it gets interesting.
After comparing the hashes of the latest stock aboot and an older aboot version (with fastboot unlock commands intact), the SW_ID field in both the new and old attestation certs showed 0000000000000009! So even if it wanted to, SBL1 has no way of enforcing rollback protection since the OEM doesn’t utilize this feature!

(That is the reason this aboot will not work on the E4610. It’s got different hardware. The HW_IDs must match.)

With that in mind, the process below was born.
We will use the VZW Software Upgrade Assistant to enter fastboot mode, as documented by @ars18 above.

Unlocking

:warning: WARNING: Unlocking the bootloader will factory reset your device.

I am not responsible if your device gets bricked. It shouldn’t.

Although if it does brick, it can be recovered.

Prerequisites:

  • Kyocera E4810 or E4810NC
  • ADB/Fastboot (if you don’t have it already, download Minimal ADB and Fastboot.zip)
    • Add it to your PATH
  • Zip file attached to this post (files-for-e4810-unlock.zip)

Steps:

  1. Download and extract the zip file attached to this post
  2. Plug your device into your PC, open the USB mode notification, and switch to “Software Update”
    • This will remount the device as a CD-ROM containing the VZW Software Upgrade Assistant installer
  3. Open the virtual CD-ROM in Windows Explorer and install the VZW Software Upgrade Assistant
    • Download drivers when prompted on bottom right of screen
  4. On your device, enable OEM Unlocking in Settings > Developer Options (press build number 7x in Software Information to show)
  5. Now, on your PC, launch the VZW tool (located at “C:\progra~2\Kyocera\UpgradeTool\UpgradeTool.exe”), click “NEXT” then “Start repair”
    • GET READY: once your device reboots, KILL THE TOOL via Task Manager!
    • It should show “FASTBOOT” mode on the screen
    • This step needs more details to get the right timing. Will update soon.
  6. Run fastboot devices on your PC, and ensure your device appears in the list
  7. Run fastboot flash aboot <path-to-magic-aboot> - replacing <path-to-magic-aboot> with the full path to the “magic-aboot.mbn” in the extracted zip
  8. Run fastboot reboot. This will reboot back into fastboot - but this time with the one we just flashed.
  9. Run fastboot oem unlock, then on the device, use power buttons to select “UNLOCK THE BOOTLOADER”, and press End key
    • Alternatively, you can run fastboot oem unlock-go and manually reset when prompted on next normal boot since userdata decryption will fail.
  10. After it reboots, run fastboot erase chkcode, then fastboot reboot
  11. The device should now boot normally (press End when Orange state screen appears).

Congratulations! Your bootloader is now unlocked! :tada:

Keep the VZW tool handy for when you’re ready to flash a Magisk-patched boot.img via fastboot!
I wasn’t able to upload the stock boot.img since the file was larger than 10MB, but it’s available here for download (SHA1: ADCDDDF3695D645A9336D55EF9CEBF4CE9BE2BFC).
Follow this guide to patch with Magisk for rooting. You can likely skip the vbmeta patching instruction.


Thank you to @LeoBuskin and @ars18 for the valuable insights all throughout.
Without them, this would not have been possible.

Kyocera stack is nice - but maybe it’s the friends we made along the way…

files-for-e4810-unlock.zip (276.0 KB)

14 Likes

Finally done! :slight_smile: Makes me real happy. Great job!

I will not buy another one (4 was enough) , but if someone sends me one, I can make some stuffs for the community.

2 Likes

this is historic.

Tag is gonna develop a absolute disaster of a filter on the E4810 now :sob:

they already have a filter for it

You can use a batch script to loop fastboot devices command, and when an output is detected, break the loop and taskkill the vzw upgrade tool.

1 Like

I’m working on a simpler method to enter fastboot that will not require Verizon tool or the long wait that accompanies it. Will use proprietary diag protocol.

2 Likes

Amazing! Can’t wait!
Although, as @ars18 pointed out in the post you linked - locally hosting the file on a spoofed python server significantly reduces wait time, and only requires a simple file structure and python command.
Here is an (untested) batch script to kill the vzw tool when device enters fastboot.

@echo off
:loop
 fastboot devices | findstr 5588 > serial.txt 2>&1
 if %errorlevel% neq 0 goto :loop
 find /c “fastboot” serial.txt 2>nul | findstr /e 1 > nul 2>&1
 if %errorlevel% neq 0 (echo  Multiple devices detected… & pause > nul & goto :loop)
 taskkill /IM UpgradeTool.exe /F > nul 2>&1
 taskkill /IM NC-UpgradeTool.exe /F > nul 2>&1
 fastboot getvar serialno 2>&1 | findstr serial > serial.txt
 for /f "tokens=2 delims=	 " %%g in (serial.txt) do (set serial=%%g)
 echo Kyocera E4810 in Fastboot Mode - %serial%
 pause
1 Like

You need this file structure:

      root/
         └── pctool/
             └── kcfirmware/
                 └── binfile66.bin

Open hosts as in Administrator text editor, and add this line at the bottom:

perpetuity.kyocera.co.jp localhost

Or just do it from the command line (administrative shell):

echo perpetuity.kyocera.co.jp localhost >> C:\Windows\System32\drivers\etc\hosts

Run this command in the root folder:

python -m http.server 80 --bind 0.0.0.0

EDIT stock file located at http://perpetuity.kyocera.co.jp/pctool/kcfirmware/binfile66.bin

1 Like

UPDATE

For some reason, I cannot edit the original guide. You may skip steps #2-5 and use the alternative method below instead.

Attached is a python script based on my diag tool that’ll handle putting your device into fastboot mode.

[Windows] How to use:

  1. Install Python 3.14 (ensure “Add to PATH” is checked during install) - (if not installed already).

  2. Install Minimal ADB and Fastboot and add to your PATH (if not done already)

  3. Install Zadig (needed for USB driver setup - see step 5)

  4. Download libusb

    • Extract VS2022/MS64/dll/libusb-1.0.dll
    • Place it next to your python.exe (likely %LOCALAPPDATA%\Programs\Python\Python314)
  5. USB driver setup (one-time, required for diag mode):

    • On your device, enable USB Debugging in Settings > Developer Options (press build number 7x in Software Information to show). Plug the device into your PC, run adb devices, and allow the connection on your device.
    • In a non-admin terminal, run pip install pyusb
    • In an admin terminal, run the tool - python fastboot_standalone.py
      • It will likely fail after step [2/5]. Continue below:
    • Open Zadig
    • Find the Kyocera diag interface in the dropdown (KYOCERA_Android (Interface 0))
      • USB ID should match: 0482 0A9D 00
    • Select WinUSB (…) as the driver and click Install Driver
    • Once installed, disconnect the device and reconnect, then run the script again python fastboot_standalone.py
    • This setup for Zadig only needs to be done once per machine

In the future, to switch to fastboot mode, just run the script again as admin - python fastboot_standalone.py.

After the device is in fastboot mode, continue with step #6 in the original guide.
Be sure to run step #10 (fastboot erase chkcode) after you’re finished, otherwise your device will not exit fastboot.

I will continue to update the tool as needed, here.

Happy hacking!

fastboot_standalone.zip (6.8 KB)

5 Likes

Amazing!
Booted successfully into fastboot.
Needed to restore kyocera driver from here in order to use with fastboot once in fastboot mode.
(Kyocera Corp. / Android Composite USB device)

made both wiki so you could edit it

@BenTorah excellent work! Gold Medal!
For some reason latest versions of magisk refused to repack on the E4810. In your screenshot you seem to be using version 30.7 (latest). @ars18‘s screenshot from last year uses version 29, most likely latest at that point. I tried 30.7 and 30.2 but it just hung indefinitely on repacking. Went back a bunch to version 27.008 and it worked.

Any idea?

1 Like

You can either let it hang for a while and it should finish, or patch on pc.

1 Like

Ty - i’ll try it again…

1 Like

Here is the magisk patched boot for anyone who wants to save 7 minutes.

Keep in mind - the E4810 is an A/B slot device, so when you flash the magisk patched boot partition, you need the correct slot suffix.

fastboot getvar current-slot

will get you an output specifying slot a or b, like this:

current-slot:b

Then flash the patched partition like this (for slot a, use boot_a instead of boot_b):

fastboot flash boot_b magisk_patched-30700_MakUX.img
fastboot erase chkcode
fastboot reboot

And - מזל טוב:

Reminder to our talented ROM developers - stock is located here, now great things can happen…

5 Likes

is there anything we can gleam from the ROM for other kyocera phones? maybe somenone can share a dump?

If you don’t specify a/b, fastboot flash will use the current active slot for fastboot flash boot [...] by default.
(aboot is also A/B partitioned)
There’s no reason the device should be using slot B unless it was bricked. In which case, the partition type GUIDs get swapped in a desperate attempt to find a valid firmware and the internal retry counter depletes. Requires repairing the GPT.

No bueno.
Can edit the update post, still cannot update the original…

With the risk of sounding to much like @Dev-in-the-BM_2.0, but that’s like saying “when the power went out, the generator turned on in a desperate attempt to keep the hospital functioning normally during the power outage exactly as it was designed to do”.

“There’s no reason for the generator, unless the power goes out.”
”There’s no reason for the airbags unless you get into a crash.”
”There’s no reason for the fire department, unless you have a fire.”
”There’s no reason for chaveirim to put on the donut, unless you get a flat.”

But yes, you are correct.