在DOS上曾经有一个名为Sourcer的反汇编程序,可以反汇编BIOS例程。但是,如何通过软件访问BIOS ROM来做这样的事情?

#1 楼

在过去,您通常可以转储1MB内存的大部分(例如E000:0000到F000:FFFF)来检索BIOS ROM的副本,但是如今BIOS不再适合64K甚至128K,因此所有这些您将获得一份UEFI的CSM(兼容性支持模块)的副本,其中包含大多数其他代码,通常在1MB标记以上。

要检索实际的完整BIOS代码,您需要从闪存芯片中读取ROM。这可能在同一台机器上实现,例如通过使用Flashrom或有时使用主板供应商的固件更新工具(如果它提供“备份”选项)。有时可能会阻止操作系统访问闪存(以防止恶意软件修改BIOS),在这种情况下,您可能必须使用外部闪存编程器。

一旦获得ROM的副本,您可以开始拆卸它。但是,请记住,现代BIOS通常执行UEFI标准,其中只有一小部分代码(围绕复位向量)是16位的,而大多数代码则以32位(或64位)保护模式运行,通常使用以PE(Portable Executable)格式实现的模块。由于甚至UEFI固件ROM的结构都是标准化的,因此您通常可以使用UEFITool之类的工具来提取各个模块进行分析。有关UEFI的更多信息,请参阅UEFI和PI标准,可从www.uefi.org免费获得。