4P by GN⁺ | ★ favorite | 댓글 1개
  • ImHex는 리버스 엔지니어, 프로그래머, 심야 작업자를 대상으로 한 헥스 에디터이며, 파일 내용을 분석·수정·시각화하는 기능을 한 도구에 모음
  • 핵심 기능은 C 유사 패턴 언어로 구조와 데이터 타입을 정의해 파일 내용을 파싱·하이라이트하고, MIME 타입과 magic 값 기반 자동 로딩을 지원하는 점임
  • 로컬 파일, raw disk, GDB Server, UDP 패킷, 프로세스 메모리, SSH/SFTP 원격 파일 등 여러 데이터 소스를 열 수 있고, Capstone 기반 디스어셈블러와 YARA rule 스캔도 포함함
  • 사용 조건은 OpenGL 3.0 이상 GPU가 기본이며, -NoGPU 소프트웨어 렌더링 릴리스는 GPU 없이 쓸 수 있지만 GPU 가속 버전보다 훨씬 느릴 수 있음
  • 플러그인은 libimhex, ImHex API, Content Registry를 통해 개발하며, 대부분은 GPLv2-only지만 /lib/libimhex/plugins/uiLGPLv2.1로 제공돼 proprietary 플러그인 개발을 허용함

ImHex가 제공하는 기본 역할

헥스 뷰와 데이터 편집

  • 헥스 뷰는 byte patching, patch management, 무제한 undo/redo를 지원함
  • 바이트 복사는 여러 형식으로 가능함
    • bytes
    • hex string
    • C, C++, C#, Rust, Python, Java, JavaScript 배열
    • ASCII-Art hex view
    • HTML self-contained div
  • 검색과 이동 기능은 단순 string/hex search, 시작·끝·현재 커서 기준 goto를 포함함
  • 하이라이트는 전경 규칙 설정, 패턴·검색 결과·북마크 기반 배경 하이라이트를 지원함
  • 데이터 표시는 여러 타입을 지원함
    • 8/16/32/64비트 hexadecimal integer
    • 8/16/32/64비트 signed/unsigned decimal integer
    • 16/32/64비트 float
    • RGBA8 color, HexII, binary
  • 인코딩은 ASCII와 사용자 정의 인코딩을 처리하며, UTF-8, UTF-16, ShiftJIS, 대부분의 Windows 인코딩 등을 기본 지원함
  • paged data view를 제공함

패턴 언어와 데이터 구조 해석

  • Pattern Language는 ImHex용으로 개발된 완전한 사용자 정의 프로그래밍 언어임
  • C와 유사한 문법으로 구조와 데이터 타입을 정의하고, 이를 사용해 파일 내용을 파싱하고 하이라이트할 수 있음
  • 패턴 언어는 MIME 타입과 magic 값에 기반한 자동 로딩을 지원함
  • 지원 요소는 arrays, pointers, structs, unions, enums, bitfields, namespaces, little/big endian, conditionals 등을 포함함
  • 오류 메시지, syntax highlighting, error marking을 제공함
  • 데이터 시각화 대상은 images, audio, 3D models, coordinates, time stamps 등을 포함함
  • 관련 자료:

데이터 검사, 전처리, 검색

  • Data Inspector는 endianness, decimal, hexadecimal, octal, bit inversion을 포함해 데이터를 다양한 타입으로 해석함
    • unsigned/signed integer: 8/16/24/32/48/64비트
    • float: 16/32/64비트
    • signed/unsigned LEB128
    • ASCII, Wide, UTF-8 characters and strings
    • time32_t, time64_t, DOS date/time
    • GUID, RGBA8, RGB65 colors
  • inspector를 통해 byte 복사와 수정이 가능하고, 패턴 언어로 새 데이터 타입을 추가할 수 있음
  • node-based data pre-processor는 헥스 에디터에 표시되기 전에 데이터를 수정·복호화·디코딩할 수 있음
    • underlying source를 건드리지 않고 데이터 수정 가능
    • custom node 추가 지원
  • 데이터 검색은 전체 파일 또는 선택 영역을 대상으로 수행할 수 있음
    • 문자열 추출은 최소 길이, 문자 집합, 인코딩 옵션을 제공함
    • sequence search는 byte 또는 character sequence를 찾고 대소문자 무시 옵션을 제공함
    • regex search, binary pattern wildcard search, numeric value/range search를 지원함
    • numeric search는 size, endianness, unaligned value 무시 옵션을 포함함

데이터 소스와 분석 기능

  • ImHex는 여러 데이터 소스에서 데이터를 로드할 수 있음
    • 로컬 파일: 큰 파일의 빠르고 효율적인 로딩 지원
    • raw disks: raw disk와 partition 로딩
    • GDB Server: 실행 중인 프로세스 또는 embedded device의 RAM 접근
    • Intel Hex, Motorola SREC
    • Base64 encoded data
    • UDP packets
    • process memory: 실행 중인 프로세스의 전체 address space 검사
    • SSH/SFTP 원격 파일
  • 데이터 분석·시각화는 file magic 기반 file parser와 MIME type database를 포함함
  • 그래프와 통계는 byte type distribution, entropy graph, highest/average entropy, digram, layered distribution graph를 제공함
  • encrypted/compressed file detection 기능이 있음
  • diffing은 서로 다른 데이터 소스를 비교하고, 차이 하이라이트와 table view를 제공함

디스어셈블리, YARA, 해시

  • 내장 디스어셈블러는 Capstone이 지원하는 모든 아키텍처를 지원함
    • ARM32, ARM64, MIPS, x86 16/32/64-bit, PowerPC, SPARC, IBM SystemZ, xCORE, M68K, TMS320C64X, M680X, Ethereum, RISC-V, WebAssembly, MOS65XX, Berkeley Packet Filter
  • 자체 아키텍처용 custom disassembler 작성도 지원함
  • YARA Rule 지원은 official yara rules로 파일을 스캔하고, match를 헥스 에디터에서 하이라이트하며, match로 이동하고, 여러 rule을 한 번에 적용할 수 있음
  • 해싱은 특정 데이터 영역과 임의 문자열을 대상으로 수행할 수 있음
  • 지원 해시에는 CRC8/16/32, MD5, SHA-1/SHA-224/SHA-256/SHA-384/SHA-512, Adler32, Murmur, SipHash, XXHash, Tiger, Blake2B, Blake2S 등이 포함됨

UI, 테마, 가져오기·내보내기

  • 테마는 기본 dark mode를 제공하며 light mode도 사용 가능함
  • 공유 가능한 theme file로 모든 UI 요소의 색상과 스타일을 커스터마이즈할 수 있고 custom font를 지원함
  • modern interface는 multiple workspaces, custom layouts, detachable windows를 지원함
  • import/export는 Base64 files, IPS/IPS32 patches, Markdown reports, 여러 프로그래밍 언어용 binary arrays를 지원함
  • bookmarks는 custom name/color, 헥스 에디터 내 region highlight, jump, 새 탭에서 bookmark content 열기, comment 추가를 지원함
  • 내장 content updater는 데이터베이스의 파일을 ImHex 내부에서 다운로드할 수 있음
    • pattern files
    • pattern language libraries
    • magic files
    • custom data processor nodes
    • custom encodings
    • custom themes
    • Yara rules

도구와 온보딩

  • Helpful tools에는 LLVM 기반 Itanium, MSVC, Rust, D-Lang demangler가 포함됨
  • 기타 도구는 ASCII table, regex replacer, mathematical expression evaluator, graphing calculator, hexadecimal color picker, base converter, byte swapper, UNIX permissions calculator, Wikipedia term definition finder 등을 포함함
  • file utilities는 file splitter, file combiner, file shredder를 제공함
  • TCP Client/Server, HTTP Requests, IEEE754 Float visualizer, Euclidean algorithm calculator 등도 포함됨
  • 시작을 돕는 기능으로 다국어 지원, beginner용 simplified mode, extensive documentation, database의 example files, achievements, interactive tutorials가 있음

시스템 요구사항과 빌드 조건

  • GPU는 일반적으로 OpenGL 3.0 이상이 필요함
    • -NoGPU suffix 릴리스는 software rendered 방식이라 GPU 없이 실행 가능하지만 GPU accelerated 버전보다 훨씬 느릴 수 있음
    • 가능하면 integrated GPU 대신 dedicated GPU를 쓰는 것이 권장됨
    • Windows의 일부 Intel HD GPU driver는 graphical artifacts를 일으키는 것으로 알려져 있음
  • OS 지원:
    • Windows 7 이상, Windows 10/11 권장
    • macOS 15 Sequoia 이상
      • 낮은 버전도 직접 컴파일하면 동작할 수 있지만, GitHub에 macOS 15 이하 CI runner가 없어 release binary는 동작하지 않음
      • macOS build는 signed 상태가 아니므로 Security & Privacy 설정에서 수동 허용이 필요함
    • Linux는 Ubuntu/Debian, Fedora, RHEL/AlmaLinux, Arch Linux용 official release가 있고, 다른 distro는 AppImage, Flatpak, Snap으로 지원됨
    • FreeBSD 14.3에서 테스트됨
  • CPU는 x86, AMD64, ARM64를 공식 지원하며, Little Endian CPU라면 동작해야 함
  • RAM은 약 50MiB가 필요하고, 더 복잡한 분석에는 더 많은 메모리가 필요함
  • 저장공간은 약 100MiB가 필요함
  • 컴파일에는 C++23 이상을 지원하는 GCC 또는 Clang이 필요함
    • Windows와 Linux release는 최신 available GCC로 빌드됨
    • macOS release는 최신 available LLVM Clang으로 빌드됨
    • MSVC와 AppleClang은 지원되지 않음
  • 설치와 컴파일 문서:

플러그인 개발과 라이선스

  • 플러그인 개발은 template project로 시작할 수 있으며, libimhex, ImHex API, Content Registry에 접근해 ImHex와 상호작용하거나 새 content를 추가할 수 있음
  • 플러그인을 빌드하려면 SDK가 필요함
  • 로컬 SDK 빌드 절차:
    • cmake -G Ninja -DIMHEX_BUNDLE_PLUGIN_SDK=ON -B build
    • cd build
    • DESTDIR=install ninja install
    • SDK 경로는 install/usr/local/share/imhex/sdk가 되며, IMHEX_SDK_PATH를 해당 absolute path로 설정해야 함
  • GitHub Actions CI에서는 imhex-download-sdk action으로 SDK를 자동 다운로드할 수 있음
  • 플러그인 시작점으로 ImHex Plugin Template이 제공됨
  • 라이선스는 대부분 GPLv2-only
    • /lib/libimhex는 LGPLv2.1
    • /plugins/ui는 LGPLv2.1
    • 이 예외는 proprietary plugin 개발을 허용하기 위한 것임
  • code signing policy는 사용자가 명시적으로 요청하거나 설치·운영자가 요청하지 않는 한 다른 네트워크 시스템으로 정보를 전송하지 않는다고 밝힘

댓글과 토론

Hacker News 의견들
  • ImHex는 지금까지 써본 헥스 편집기 중 가장 좋았음
    몇 가지 이유가 있는데, 다른 편집기에도 일부는 있지만 한꺼번에 갖춘 경우는 드묾. 파일 템플릿으로 알려진 파일 형식의 섹션을 자동 강조하고, 선택한 바이트를 흔한 자료형 대부분으로 동시에 해석해 보여주며, 큰 파일을 다룰 때 다른 편집기보다 훨씬 빠름
    단점은 imgui UI가 가끔 버그가 있지만, HexFiend나 hexa 같은 다른 뷰어를 대체하게 됨

    • 010 Editor도 세 가지를 모두 만족함. 대신 ImHex는 010 Editor와 달리 150달러를 내지 않아도 되고, 자유 오픈소스라 필요한 기능을 직접 패치하기 쉬움
  • 이 편집기가 ASCII 바이트를 CP437 글리프로 표시할 수 있는지 궁금함
    DOS에서 바이너리 파일을 그렇게 읽으며 자라서, 해당 16진수 값보다 글리프를 훨씬 빨리 읽을 수 있음. 반대로 출력 불가능 문자를 점으로 표시하면 별로 알려주는 게 없음

    • 설정에서 추가 에셋을 내려받고 데이터를 여러 인코딩 형식으로 해석할 수 있음
      목록에 CP437은 안 보이지만 인코딩 파일 형식이 단순해서 매핑을 쉽게 만들 수 있을 듯함
      https://github.com/WerWolv/ImHex-Patterns/tree/master/encodi...
    • CP437의 문제는 FF, 00, 20이 모두 빈칸이라 똑같아 보인다는 것임
      또 독일어 sharp S인지 베타인지 애매한 문자도 있음
  • ImHex를 써봤지만, 내가 하려던 대부분의 작업에는 너무 복잡했음
    macOS에서는 여전히 Hex Fiend를 좋아함. 단순하고 빠르며 원하는 일을 해줌. Windows에서는 아직 완벽한 “단순한” 헥스 편집기를 못 찾았음

    • Windows의 HxD가 헥스 편집기의 정점에 가깝고, macOS나 Linux에는 진짜 대응물이 없다고 느낌. 아쉬운 건 Windows를 거의 안 쓴다는 점임
      macOS에서는 Hex Fiend를 쓰지만, 창을 넓히면 줄을 다시 흐르게 만드는 이유를 모르겠음. 시각적 방해를 줄이려고 최대화해도 줄 길이는 16바이트나 32바이트로 유지하고 싶고, 정렬을 망치는 이상한 크기는 원하지 않음
    • HexFiend에 한 표. 템플릿 형식이 확장하기 쉬워서 여러 파일 형식을 분석하는 데 써왔음
      ImHex도 잠깐 써봤고 프로젝트 자체는 정말 존중하지만, 내 용도에는 파리 잡는 데 대포를 쓰는 느낌이었음
    • Hiew는 써봤는지 궁금함
  • 당분간은 010 Editor를 계속 쓸 생각임[1]. 평생 써본 헥스 편집기 중 가장 훌륭했음
    이 새 프로젝트가 쓰는 GUI 프레임워크인 Dear ImGui는 전혀 마음에 들지 않음. 작은 화면과 창 관리자가 없는 임베디드 시스템용에 가깝지, 완전한 데스크톱 환경에서 쓰기에는 작은 요소들과 UI 통합 부재 때문에 꽤 어색함
    [1] https://www.sweetscape.com/010editor/

    • 앤티앨리어싱이 안 된 듯한 폰트 렌더링만으로도 쓰기 괴로움
  • “ImHex requires a GPU with OpenGL 3.0 support in general”이라고 되어 있는데, 왜 헥스 편집기에 OpenGL이 필요함? 그래서 GPU도 필요한 건가?
    OpenGL이 필요한 좋은 이유가 있는지, 아니면 그냥 있어 보이려는 건지 궁금함

    • 요즘 화면 해상도에서 어떤 편집기든 매끄럽고 빠르려면 하드웨어 렌더링이 필요함
      특히 복잡한 서식을 픽셀 단위로 그리던 시절의 방식은 눈에 띄게 느림. 예를 들면 이 글을 보면 됨
      [1] https://www.sublimetext.com/blog/articles/hardware-accelerat...
    • UI가 Imgui로 만들어졌기 때문임. 이름의 Im 접두사도 거기서 온 것이고, 컴퓨터 그래픽 프로그램용 UI 프레임워크임
      다만 OpenGL 요구가 꼭 GPU를 뜻하지는 않음. OpenGL의 소프트웨어 구현도 있지만 성능은 대체로 별로임. 또 요즘 많은 플랫폼은 어떤 형태로든 GPU가 있다고 가정함. GPU 없이 GUI 도구가 필요한 경우는 드물고, 그런 틈새 환경에서 헥스 편집기와 도구를 로컬로 돌릴 가능성도 낮음
    • 프로젝트 README에 따르면 GPU가 없을 경우 Windows와 macOS용 소프트웨어 렌더링 릴리스가 제공됨
    • 아마 imgui용 OpenGL 렌더러를 골랐을 뿐일 듯함
  • 정말 훌륭한 프로젝트임. Philips 스마트 시계의 ROM을 만지며 꽤 재미있게 놀았음
    Rust처럼 보이는 내장 DSL이 있고, 메모리 관리는 없어서 아주 가볍지만 그걸로 바이너리 스트림의 구조화된 데이터를 시각화하고 추출할 수 있음. 정말 재미있고 멋짐
    코드 없이 간단한 계산을 만드는 시각 편집기도 있지만, 써봤을 때는 다듬어진 느낌이 아니었음. 이상하게도 DSL로 코드를 쓰는 쪽이 더 직관적이고 쉬웠음

    • 그러면 Wireshark의 프로토콜 디섹터와 비슷한 느낌인가 봄
  • 관련 글:
    ImHex – A Hex Editor - https://news.ycombinator.com/item?id=32287902 - 2022년 7월, 댓글 70개
    ImHex – A Hex Editor - https://news.ycombinator.com/item?id=25353965 - 2020년 12월, 댓글 78개

  • 꽤 좋아 보임. 프로젝트로 헥스 편집기를 개발해보는 건 좋은 아이디어일까?
    단순한 버전은 그렇게 어렵지 않아 보이지만, 실행 파일 이미지부터 Doom WAD, 독점 파일 형식까지 온갖 파일 형식을 파싱하려면 연습할 여지가 많음. 역공학을 돕는 도구를 만들 여지도 많아 보임

    • 새 언어를 배울 때 첫 프로젝트로 헥스 편집기 구현을 한다는 글을 읽은 기억이 있음
      파일 처리, GUI, 텍스트 배치, 메모리 관리 등 여러 항목을 한 번에 연습할 수 있다고 했음
  • 좋아 보임. 보통 와일드카드 검색 때문에 010 Editor를 계속 썼는데, ImHex도 그 기능과 그 이상을 해주니 마음이 기움. 좀 더 테스트해볼 예정임

  • 이쪽 컴퓨터 문화가 정말 좋음. 역공학, 커널 모듈 작성, 물건이 어떻게 동작하는지 파악하고 원래 설계되지 않은 일을 하게 만드는 것들이 매력적임
    다만 합법적으로 할 수 있는 길은 많지 않고, 엄청난 시간과 동료들의 도움이 필요함

    • 직업으로 역공학을 하고 있고, 전 세계에 같은 일을 하는 동료들이 많음. 주된 업무 분야는 악성코드 분석
      취미로는, 내가 사는 나라에서 자신이 소유한 것을 자기 시스템에서 동작하게 만들 목적의 역공학이 명시적으로 합법임. 예를 들어 Windows XP 게임을 Windows 10에서 돌아가게 고치는 경우임. 이 예외는 꽤 넓어서 “합법이어야 할 것 같은” 대부분의 경우 역공학이 가능해짐
    • 재미를 보려고 꼭 프로젝트가 “합법”일 필요는 없음
      실명과 연결되지 않는 가명으로 공개하고, DMCA 삭제 요청을 무시하는 전용 커뮤니티를 쓰면 됨. 이걸로 돈을 벌 생각이 없다면, 최악의 경우 대상이 작업물을 알아채고 다음 릴리스에 vmprotect를 적용하는 정도일 것임
    • 파일 형식 역공학은 정말 재미있음. 독점 업무 관리 앱을 쓰는 곳에서 일한 적이 있는데, 어느 날 심심해서 그 데이터 파일을 헥스 편집기로 보다가 앱의 레코드 제목들이 파일 안에서 정확히 X바이트 간격으로 떨어져 있는 패턴을 발견했음
      고정 길이 레코드라는 걸 깨닫고, 제목 바로 뒤 2바이트가 앱에 표시되는 레코드 번호의 16진수 값처럼 보였음. 체크박스를 클릭하니 한 바이트가 0x00에서 0x01로 바뀌었고, 충분히 실험한 뒤 전체 구조를 코드의 구조체로 매핑해서 원래 앱이 지원하지 못하던 보고서를 만들 수 있었음
      거기엔 불법적인 게 없었음. 벤더는 우리가 보고서 제작 비용을 내길 원했겠지만, 법적으로 막힌 건 아니었음
    • 공개하지 않으면 대체로 뭐든 할 수 있음
      무언가를 만들거나 배웠다고 해서 반드시 방송하듯 알릴 필요는 없음. 배움 자체가 보상이 될 수 있음