372908ba9d
* Filter by regex in string view * Dont recompile the regex for every string, display error message * localization * Use data->Buf for pattern creation / searching The filter string seems to get updated after the callback finished. Therefore the search string was always 1 character behind the actual string in the textfield when calling find() / creating the regex. |
||
---|---|---|
.github | ||
.idea | ||
cmake | ||
dist | ||
external | ||
include | ||
plugins | ||
python_libs/lib | ||
res | ||
source | ||
tests | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
LICENSE | ||
README.md |
🔍 ImHex
A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
Supporting
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Screenshots
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, namespaces, 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
- Built-in Content Store
- Download all files found in the database directly from within ImHex
- Yara Rules support
- Quickly scan a file for vulnearabilities with official yara rules
- Helpful tools
- Itanium and MSVC demangler
- ASCII table
- Regex replacer
- Mathematical expression evaluator (Calculator)
- Hexadecimal Color picker
- Base converter
- UNIX Permissions calculator
- Anonfiles File upload tool
- Wikipedia term definition finder
- File utilities
- File splitter
- File combiner
- File shredderer
- Built-in cheat sheet for pattern language and Math evaluator
- Doesn't burn out your retinas when used in late-night sessions
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.
Many dependencies are bundled into the repository using submodules so make sure to clone it using the --recurse-submodules
option.
All dependencies that aren't bundled, can be installed using the dependency installer scripts found in the /dist
folder.
For working examples
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 thelib
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/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 ocornut 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 nlohmann for their json library used for project files
- Thanks to aquynh for capstone which is the base of the disassembly window
- Thanks to vitaut for their libfmt library which makes formatting and logging so much better
- Thanks to rxi for microtar used for extracting downloaded store assets