在QEMU中模拟iPhone
Hacker News 摘要原标题:Emulating an iPhone in QEMU
这篇文章讲述了在QEMU中模拟iPhone的过程,作者们的目标是成功运行iOS 14,并使其具备用户界面和基本应用执行能力。开始时,他们尝试了多个开源解决方案,包括一个只读的项目,这使他们感到担忧。后来,他们选择了一个具有不少有趣功能的项目,能够通过第二个QEMU实例实现USB连接,进而成功运行iOS 14,并获得了shell和ssh的访问权限。
在此过程中,作者们发挥了使用越狱iPhone的经验,计划通过注入PongoOS以应用checkra1n补丁,从而减少在QEMU中直接补丁的需要。他们在模拟器的SRAM中实施了Pongo并执行checkra1n的KPF模块,尽管在牛市代码执行之初遭遇了一些问题,但通过查阅ARM文档和一些搜索,他们找到了应对方案。
在控制图形渲染方面,作者们考虑了两种解决方案:使用软件渲染和将Metal API调用转发到具有渲染能力的物理设备如真实iPhone或Mac。虽然软件渲染看起来更简单,但在iOS 14中缺少了相应的选项。经过大量调试后,他们发现软件渲染实际上是可行的,但存在性能问题和视觉瑕疵。
在寻找IOSurface设备时,作者们发现了一个支持IOMFB的QEMU项目分支,尽管在正常启动时显示依然是黑屏,他们决定进一步排查。通过调试Framebuffer的实现,他们向QEMU注入了原始的ARGB帧,并在系统中查找写入地址,但没有取得预期的显示效果。
为了在调试时获得更多信息,作者们需要能够使用GDB调试内核和用户空间的组件,通过对内核和用户空间随机化的处理,他们获得了更好的观察方式。他们还设法修改了有助于查看系统日志的功能,从而更清楚地了解backboardd是否正常启动。
在重重调试和补丁工作后,作者们发现在progress bar停滞于90%状态时,经过对多个系统进程和框架进行了修补,UI开始有了进展,并出现了白色进度条。同时,他们调整了dyld缓存的补丁流程,以使每次修改都能更高效地反映在系统中。
经过艰辛努力,他们最终实现了通过VNC解锁白屏界面,使得SpringBoard能够更为顺利地开始运行。作者们在文章中详细描绘了这个复杂而又充满挑战的过程,包括对各类技术问题的处理以及逐步实现的各个关键步骤,以此展示了通过QEMU模拟iPhone的艰难旅程。