Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
hal — HAL – 하드웨어 분석기 | Kitploit
도구/GitHubGitHub/emsec/hal
Embedded Systems SecurityReverse EngineeringHardware HackingHardware SecurityHardware & IoT SecurityBinary AnalysisPapers & ResearchLearning & EducationFirmware Analysis
GitHubemsec/hal

hal

HAL – 하드웨어 분석기

814957시간 11분 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

HAL에 오신 것을 환영합니다!

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

HAL [/hel/]은 포괄적인 넷리스트 리버스 엔지니어링 및 조작 프레임워크입니다.

HAL Screenshot

탐색

  1. 소개
  2. 빌드 지침
  3. 빠른 시작 가이드
  4. 학술적 맥락

소개

HAL이란 대체 무엇인가요?

사실상 넷리스트 분석에 관한 모든 연구는 검사 대상 넷리스트를 그래프 기반으로 표현한 것을 사용합니다. HAL의 핵심은 바로 이것입니다: FPGA나 ASIC 등 다양한 소스의 넷리스트를 그래프 기반 넷리스트 표현으로 파싱하고, 포함된 게이트와 넷의 탐색 및 분석에 필요한 내장 도구를 제공하는 프레임워크입니다.

우리의 비전은 HAL이 IDA나 Ghidra와 같은 도구에 해당하는 하드웨어 리버스 엔지니어링 도구가 되는 것입니다. HAL이 연구자와 분석가를 위한 공통 기준점을 제공하여 연구 결과의 재현성을 높이고 넷리스트 파싱과 같은 반복적인 기본 작업을 추상화할 수 있기를 바랍니다.

  • 고성능: 최적화된 C++ 코어 덕분
  • 유연성: 내장 Python 바인딩을 통한 유연성
  • 모듈성: C++ 플러그인 시스템을 통한 모듈성
  • 안정성: 풍부한 테스트 스위트로 보장

HAL은 Max Planck Institute for Security and Privacy의 Embedded Security 그룹에서 활발히 개발되고 있습니다. 여러 연구 프로젝트 외에도, Ruhr University Bochum (RUB)의 대학 강의 "Einführung ins Hardware Reverse Engineering" (하드웨어 리버스 엔지니어링 입문)에서도 사용되고 있습니다.

또한, 넷리스트 리버스 엔지니어링 기술 평가를 위한 최신 상태의 벤치마크 회로 세트를 별도의 저장소에서 제공하고 있습니다.

포함된 플러그인

이 저장소에는 선별된 플러그인 모음이 포함되어 있습니다:

  • GUI: 시각적 넷리스트 검사 및 대화형 분석을 위한 기능이 풍부한 GUI
    • HAL Python 바인딩에 접근 가능한 Python 셸의 기본 통합
    • 혼란을 줄이기 위해 특정 게이트 또는 모듈 격리
    • 넷리스트의 대화형 이동
    • 검사 중인 넷리스트의 모든 측면에 대한 정보를 제공하는 상세 위젯
  • 넷리스트 시뮬레이터: 로드된 넷리스트의 임의 부분을 시뮬레이션하는 도구
  • 데이터 흐름 분석: 구조화되지 않은 넷리스트에서 고수준 레지스터를 복구하는 데이터 흐름 분석 플러그인 DANA
  • 그래프 알고리즘: igraph 통합으로 그래프 이론의 일반적인 알고리즘에 직접 접근
  • Python 셸: HAL Python 바인딩이 미리 로드된 Python 셸을 실행하는 명령줄 플러그인
  • VHDL 및 Verilog 파서: 넷리스트 입력 형식으로 VHDL 및 Verilog 파일 파싱 지원 추가
  • Liberty 파서: 표준 liberty 게이트 라이브러리 형식의 임의 게이트 라이브러리 지원 추가
  • VHDL 및 Verilog 기록기: (수정된)넷리스트를 합성 가능한 VHDL 또는 Verilog 파일로 직렬화 지원 추가
  • 게이트 라이브러리: XILINX Unisim 및 Simprim 게이트 라이브러리 지원 추가

문서

사용자 관점에서 HAL 기능에 대한 포괄적인 문서는 Wiki에서 제공됩니다. 또한 전체 C++ API 및 Python API 문서도 제공합니다.

빌드 지침

HAL 빌드 방법에 대한 지침은 Wiki의 해당 페이지를 참조하십시오.

빠른 시작 가이드

HAL을 설치하거나 빌드하고 hal -g로 GUI를 시작하십시오. 모든 옵션은 hal [--help|-h]로 확인할 수 있습니다. examples 하위 디렉토리에 몇 가지 예제 프로젝트를 포함했습니다. 예제 프로젝트를 시작하려면 메인 메뉴에서 Import Project를 통해 가져오거나 Welcome Screen의 OPEN PROJECT 영역에 압축 파일을 드롭하여 가져올 수 있습니다. 가져오기를 하면 쓰기 권한이 있는 디렉토리 선택을 요청하는 팝업이 나타나며, HAL이 그곳에 프로젝트 디렉토리를 생성하고 파일을 압축 해제합니다. 압축 해제시 외부 도구를 사용하지 마십시오. 다음에 프로젝트를 열 때 넷리스트와 게이트 라이브러리를 찾을 수 있도록 조정이 이루어집니다.

자체 Verlog 또는 VHDL 넷리스트를 열려면 대신 Import Netlist를 실행해야 합니다. 이는 plugins/gate_libraries/definitions에 일치하는 게이트 라이브러리가 있거나 수동으로 게이트 라이브러리를 제공하는 경우에만 작동합니다. 자체 게이트 라이브러리 생성 지침 및 기타 유용한 튜토리얼은 wiki를 참조하십시오.

다음 예제 코드는 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 개발에 기여해 주셔도 좋습니다. Github를 통해 새로운 풀 리퀘스트를 제출해 주십시오. 제출 전에 정적 검사와 clang format을 실행해 주시기 바랍니다. 또한 커밋 전에 이러한 검사를 git hook으로 설치할 수도 있습니다.

로컬에서 정적 검사 및 clang format 실행

clang-format hook을 설치하려면 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은 최대 알파 품질의 소프트웨어입니다. 사용에 따른 책임은 사용자 본인에게 있습니다. 당사는 당사 툴킷의 악의적인 사용을 권장하지 않습니다.

도구 다운로드