1
0
mirror of synced 2024-11-12 02:00:52 +01:00
🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
Go to file
WerWolv 5c96a28fb6 Actually fix crash when creating zero sized arrays
If size is zero, the array will be treated as non-existent. This fixes #50
2020-12-06 22:52:15 +01:00
.github CI: Add a GitHub Action to build on Ubuntu 20.04 LTS 2020-12-05 20:03:22 +01:00
.idea Added possible support for MacOS. Completely untested. 2020-12-06 13:48:56 +01:00
include Added overriding of endianess for individual variables 2020-12-06 21:40:57 +01:00
libs Added possible support for MacOS. Completely untested. 2020-12-06 13:48:56 +01:00
magic_dbs Added magic database for Nintendo console files 2020-11-13 13:06:45 +01:00
python_libs/lib Added Python API function to create structs and unions 2020-12-01 18:21:29 +01:00
source Actually fix crash when creating zero sized arrays 2020-12-06 22:52:15 +01:00
.gitignore Only statically link on Windows 2020-11-15 15:48:30 +01:00
CMakeLists.txt CI: Add a GitHub Action to build on Ubuntu 20.04 LTS 2020-12-05 20:03:22 +01:00
icon.ico Add icon 2020-11-10 17:34:16 +01:00
LICENSE Create LICENSE 2020-12-03 15:34:58 +01:00
README.md Add a list of packages to install for building on Fedora 33 2020-12-06 22:19:52 +01:00
resource.rc Change icon id for GLFW to load it 2020-11-20 16:50:21 +01:00

ImHex

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

Supporting

If you like my work, 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, litte and big endian support
    • Useful error messages, syntax highlighting and error marking
  • Data importing
    • Base64 files
    • IPS and IPS32 patches
  • Data exporting
    • IPS and IPS32 patches
  • Data Exporting
  • Data inspector allowing interpretation of data as many different types (little and big endian)
  • Huge file support with fast and efficient loading
  • Strings 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
    • 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 avarage 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

Additional Files

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

Compiling

This guide assumes you're either on Windows using mingw or on Arch Linux

You need a C++20 compatible compiler such as GCC 10.2.0 to compile ImHex. The following libraries are needed to compile ImHex. All of them can be found in the default pacman repositories

GLFW3                                             ( (sudo) pacman -S glfw )
libmagic, libgnurx, libtre, libintl, libiconv     ( (sudo) pacman -S file )
libcrypto                                         ( (sudo) pacman -S openssl )
capstone                                          ( (sudo) pacman -S capstone )
libLLVMDemangle                                   ( (sudo) pacman -S llvm llvm-libs )
nlohmann json                                     ( (sudo) pacman -S nlohmann-json )
Python3                                           ( (sudo) pacman -S python3 )

All in one for Arch Linux: sudo pacman -S glfw file openssl capstone llvm llvm-libs nlohmann-json python3
All in one for Fedora: sudo dnf install cmake gcc-c++ capstone-devel glfw-devel glm-devel json-devel llvm-devel mesa-libGL-devel openssl-devel python-devel
All in one for MinGW: pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-capstone mingw-w64-x86_64-glfw mingw-w64-x86_64-glm mingw-w64-x86_64-file mingw-w64-x86_64-llvm mingw-w64-x86_64-nlohmann-json mingw-w64-x86_64-openssl mingw-w64-x86_64-polly mingw-w64-x86_64-pytho

After all the libraries are installed, run the following commands to build ImHex

mkdir build
cd build
cmake ..
make -j

On Windows, download the python standard library 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.

On both Windows and Linux, 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

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