Bochs x86 16bit 和 IDA 反汇编

逆向工程 艾达
2021-06-25 11:59:11

我一直在想办法让 Bochs 运行 x86 嵌入式固件 rom,这样我就可以在模拟时进行反汇编。当我在 ida bochs 中开始调试时,只说“错误的分段”。将 bin strait 加载到 IDA 会导致大量错误的分段和寄存器假设。

问题是 512k ram 中的第一个代码页字符串,位于 0x00 设置 sp。然后所有段都设置为 0。从那里开始指向 ds:offsets 和调用,但 ida 不会自动加入两者,我手动写下了指向的代码以及函数如何交互。几次通话后,一切都变得乱码了,我还不如用笔和纸做事。

是否有关于使用 IDA 进行嵌入式拆卸的教程?Bochs 甚至可以运行非 PC 硬件嵌入的固件吗?

2个回答

IDA 需要了解二进制格式才能准确地映射事物。尝试收集有关二进制文件的更多信息(16/32/64 位、设备操作系统、文件格式、对齐要求等)。您可能需要重新调整一些内容,然后让 IDA 重新分析。

我没有使用过 Bochs,它是否模拟了不同平台的用户模式二进制文件?此外,嵌入式设备使用 x86 也很奇怪。这并不经常发生。你知道它肯定是x86吗?

Bochs 的默认 IDA 设置是“ IDB 模式”,用于模拟独立的代码片段(32 位或 64 位)。要模拟 16 位代码,您需要使用Disk Image mode,即使您没有真正的磁盘映像。默认情况下,Bochs的使用自己的BIOS ROM,而是通过进行定制.bochsrc文件romimage指向您的 ROM 的语句,您可以强制它模拟那个。只需在调试器 -> 进程选项 -> 应用程序中指定该文件,并在调试选项中启用“调试启动时停止”,以便您可以从重置向量开始调试。一个可能的问题是 Bochs 只映射 128K 的 ROM(段 E000 和 F000)。段 C000 用于映射 Video BIOS OPTION ROM。那么你可以做的就是把那个区域对应的区域剪下来,通过vgaromimage语句进行映射可能您还可以使用optromimage1语句和匹配地址来映射文件的其余部分

请注意,一般而言,Bochs 仿真机器仅适用于其自己的 BIOS,并且在将其与另一个 ROM 一起使用时可能会遇到各种问题。带有自定义机器定义的 QEMU 或 MAME 可能是另一种选择,并且 QEMU 可以通过内置的 GDB 存根连接到 IDA。