Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
hal — HAL – Анализатор аппаратного обеспечения | Kitploit
Инструменты/GitHubGitHub/emsec/hal
Безопасность встроенных системОбратная инженерияАппаратный ХакингАппаратная БезопасностьБезопасность оборудования и IoTАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и ОбразованиеАнализ Прошивок
GitHubemsec/hal

hal

HAL – Анализатор аппаратного обеспечения

814956 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

Добро пожаловать в HAL!

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

HAL [/hel/] — это комплексный фреймворк для обратного проектирования и манипуляции списками соединений (netlist).

Снимок экрана HAL

Навигация

  1. Введение
  2. Инструкции по сборке
  3. Краткое руководство
  4. Академический контекст

Введение

Что такое HAL?

Практически все доступные исследования по анализу списков соединений работают с графовым представлением проверяемого списка соединений. В своей основе HAL предоставляет именно это: фреймворк для парсинга списков соединений из произвольных источников, например, ПЛИС или ASIC, в графовое представление, а также необходимые встроенные инструменты для обхода и анализа входящих в него вентилей и цепей.

Наше видение заключается в том, чтобы HAL стал эквивалентом инструментов вроде IDA или Ghidra для аппаратного реверс-инжиниринга. Мы хотим, чтобы HAL обеспечил общую основу для исследователей и аналитиков, улучшив воспроизводимость результатов и абстрагировавшись от повторяющихся базовых задач, таких как парсинг списков соединений и т.д.

  • Высокая производительность благодаря оптимизированному ядру на C++
  • Гибкость через встроенные привязки Python
  • Модульность благодаря системе плагинов на C++
  • Стабильность обеспечивается богатым набором тестов

HAL активно разрабатывается группой Embedded Security из Института безопасности и конфиденциальности Макса Планка. Помимо нескольких исследовательских проектов, он также используется в наших университетских лекциях «Einführung ins Hardware Reverse Engineering» (Введение в аппаратный реверс-инжиниринг) в Рурском университете Бохума (RUB).

Обратите внимание, что у нас также есть набор современных эталонных схем для оценки методов обратного проектирования списков соединений, доступный в отдельном репозитории.

Встроенные плагины

Этот репозиторий содержит подборку проверенных плагинов:

  • GUI: Функциональный графический интерфейс, позволяющий визуально проверять списки соединений и проводить интерактивный анализ
    • Встроенная интеграция оболочки Python с доступом к привязкам Python HAL
    • Изоляция определённых вентилей или модулей для просмотра без лишних элементов
    • Интерактивный обход списков соединений
    • Детальные виджеты с информацией обо всех аспектах проверяемого списка соединений
  • Симулятор списков соединений: Симулятор произвольных частей загруженного списка соединений
  • Анализ потоков данных: Наш плагин анализа потоков данных DANA, который восстанавливает регистры высокого уровня в неструктурированном списке соединений
  • Графовые алгоритмы: Интеграция igraph для прямого доступа к распространённым алгоритмам из теории графов
  • Оболочка Python: Плагин командной строки для запуска оболочки Python с предзагруженными привязками Python HAL
  • Парсеры VHDL и Verilog: Добавляет поддержку парсинга файлов VHDL и Verilog в качестве форматов ввода списков соединений
  • Парсер Liberty: Добавляет поддержку произвольных библиотек вентилей в стандартном формате библиотек liberty
  • Запись VHDL и Verilog: Добавляет поддержку сериализации (изменённого) списка соединений в синтезируемые файлы VHDL или Verilog
  • Библиотеки вентилей: Добавляет поддержку библиотек вентилей XILINX Unisim и Simprim

Документация

Подробная документация по возможностям HAL с точки зрения пользователя доступна в нашей Вики. Кроме того, мы предоставляем полную документацию по C++ API и Python API.

Инструкции по сборке

Инструкции по сборке HAL см. на соответствующей странице в нашей Вики.

Краткое руководство

Установите HAL или соберите его и запустите GUI с помощью hal -g. Вы можете просмотреть все доступные опции с помощью hal [--help|-h]. Мы включили несколько примеров проектов в подкаталог examples. Чтобы начать работу с примером проекта, импортируйте его через Import Project из главного меню или перетащив zip-файл в область OPEN PROJECT на экране приветствия. После этого появится всплывающее окно с запросом каталога с правами на запись, в котором HAL создаст каталог проекта и распакует файлы. Не используйте внешние инструменты для распаковки, так как вносятся изменения, чтобы список соединений и библиотека вентилей были найдены при следующем открытии проекта.

Если вы хотите открыть собственный список соединений Verilog или VHDL, вместо этого выполните Import Netlist. Это сработает только в том случае, если в plugins/gate_libraries/definitions есть соответствующая библиотека вентилей, или вы укажете библиотеку вентилей вручную. Инструкции по созданию собственной библиотеки вентилей и другие полезные руководства см. в вики.

Следующий пример кода относится к примеру fsm.

Используйте встроенную оболочку Python или окно 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. Не стесняйтесь отправлять новые pull request через github. Пожалуйста, перед этим запустите статические проверки + clang format. Вы также можете установить эти проверки как git-хуки перед любым коммитом.

Запуск статических проверок и clang format локально

Чтобы установить hook 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 — это программное обеспечение, по крайней мере, уровня «альфа». Используйте на свой страх и риск. Мы не поощряем любое вредоносное использование нашего инструментария.

Скачать инструмент