Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
hal — HAL – 硬件分析器 | Kitploit
工具/GitHubGitHub/emsec/hal
嵌入式系统安全逆向工程硬件黑客硬件安全硬件与物联网安全二进制分析论文与研究学习与教育固件分析
GitHubemsec/hal

hal

HAL – 硬件分析器

查看仓库
81495811天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

欢迎使用 HAL!

Ubuntu 22.04 Ubuntu 24.04 macOS Deploy Documentation Doc: C++ Doc: Python

HAL [/hel/] 是一个全面的网表逆向工程与操作框架。

HAL 截图

导航

  1. 简介
  2. 构建说明
  3. 快速入门指南
  4. 学术背景

简介

HAL 到底是什么?

几乎所有现有的网表分析研究都基于所检查网表的图形化表示。 其核心在于,HAL 正好提供了这一点:一个将任意来源(例如 FPGA 或 ASIC)的网表解析为基于图形的网表表示,并提供必要的内置工具用于遍历和分析所包含的门和连线的框架。

我们的愿景是让 HAL 成为硬件逆向工程领域与 IDA 或 Ghidra 等工具地位相当的工具。 我们希望 HAL 能够为研究人员和分析师提供一个共同的基线,从而提高研究成果的可重复性,并抽象掉重复性的基本任务(例如网表解析等)。

  • 高性能:得益于优化的 C++ 核心
  • 灵活性:通过内置的 Python 绑定实现
  • 模块化:通过 C++ 插件系统实现
  • 稳定性:通过丰富的测试套件得到保障

HAL 由 马克斯·普朗克安全与隐私研究所 的嵌入式安全组积极开发。 除了多个研究项目外,它还在波鸿鲁尔大学(RUB)的大学课程《硬件逆向工程入门》中使用。

请注意,我们还在一个单独的仓库中提供了一套现代、最先进的基准电路,用于评估网表逆向工程技术。

附带插件

本仓库包含一组精选插件:

  • GUI: 一个功能丰富的图形界面,支持可视化网表检查和交互式分析
    • 原生集成了 Python Shell,可访问 HAL Python 绑定
    • 隔离特定门或模块以实现无杂乱检查
    • 网表的交互式遍历
    • 提供关于所检查网表所有方面的详细信息的 Widget
  • 网表模拟器: 用于模拟已加载网表的任意部分的模拟器
  • 数据流分析: 我们的数据流分析插件 DANA,用于在非结构化网表中恢复高级寄存器
  • 图算法: 集成了 igraph,可直接访问图论中的常见算法
  • Python Shell: 一个命令行插件,用于启动预加载了 HAL Python 绑定的 Python Shell
  • VHDL 和 Verilog 解析器: 支持将 VHDL 和 Verilog 文件作为网表输入格式进行解析
  • Liberty 解析器: 支持标准 liberty 门库格式的任意门库
  • VHDL 和 Verilog 写入器: 支持将(修改后的)网表序列化为可综合的 VHDL 或 Verilog 文件
  • 门库: 支持 XILINX Unisim 和 Simprim 门库

文档

关于 HAL 功能(从用户角度出发)的综合文档可在我们的 Wiki 中找到。此外,我们还提供完整的 C++ API 和 Python API 文档。

构建说明

关于如何构建 HAL 的说明,请参阅我们 Wiki 中的专门页面。

快速入门指南

安装 HAL 或构建 HAL,然后通过 hal -g 启动 GUI。你可以通过 hal [--help|-h] 列出所有可用选项。 我们在 examples 子目录中包含了一些示例项目。要开始使用示例项目,你需要通过主菜单中的 "Import Project" 导入它,或者将压缩文件拖放到欢迎屏幕的 "OPEN PROJECT" 区域。 这样做会弹出一个窗口,请求一个有写权限的目录,HAL 将在其中创建项目目录并解压缩文件。请不要使用外部工具解压缩,因为会进行适配以使网表和门库在下次打开项目时能够被找到。

如果你想打开自己的 Verlog 或 VHDL 网表,你必须改为运行 "Import Netlist"。这仅在 plugins/gate_libraries/definitions 中存在匹配的门库,或者你手动提供门库时才有效。 有关创建自己的门库和其他有用教程的说明,请查看 wiki。

以下示例代码引用自 fsm 示例。

使用集成的 Python Shell 或 Python 脚本窗口进行交互。两者都提供(有限的)自动补全功能。

让我们列出所有查找表并打印它们的布尔函数:

root@kitploit:~
for gate in netlist.get_gates():
    if "LUT" in gate.type.name:
        print("{} (id {}, type {})".format(gate.name, gate.id, gate.type.name))
        print("  {}-to-{} LUT".format(len(gate.type.input_pins), len(gate.type.output_pins)))
        boolean_functions = gate.boolean_functions
        for name in boolean_functions:
            print("  {}: {}".format(name, boolean_functions[name]))
        print("")

对于示例网表 fsm.vhd,将打印:

root@kitploit:~
FSM_sequential_STATE_REG_0_i_3_inst (id 4, type LUT6)
  6-to-1 LUT
  O: (!I1 & !I2 & I3 & !I4 & I5) | (I0 & !I2) | (I0 & I1) | (I0 & I3) | (I0 & I4) | (I0 & I5)

FSM_sequential_STATE_REG_0_i_2_inst (id 3, type LUT6)
  6-to-1 LUT
  O: (I2 & I3 & I4 & !I5) | (I1 & !I5) | (I1 & !I4) | (I1 & !I3) | (I0 & I1) | (I1 & I2)

FSM_sequential_STATE_REG_1_i_3_inst (id 6, type LUT6)
  6-to-1 LUT
  O: (!I1 & I4 & !I5) | (!I1 & !I3 & I4) | (I0 & I4 & !I5) | (I0 & !I3 & I4) | (!I1 & I2 & I4) | (I0 & I2 & I4) | (!I2 & !I5) | (!I2 & !I4) | (!I2 & !I3) | (!I0 & !I4) | (!I0 & !I2) | (!I0 & !I1) | (I1 & !I4) | (I1 & !I2) | (I0 & I1) | (I3 & !I5) | (I3 & !I4) | (!I0 & I3) | (I1 & I3) | (I2 & I3) | (!I4 & I5) | (!I3 & I5) | (!I0 & I5) | (I1 & I5) | (I2 & I5)

FSM_sequential_STATE_REG_1_i_2_inst (id 5, type LUT6)
  6-to-1 LUT
  O: (!I0 & I1 & !I2 & I3 & I4 & !I5) | (I0 & !I2 & I3 & I4 & I5)

OUTPUT_BUF_0_inst_i_1_inst (id 18, type LUT1)
  1-to-1 LUT
  O: !I0

OUTPUT_BUF_1_inst_i_1_inst (id 20, type LUT2)
  2-to-1 LUT
  O: (I0 & !I1) | (!I0 & I1)

贡献

欢迎您为 HAL 的开发做出贡献。请随时通过 GitHub 提交新的 Pull Request。 在此之前,请考虑运行静态检查 + clang format。 您也可以在每次提交之前将这些检查安装为 Git 钩子。

在本地运行静态检查和 clang format

要安装 clang-format 钩子,请安装 git-hooks 并运行:

git hooks --install

通过以下命令启动 Docker 构建: docker-compose run --rm hal-build

生成更新日志

git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s" --no-merges

学术背景

如果您在学术背景下使用 HAL,请使用以下参考文献引用该框架:

root@kitploit:~
@misc{hal,
    author = {{Embedded Security Group}},
    publisher = {{Max Planck Institute for Security and Privacy}},
    title = {{HAL - The Hardware Analyzer}},
    year = {2019},
    howpublished = {\url{https://github.com/emsec/hal}},
}

也欢迎引用最初的论文。但是,我们注意到 HAL 自论文中描述的原始原型以来已经发生了巨大变化。 因此,我们更倾向于引用上述条目。

root@kitploit:~
@article{2018:Fyrbiak:HAL,
    author = {Marc Fyrbiak and Sebastian Wallat and Pawel Swierczynski and Max Hoffmann and Sebastian Hoppach and Matthias Wilhelm and Tobias Weidlich and Russell Tessier and Christof Paar},
    title = {{HAL-} The Missing Piece of the Puzzle for Hardware Reverse Engineering, Trojan Detection and Insertion},
    journal = {IEEE Transactions on Dependable and Secure Computing},
    year = {2018},
    publisher = {IEEE},
    howpublished = {\url{https://github.com/emsec/hal}}
}

要了解我们着手用 HAL 解决的挑战概述,请随时观看我们在 36C3 上的演讲。

许可

HAL 采用 MIT 许可证,以鼓励与其他研究团队的合作以及来自行业的贡献。请参阅许可证文件以获取更多信息。

免责声明

HAL 至多是 alpha 质量软件。 使用风险自负。 我们不鼓励任何恶意使用我们的工具包。

下载工具