🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
Go to file
Henry Wang 6e71d5aa31
docs: Update deps in README (#191)
This change is to reflect the commit made in 785ecb8a78, which changes openssl libcrypto to libmbedtls, making changes everywhere except in the README documentation.
2021-03-02 21:36:54 +01:00
.github github: Split msys2 install and dependency install 2021-02-28 16:05:05 +01:00
.idea ui: Added ImPlot library 2021-03-02 13:48:23 +01:00
cmake build: Fixed libs not being built in correct directory 2021-03-02 10:19:37 +01:00
dist Add missing pkg-config in Brewfile 2021-03-01 23:18:17 +01:00
external ui: Make use of ImPlot to drastically improve information view 2021-03-02 13:49:45 +01:00
include sys: ImU64 is not 64 bit everywhere... 2021-03-02 14:32:18 +01:00
magic_dbs Added magic database for Nintendo console files 2020-11-13 13:06:45 +01:00
plugins lang: Fix color attribute not being applied to array entries 2021-03-02 14:23:06 +01:00
python_libs/lib Added Python API function to create structs and unions 2020-12-01 18:21:29 +01:00
res Moved resource.rc to res folder 2021-01-11 16:03:10 +01:00
source sys: Last one 2021-03-02 16:45:39 +01:00
.gitignore Pattern Language rewrite (#111) 2021-01-02 20:27:11 +01:00
.gitmodules sys/build: Properly support per-system metadata file paths (#181) 2021-03-01 08:56:49 +01:00
CMakeLists.txt Add Yara rule matching interface (#178) 2021-02-26 13:35:19 +01:00
LICENSE Create LICENSE 2020-12-03 15:34:58 +01:00
README.md docs: Update deps in README (#191) 2021-03-02 21:36:54 +01:00

README.md

🔍 ImHex

A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM.

'Build' workflow Status Discord Server

Supporting

If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!

GitHub donate button Patreon donate button PayPal donate button

Features

  • Featureful hex view
    • Byte patching
    • Patch management
    • Copy bytes as feature
      • Bytes
      • Hex string
      • C, C++, C#, Rust, Python, Java & JavaScript array
      • ASCII-Art hex view
      • HTML self contained div
    • String and hex search
    • Colorful highlighting
    • Goto from start, end and current cursor position
  • Custom C++-like pattern language for parsing highlighting a file's content
    • Automatic loading based on MIME type
    • arrays, pointers, structs, unions, enums, bitfields, using declarations, little and big endian support, conditionals and much more!
    • Useful error messages, syntax highlighting and error marking
  • Data importing
    • Base64 files
    • IPS and IPS32 patches
  • Data exporting
    • IPS and IPS32 patches
  • Data inspector allowing interpretation of data as many different types (little and big endian)
  • Huge file support with fast and efficient loading
  • String search
    • Copying of strings
    • Copying of demangled strings
  • File hashing support
    • CRC16 and CRC32 with custom initial values and polynomials
    • MD4, MD5
    • SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
  • Disassembler supporting many different architectures
    • ARM32 (ARM, Thumb, Cortex-M, AArch32)
    • ARM64
    • MIPS (MIPS32, MIPS64, MIPS32R6, Micro)
    • x86 (16-bit, 32-bit, 64-bit)
    • PowerPC (32-bit, 64-bit)
    • SPARC
    • IBM SystemZ
    • xCORE
    • M68K
    • TMS320C64X
    • M680X
    • Ethereum
  • Bookmarks
    • Region highlighting
    • Comments
  • Data Analyzer
    • File magic-based file parser and MIME type database
    • Byte distribution graph
    • Entropy graph
    • Highest and average entropy
    • Encrypted / Compressed file detection
  • Helpful tools
    • Itanium and MSVC demangler
    • ASCII table
    • Regex replacer
    • Mathematical expression evaluator (Calculator)
    • Hexadecimal Color picker
  • Built-in cheat sheet for pattern language and Math evaluator
  • Doesn't burn out your retinas when used in late-night sessions

Screenshots

Pattern Language

The custom C-like Pattern Language developed and used by ImHex is easy to read, understand and learn. A guide with all features of the language can be found in the wiki or a simpler version in ImHex under Help -> Pattern Language Cheat Sheet

Additional Files

For format patterns, includable libraries and magic files, check out the ImHex-Patterns repository. Feel free to PR your own files there as well!

Nightly builds

Nightlies are available via GitHub Actions here.

Compiling

You need a C++20 compatible compiler such as GCC 10.2.0 to compile ImHex. Moreover, the following dependencies are needed for compiling ImHex:

  • GLFW3
  • libmagic, libgnurx, libtre, libintl, libiconv
  • libmbedtls
  • capstone
  • Python3
  • freetype2
  • Brew (macOS only)
  • Xcode (macOS only)

Windows

On Windows, ImHex is built through msys2 / mingw. To install all dependencies, open a mys2 window and run the PKGCONFIG script in the (dist/msys2)[dist/msys2] folder. After all the dependencies are installed, run the following commands to build ImHex:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

To create a standalone zipfile on Windows, get the Python standard library (e.g. from https://github.com/python/cpython/tree/master/Lib) and place the files and folders in lib/python3.8 next to your built executable. Don't forget to also copy the libpython3.8.dll and libwinpthread-1.dll from your mingw setup next to the executable.

  • Copy the files from python_libs in the lib folder next to your built executable.
  • Place your magic databases in the magic folder next to your built executable
  • Place your patterns in the pattern folder next to your built executable
  • Place your include pattern files in the include folder next to your built executable

macOS

To build ImHex on macOS, run the following commands:

brew bundle --no-lock --file dist/Brewfile
mkdir build
cd build
CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++ PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig":"$(brew --prefix)/lib/pkgconfig" cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

Install the ImHex executable as well as libimhex.dylib to wherever ImHex should be installed.

All other files belong in ~/Library/Application Support/imhex:

Patterns: ~/Library/Application Support/imhex/patterns
Pattern Includes: ~/Library/Application Support/imhex/includes
Magic files: ~/Library/Application Support/imhex/magic
Python: ~/Library/Application Support/imhex/lib/pythonX.X
Plugins: ~/Library/Application Support/imhex/plugins
Configuration: ~/Library/Application Support/imhex/config
Resources: ~/Library/Application Support/imhex/resources

Linux

Dependency installation scripts are available for many common Linux distributions in the (/dist)[dist] folder. After all the dependencies are installed, run the following commands to build ImHex:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

Put the ImHex executable into the /usr/bin folder. Put libimhex.so into the /usr/lib folder. Configuration files go to /etc/xdg/imhex or ~/.config/imhex. All other files belong in /usr/share/imhex or ~/.local/share/imhex:

Patterns: /usr/share/imhex/patterns
Pattern Includes: /usr/share/imhex/includes
Magic files: /usr/share/imhex/magic
Python: /usr/share/imhex/lib/pythonX.X
Plugins: /usr/share/imhex/imhex/plugins
Configuration: /etc/xdg/imhex/config
Resources: /usr/share/imhex/resources

All paths follow the XDG Base Directories standard, and can thus be modified with the environment variables XDG_CONFIG_HOME, XDG_CONFIG_DIRS, XDG_DATA_HOME and XDG_DATA_DIRS.

Credits

  • Thanks a lot to ocornut for their amazing Dear ImGui which is used for building the entire interface
    • Thanks to orconut as well for their hex editor view used as base for this project.
    • Thanks to BalazsJako for their incredible ImGuiColorTextEdit used for the pattern language syntax highlighting
    • Thanks to AirGuanZ for their amazing imgui-filebrowser used for loading and saving files
  • Thanks to nlohmann for their json library used for project files
  • Thanks to aquynh for capstone which is the base of the disassembly window