PS Vita HENkaku Ensō 引导程序破解技术详解

本文详细解析了PS Vita HENkaku Ensō引导程序破解的技术细节,包括缓冲区溢出漏洞利用、引导过程劫持、内核模块补丁机制以及多重恢复方案设计,深入探讨了早期引导阶段破解的技术挑战与解决方案。

HENkaku Ensō bootloader hack for Vita

漏洞分析

多年前我们在逆向分析Vita固件时,发现了一个位于引导程序中的缓冲区溢出漏洞。该漏洞极具价值,因为它出现在引导早期阶段(在ASLR和其他安全功能正确初始化之前),并且允许在内核启动前进行补丁修改(这大大扩展了破解的可能性)。

漏洞成因是引导程序为eMMC设备读取静态分配了一个缓存缓冲区,使用固定的512字节块大小,但在实际将块加载到缓存时,却使用了FAT分区头中(用户可控的)块大小字段。我们通过经典的缓冲区溢出方式,覆盖了位于缓存缓冲区后的函数指针来利用此漏洞。

设计目标

在创建Ensō时,我们设定了几个主要设计目标:

  • 尽可能早地加载未签名驱动代码,这将支持开发更多种类的破解
  • 支持用户错误时的恢复,避免因错误插件导致设备变砖
  • 尽可能重用现有基础设施,不分裂本已很小的自制软件生态系统

引导过程劫持

漏洞利用让我们能够在非安全引导程序中控制代码执行,我们的任务是在保持控制的同时让系统其余部分正常启动。

引导过程分为三个阶段:

  1. NSBL(非安全引导程序)- 我们从漏洞利用中控制此阶段
  2. 使用NSBL内部的加载器加载基础内核和驱动
  3. 内核完全加载

我们在多个关键位置打补丁:

  • 在authmgr.skprx中禁用未签名代码的检查
  • 在sysstatemgr.skprx中支持加载自定义(未签名)引导脚本
  • 在sdif.skprx中重定向块0读取到块1,确保漏洞利用的MBR修改不会破坏内核
  • 在display.skprx中打补丁实现自定义启动logo

恢复机制

早期引导阶段的破解非常危险,我们设计了多重恢复方案:

  • 安全模式下降级几乎所有补丁(仅保留sdif.skprx补丁)
  • 用户选择安全模式中的重置选项将删除损坏的自定义引导脚本和taiHENkaku
  • 通过安全模式重新安装3.60固件将移除Ensō破解
  • 所有破解文件存储在ur0:(用户数据分区),避免修改只读的os0分区

测试结果

我们邀请了100名测试者参与测试,最终67人完成了测试指南。测试覆盖了多种设备配置:

  • PS Vita 1000系列:26台
  • PS Vita 2000系列:25台
  • PS TV:16台

在最初版本中出现了两台永久性变砖设备,我们迅速识别并修复了问题,后续测试中再未出现变砖情况。

技术挑战与解决方案

内存卡兼容性问题:当启用版本欺骗功能启动SceShell时,Vita会将"当前"固件版本写入内存卡的id.dat文件。解决方案是在HENkaku R9中禁用id.dat写入。

内存卡切换问题:如果用户切换内存卡且该卡装有旧版HENkaku,可能导致SceShell崩溃。解决方案是在HENkaku R10中将所有内容安装到内置系统内存ur0中。

该破解支持3.60-3.65固件版本,通过精心设计的补丁系统和多重恢复机制,在提供强大功能的同时最大限度地降低了设备变砖风险。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计