EC6108V9C高安版刷机研究 您所在的位置:网站首页 海思盒子刷安卓 EC6108V9C高安版刷机研究

EC6108V9C高安版刷机研究

2024-07-10 19:55| 来源: 网络整理| 查看: 265

众所周知,市场上/群友手中有大量高安版(CA)机型库存,高安版刷机一直都被认为是不可能的事。本人经过仔细观察研究,确定了一条可行的刷机方法,在此发出以供交流。

前排提醒:

高安版刷机本质是利用fastboot漏洞。本人研究所使用的机型为EC6108V9C四川/上海电信高安版(hi3798mdmo1g),使用的fastboot版本为

Fastboot 3.3.0-00709-ga3bdc60-dirty (liuhh@HW-TV-S5) (Jul 07 2016 - 12:33:43)

其他机型/fastboot版本均不保证成功。在尝试前请先确认以上版本的fastboot可以运行在你的机器上。

高安版概况

高安版中,密钥烧入soc。启动时,bootrom即会检查fastboot签名,若签名无法匹配fastboot内容,则拒绝启动。例如,使用十六进制编辑器,找到fastboot中的mv100字样,改为mv200后写回,开机在显示完reg信息后试图启动fastboot即会卡死,ttl再无输出。若没有对应soc密钥的私钥,将无法自行签名fastboot。因此,高安版机器只能使用运营商提供(或通过其他渠道流出)的已签名fastboot。

进入fastboot后,在启动android bootimg前,fastboot将对bootimg的签名进行校验。一次不成功的校验过程如下:

[HMT]Verify kernel begin. HI_Flash_Read Ret= 1024 HI_Flash_Read Ret= 1024 The kernel size is [0] e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 [HMT] RSA Verify the kernel Error. [HMT] Check RSA ERROR!! [HMT] The kernel verify failed.

此时fastboot将停留在shell界面。高安版刷机的目标就是让fastboot能顺利引导我们的kernel。

直接尝试引导(未尝试)

最直接的思路就是在shell界面强行指定引导我们的内核:

mmc read 0 0x1FFBFC0 0x29000 0x6000 bootimg 0x1FFBFC0

当然问题也是明显的,每次启动均要在ttl上操作,类似苹果的临时越狱。本人未在机器上尝试,但如果完美破解不可用的话,不妨一试。

U盘恢复模式引导

Hi3798可以通过短接J16强制进入U盘恢复模式,U盘中至少需要三个文件:fastboot.bin、bootargs.bin、recovery.img。但事实上,高安版同样具有此功能,只需要将fastboot.bin替换成对应高安版可用的fastboot。替换后的试验结果如下:

(Re)start USB... USB0: Register 1212 NbrPorts 2 USB EHCI 1.00 scanning bus 0 for devices... 3 USB Device(s) found USB1: Register 1111 NbrPorts 1 USB EHCI 1.00 scanning bus 1 for devices... 1 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found Security Begin Read RSA Key! Secure boot is enabled reading bootargs.bin bootargs.bin on device:usb:0:1 FOUND! reading bootargs.bin from 0 ..reading recovery.img recovery.img on device:usb:0:1 FOUND! reading recovery.img from 0 ............................................................................................................................................................................................................................................................................................................................................................................................................................................................Check Hisilicon_ADVCA ... Not hisilicon ADVCA image ... ## Booting kernel from Legacy Image at 01000000 ... Image Name: Linux-7.10.0_s40 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2572224 Bytes = 2.5 MiB Load Address: 02000000 Entry Point: 02000000 Loading Kernel Image ... OK OK Starting kernel ...

此时fastboot就不再显示Verify kernel begin信息了,且可以看到内核名称已经被成功篡改为了Linux-7.10.0_s40。将recovery.img替换为自己的内核即可绕过高安正常启动。

实验中观察到:

fastboot.bin、bootargs.bin、recovery.img三者缺一不可。缺少fastboot.bin将不会通过U盘引导,缺少bootargs.bin或recovery.img将导致fastboot立即回落emmc启动流程。

bootargs.bin必须是有效的uboot env文件,否则立即回落emmc。

实验所使用的fastboot版本无论任何情况下都会无视bootcmd,但bootargs能正常传递。

Fastboot 3.3.0-00893-ge04e6b5-dirty (tangan@HW-TV-S9) (Oct 19 2016 - 21:30:10)能正常引导,但通过U盘启动时无法拉起emmc。

直接引导

经过不懈研究,终于发现无需U盘或ttl即可随意启动任意kernel的方法。示例如下(依然使用自制Linux-7.10.0_s40):

Security Begin Read RSA Key! Secure boot is enabled get key value 0x0 HI_Flash_Read Ret= 3072 HI_Flash_Read Ret= 3072 HI_Flash_Read Ret= 10485760 HI_Flash_Read Ret= 10485760 ******** boot from kernel...******** [HMT]Verify kernel begin. HI_Flash_Read Ret= 1024 HI_Flash_Read Ret= 1024 The kernel size is [0] e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 [HMT] RSA Verify the kernel Error. [HMT] Check RSA ERROR!! [HMT] The kernel verify failed. HI_Flash_Read Ret= 512 HI_Flash_Read Ret= 512 Stb mac is : [9C:71:3A:6D:1B:BE] hpm_code_average = 0x105 Reserve Memory Start Addr: 0x3FFFE000 Bound Addr: 0x8E64000 Free Addr: 0x3E47E000 Alloc Block: Addr Size 0x3FBFD000 4194304 0x3F8FC000 3145728 0x3F87B000 524288 0x3F878000 8192 0x3F843000 212992 0x3F742000 1048576 0x3F73E000 12288 0x3EF54000 8294400 0x3EDBE000 1658880 0x3E5D4000 8294400 0x3E481000 1384448 0x3E47E000 8192 Press Ctrl+C to stop autoboot kernel @ 3e08000 (2572288 bytes) ramdisk @ 4e00000 (2347778 bytes) page size @ 2048 bytes initrd rd_start = 4e00000,rd_end = 503d302 ## Booting kernel from Legacy Image at 01ffc7c0 ... Image Name: Linux-7.10.0_s40 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2572224 Bytes = 2.5 MiB Load Address: 02000000 Entry Point: 02000000 load:2000000,blob_start:1ffc7c0,blob_end:22707c0,image_start:1ffc800,image_len:273fc0 Loading Kernel Image ... OK OK kernel loaded at 0x02000000, end = 0x02273fc0 images.os.start = 0x1FFC7C0, images.os.end = 0x22707c0 images.os.load = 0x2000000, load_end = 0x2273fc0 ret -2 initrd rd_start = 4e00000,rd_end = 503d302 Starting kernel ...

(为防js涨价,方法暂时保密)

实验中观察到:

bootcmd依然被无视,这意味着无法自行指定kernel的存放位置。 传递的cmdline实为bootargs_1G,出于某些原因bootargs被无视了。为了正确启动需要将blkdevparts等参数手动添加到bootargs_1G。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有