本文章最初发布在:System Research Blog
Bootloader基本背景
Bootloader是系统刚启动时运行的一段或几段程序,这些程序一般是初始化物理硬件设备,引动系统内核启动。在X86常说的grub就是一个bootloader,不过在移动平台用的较多的Bootloader是uboot。虽然移动平台大多使用uboot作为它们的bootloader,大部分厂商会在uboot之外额外有几个跟芯片相关的bootloader,启动处理流程均大不一样。处于安全方面的考虑,这些厂商的bootloader一般都是闭源的。由于bootloader在系统内核前运行,很多安全框架如三星的企业级解决方案kNOX都是需要将bootloader作为其安全架构的一部分,如果bootloader被攻破的话,危险级别几乎都会是致命的,所以这部分内容也一直是黑客们进行漏洞挖掘的领域。特别地,如果能够控制bootloader,iphone的越狱、Android的root以及在手机上安装第三方的ROM就都不成问题。由于手上折腾较多的是三星的exynos系列芯片的板子(像三星的Galaxy S、魅族MX等都是这款芯片),本文主要以这系列产品进行分析。
Bootloader组成
Bootloader中一般都会有好几个文件组成,如android手机一般会有:PBL(Prime Bootloader), SBL1/2/3(Second Bootloader), APPSBL(有的也称为aboot、hboot), HLOS(基带baseband相关)和TZ(TrustZone相关的镜像)。而iphone手机一般是:BootRom(PBL, SecureROM), LLB(Low Level Bootloader),iBoot(stage 2 bootloader,常用于recovery模式), iBBS(精简版的ibOOT)和iBEC(用于从DFU-Device Firmware Upgrade模式恢复)。对于我的Exynos板子,由于其并非手机设备,包含的bootloader相对较少,有:PBL( 也叫bl0,烧在iROM的只读代码), BL1(stage 1 bootloader), BL2(stage 2 bootloader,就是uboot中的spl), tzsw(trustzone firmware)和uboot