# HALucinator：通过抽象层仿真实现固件重托管

> HALucinator 识别单体 ARM Cortex-M 固件中的硬件抽象库函数，并用人工编写的 Python 处理函数和外设模型替换它们，从而重托管固件。LibMatch 定位库接口；QEMU/Avatar2 实现支持交互式输入输出，与论文关联的 HAL-fuzz 变体则使用 AFL-Unicorn 进行模糊测试。

- 作者：Abraham A Clements; Eric Gustafson; Tobias Scharnowski; Paul Grosen; David Fritz; Christopher Kruegel; Giovanni Vigna; Saurabh Bagchi; Mathias Payer
- 原标题：HALucinator: Firmware Re-hosting Through Abstraction Layer Emulation
- 发表载体：USENIX Security 2020
- 发表状态：会议论文
- 出版／提交日期：2020 年 8 月
- 日期依据：USENIX 官方论文集引用信息给出 2020 年 8 月。保留月份精度，不把会议举办日期当作具体出版日。
- 来源复核于：2026-10-17
- 收录于：2026-10-17
- 原始论文：<https://www.usenix.org/conference/usenixsecurity20/presentation/clements>
- PDF：<https://www.usenix.org/system/files/sec20-clements.pdf>
- 代码：<https://github.com/embedded-sec/halucinator>
- BibTeX：<https://awesomerea.org/papers/citations/paper-halucinator.bib>
- 目录页面：<https://awesomerea.org/zh/papers/paper-halucinator/>
- 记录 JSON：<https://awesomerea.org/papers/paper-halucinator/record.json>
- 英文版：[English](https://awesomerea.org/papers/paper-halucinator/index.md)

## 研究范围与局限

LibMatch 需要可获取的硬件抽象层或库，以及足够相似的编译环境；编译器差异与内联会限制匹配效果。重托管还需要 QEMU 支持的架构、固件内存布局、拦截地址及人工编写的处理函数和模型。未建模的直接硬件访问可能在读取时返回零、在写入时被忽略；简化的时序与外设行为不能证明硬件等价。作者的重托管与模糊测试演示不代表普遍覆盖所有固件、完整重建设备或恢复原始源代码。

## 与本合集的关联

展示如何通过二进制库识别与显式环境模型，重建分析已有固件所需的嵌入式执行环境，并明确其抽象边界。

## 发表与复核说明

核查的是 USENIX 正式论文，页码 1201–1218；不推定 DOI 或 arXiv 标识。论文链接的 embedded-sec/halucinator 仓库采用 GPLv3，独立的 ucsb-seclab/hal-fuzz 实现采用 Apache-2.0，两者许可不可混同。原始 README 记载了仅经有限测试的 Ubuntu 16.04/18.04 与 Python 3 环境，依赖 Avatar2、QEMU 和 GDB，并另行指向较新项目。复现需要固件镜像、兼容的 HAL/SDK 输入及配置；厂商固件、依赖项和 SDK 的使用权需分别处理。HAL-fuzz 使用简化处理函数和确定性计时器，不保证与真实时钟等价。

## 一手来源

1. <https://www.usenix.org/conference/usenixsecurity20/presentation/clements>
2. <https://www.usenix.org/system/files/sec20-clements.pdf>
3. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/README.md>
4. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/LICENSE>
5. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/dependencies.md>
6. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/Developing.md>
7. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/doc/tutorial/0_Preqs.md>
8. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/doc/tutorial/1_HALucinator_overview.md>
9. <https://github.com/embedded-sec/halucinator/blob/fa85a1dcbaaa72bd425094fc3917abdd7d9b9a8a/install_deps.sh>
10. <https://github.com/ucsb-seclab/hal-fuzz/blob/1446408e64b25aa77971226b764d1db65fe8ba09/LICENSE>
11. <https://github.com/ucsb-seclab/hal-fuzz/blob/1446408e64b25aa77971226b764d1db65fe8ba09/README.md>
12. <https://github.com/ucsb-seclab/hal-fuzz/blob/1446408e64b25aa77971226b764d1db65fe8ba09/requirements.txt>

## 关于此条目

已依据论文及一手来源复核。请通过原始论文或 BibTeX 引用原作者。
原创说明采用 MIT 许可；外部项目、论文与素材保留各自的权利和许可。
