2020-12-19 15:14:45 +01:00
< h1 align = "center" > :mag: ImHex< / h1 >
2020-11-10 15:29:22 +01:00
2021-08-18 22:36:46 +02:00
< p align = "center" > A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.< / p >
2020-12-01 20:47:57 +01:00
2020-12-19 15:14:45 +01:00
< p align = "center" >
< a title = "'Build' workflow Status" href = "https://github.com/WerWolv/ImHex/actions?query=workflow%3ABuild" > < img alt = "'Build' workflow Status" src = "https://img.shields.io/github/workflow/status/WerWolv/ImHex/Build?longCache=true&style=for-the-badge&label=Build&logoColor=fff&logo=GitHub%20Actions" > < / a >
2021-10-31 17:15:14 +01:00
< a title = "Discord Server" href = "https://discord.gg/X63jZ36xBY" > < img alt = "Discord Server" src = "https://img.shields.io/discord/789833418631675954?label=Discord&logo=Discord&style=for-the-badge" > < / a >
< a title = "Total Downloads" href = "https://github.com/WerWolv/ImHex/releases/latest" > < img alt = "Total Downloads" src = "https://img.shields.io/github/downloads/WerWolv/ImHex/total?longCache=true&style=for-the-badge&label=Downloads&logoColor=fff&logo=GitHub" > < / a >
2020-12-19 15:14:45 +01:00
< / p >
2020-12-05 15:10:57 +01:00
## Supporting
2020-12-19 15:14:45 +01:00
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
2020-12-05 15:10:57 +01:00
2020-12-09 19:49:56 +01:00
< p align = "center" >
2020-12-05 15:10:57 +01:00
< a href = "https://github.com/sponsors/WerWolv" > < img src = "https://werwolv.net/assets/github_banner.png" alt = "GitHub donate button" / > < / a >
< a href = "https://www.patreon.com/werwolv" > < img src = "https://c5.patreon.com/external/logo/become_a_patron_button.png" alt = "Patreon donate button" / > < / a >
< a href = "https://werwolv.net/donate" > < img src = "https://werwolv.net/assets/paypal_banner.png" alt = "PayPal donate button" / > < / a >
2020-12-09 19:49:56 +01:00
< / p >
2020-12-05 15:10:57 +01:00
2021-10-31 17:15:14 +01:00
## Screenshots
![](https://user-images.githubusercontent.com/10835354/139592192-46ba0aef-3096-4ba6-96ca-8d65c7b6bf57.png)
![](https://user-images.githubusercontent.com/10835354/139592467-27031984-4381-4341-aa18-e827eadca701.png)
2020-12-01 20:47:57 +01:00
## 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
2021-10-31 17:15:14 +01:00
- arrays, pointers, structs, unions, enums, bitfields, namespaces, little and big endian support, conditionals and much more!
2020-12-01 20:47:57 +01:00
- Useful error messages, syntax highlighting and error marking
- Data importing
- Base64 files
- IPS and IPS32 patches
2020-12-06 22:15:00 +01:00
- Data exporting
2020-12-01 20:47:57 +01:00
- 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
2020-12-17 08:55:40 +01:00
- String search
2020-12-01 20:47:57 +01:00
- 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
2020-12-17 08:55:40 +01:00
- ARM32 (ARM, Thumb, Cortex-M, AArch32)
2020-12-01 20:47:57 +01:00
- ARM64
- MIPS (MIPS32, MIPS64, MIPS32R6, Micro)
2020-12-17 08:55:40 +01:00
- x86 (16-bit, 32-bit, 64-bit)
- PowerPC (32-bit, 64-bit)
- SPARC
- IBM SystemZ
- xCORE
2020-12-03 20:56:02 +01:00
- M68K
- TMS320C64X
- M680X
2020-12-06 22:15:00 +01:00
- Ethereum
2020-12-01 20:47:57 +01:00
- Bookmarks
- Region highlighting
- Comments
- Data Analyzer
2020-12-17 08:55:40 +01:00
- File magic-based file parser and MIME type database
2020-12-01 20:47:57 +01:00
- Byte distribution graph
- Entropy graph
2021-02-26 13:35:48 +01:00
- Highest and average entropy
2020-12-01 20:47:57 +01:00
- Encrypted / Compressed file detection
2021-10-31 17:15:14 +01:00
- 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
2020-12-01 20:47:57 +01:00
- Helpful tools
- Itanium and MSVC demangler
- ASCII table
- Regex replacer
- Mathematical expression evaluator (Calculator)
- Hexadecimal Color picker
2021-10-31 17:15:14 +01:00
- Base converter
- UNIX Permissions calculator
- Anonfiles File upload tool
- Wikipedia term definition finder
- File utilities
- File splitter
- File combiner
- File shredderer
2020-12-01 20:47:57 +01:00
- Built-in cheat sheet for pattern language and Math evaluator
- Doesn't burn out your retinas when used in late-night sessions
2020-11-10 15:29:22 +01:00
2021-01-08 01:36:17 +01:00
## Pattern Language
2021-02-26 13:35:48 +01:00
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 ](https://github.com/WerWolv/ImHex/wiki/Pattern-Language-Guide ) or a simpler version in ImHex under `Help -> Pattern Language Cheat Sheet`
2021-01-08 01:36:17 +01:00
2020-12-04 09:26:19 +01:00
## Additional Files
2020-12-17 08:55:40 +01:00
For format patterns, includable libraries and magic files, check out the [ImHex-Patterns ](https://github.com/WerWolv/ImHex-Patterns ) repository. Feel free to PR your own files there as well!
2020-12-04 09:26:19 +01:00
2020-12-30 18:56:25 +01:00
## Nightly builds
2021-01-25 15:49:20 +01:00
Nightlies are available via GitHub Actions [here ](https://github.com/WerWolv/ImHex/actions?query=workflow%3ABuild ).
- Windows • __x86_64__
- [MSI Installer ](https://nightly.link/WerWolv/ImHex/workflows/build/master/Windows%20Installer.zip )
- [Portable ZIP ](https://nightly.link/WerWolv/ImHex/workflows/build/master/Windows%20Portable%20ZIP.zip )
- MacOS • __x86_64__
- [DMG ](https://nightly.link/WerWolv/ImHex/workflows/build/master/macOS%20DMG.zip )
- Linux • __x86_64__
- [ELF ](https://nightly.link/WerWolv/ImHex/workflows/build/master/Linux%20ELF.zip )
2020-12-30 18:56:25 +01:00
2020-12-01 20:47:57 +01:00
## Compiling
2021-10-31 17:15:14 +01:00
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.
2020-12-01 20:47:57 +01:00
2021-10-31 17:15:14 +01:00
For working examples
2020-12-18 21:44:13 +01:00
2021-03-01 08:56:49 +01:00
### Windows
2020-12-07 04:16:55 +01:00
2021-03-01 08:56:49 +01:00
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.
2020-12-07 04:16:55 +01:00
After all the dependencies are installed, run the following commands to build ImHex:
```sh
2020-12-01 20:47:57 +01:00
mkdir build
cd build
2020-12-28 18:52:22 +01:00
cmake -DCMAKE_BUILD_TYPE=Release ..
2020-12-01 20:47:57 +01:00
make -j
```
2020-12-07 04:16:55 +01:00
---
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.
2020-12-01 20:47:57 +01:00
2020-12-07 04:16:55 +01:00
- 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
2020-12-03 09:17:55 +01:00
2020-12-18 21:44:13 +01:00
### macOS
To build ImHex on macOS, run the following commands:
```sh
brew bundle --no-lock --file dist/Brewfile
mkdir build
cd build
2020-12-28 18:52:22 +01:00
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 ..
2020-12-18 21:44:13 +01:00
make -j
```
2021-03-01 08:56:49 +01:00
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:
```sh
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.
2021-03-01 10:40:05 +01:00
Configuration files go to `/etc/xdg/imhex` or `~/.config/imhex` .
All other files belong in `/usr/share/imhex` or `~/.local/share/imhex` :
2021-03-01 08:56:49 +01:00
```
Patterns: /usr/share/imhex/patterns
Pattern Includes: /usr/share/imhex/includes
Magic files: /usr/share/imhex/magic
Python: /usr/share/imhex/lib/pythonX.X
2021-03-08 16:09:33 +01:00
Plugins: /usr/share/imhex/plugins
2021-03-01 10:40:05 +01:00
Configuration: /etc/xdg/imhex/config
2021-03-01 08:56:49 +01:00
Resources: /usr/share/imhex/resources
```
2021-03-01 10:40:05 +01:00
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` .
2021-03-01 08:56:49 +01:00
2020-12-03 09:17:55 +01:00
## Credits
2020-12-03 09:18:55 +01:00
- Thanks a lot to ocornut for their amazing [Dear ImGui ](https://github.com/ocornut/imgui ) which is used for building the entire interface
2021-10-31 17:15:14 +01:00
- Thanks to ocornut as well for their hex editor view used as base for this project.
2020-12-03 09:18:55 +01:00
- Thanks to BalazsJako for their incredible [ImGuiColorTextEdit ](https://github.com/BalazsJako/ImGuiColorTextEdit ) used for the pattern language syntax highlighting
- Thanks to nlohmann for their [json ](https://github.com/nlohmann/json ) library used for project files
- Thanks to aquynh for [capstone ](https://github.com/aquynh/capstone ) which is the base of the disassembly window
2021-10-31 17:15:14 +01:00
- Thanks to vitaut for their [libfmt ](https://github.com/fmtlib/fmt ) library which makes formatting and logging so much better
- Thanks to rxi for [microtar ](https://github.com/rxi/microtar ) used for extracting downloaded store assets