ImHex
ImHex is a free and open-source hex editor designed for reverse engineers, programmers, and analysts to view, decode, analyze, and modify binary data in files or memory.[1] It supports cross-platform operation on Windows, Linux, and macOS, with additional web-based and software-rendered versions available for broader accessibility.[2] Developed by WerWolv under the GNU General Public License version 2 (GPLv2), ImHex emphasizes advanced tools for tasks like format reverse engineering, data extraction, and patching, distinguishing it from basic hex viewers.[1][3] Key features include a custom binary template system and pattern language for defining and highlighting data structures, enabling users to create reusable decoding rules for complex formats.[2] It also incorporates a graphical node-based data visualizer for processing and transforming binary content, alongside built-in disassemblers supporting architectures such as x86, ARM, and PowerPC.[2] ImHex provides extensive file format support—covering 187 predefined patterns—as well as utilities like entropy graphing, YARA rule integration, byte-level diffing, and IPS patch application, making it particularly suited for malware analysis, executable inspection, and raw memory editing.[2] These capabilities are powered by modern rendering options, including GPU acceleration where available, to handle large datasets efficiently without straining system resources.[1] Since its initial public availability in late 2020, ImHex has evolved through community contributions on GitHub, with regular releases adding enhancements like HiDPI scaling, custom disassembler support, and multi-language translations.[4] As of early 2025, the latest stable version is 1.37.4, focusing on user interface improvements and expanded compilation compatibility, including Microsoft Visual C++ (MSVC) on Windows.[2] The project maintains an active development cycle, with nightly builds and a dedicated pattern repository for extending format support, fostering its use in security research, game modding, and software development communities.[1]Overview
Description
ImHex is a free, open-source hex editor designed for displaying, decoding, analyzing, and editing binary data.[2] It serves as a versatile tool for tasks such as reverse engineering file formats, extracting embedded information, patching specific values, conducting malware analysis, and manipulating executables or raw memory dumps.[5] Primarily targeted at reverse engineers and programmers, ImHex also appeals to users who prioritize visual comfort, featuring a dark mode optimized for extended late-night sessions.[1] Developed in C++, ImHex operates under the GNU General Public License version 2.0 (GPLv2), ensuring its source code remains freely accessible and modifiable.[1] It provides cross-platform compatibility across Windows, macOS, and Linux, with an additional web-based version available for browser use.[2] The official website is hosted at https://imhex.werwolv.net/, and the primary GitHub repository can be found at https://github.com/WerWolv/ImHex.[](https://imhex.werwolv.net/) A distinguishing feature of ImHex is its custom C++-like pattern language, which enables advanced parsing and highlighting of complex data structures.[2]Development
ImHex is primarily developed and maintained by WerWolv, an embedded systems engineer with a focus on reverse engineering and low-level programming.[6] Key contributors include AxCut, who provided extensive work on the Pattern Text Editor and various other components; iTrooz, responsible for the web version and broad project support; jumanji144, who contributed significantly to the Pattern Language and underlying infrastructure; Mary, who assisted with macOS porting and general development; Roblabla, who implemented MSI Installer support; and Mailaender, who facilitated distribution on Flathub, alongside numerous others participating through GitHub pull requests.[1][7] The project is implemented in C++ (requiring C++23 or later) and leverages external libraries such as Capstone for disassembly capabilities, while employing the custom libimhex library to handle plugin interactions.[1] Development occurs on GitHub, where the main repository receives ongoing contributions, and a dedicated ImHex-Patterns repository manages binary format definitions, includes, and magic files for use with the editor.[1][7] Builds are automated via GitHub Actions for nightly releases, with distributions available through the Microsoft Store, SourceForge, and as a package in Kali Linux tools.[8][5][9] The core codebase is licensed under GPLv2.0, ensuring copyleft requirements for derivatives, while UI plugins and libimhex fall under LGPLv2.1 to permit broader reuse.[1]History
Origins and Initial Release
ImHex was conceived by its primary developer, WerWolv, in October 2020 as a personal project aimed at overcoming the shortcomings of contemporary hex editors, particularly their lack of modern user interfaces and advanced analytical capabilities for reverse engineering tasks. WerWolv sought to create a tool that prioritized eye-friendly design—such as built-in dark mode for late-night work—while incorporating sophisticated features like pattern-based data parsing to enable more intuitive binary analysis. This initiative was driven by the need for a free, open-source alternative that could rival the functionality of commercial editors, allowing users to define custom data structures using a C-like scripting language for highlighting and decoding complex formats.[10][1] The project addressed specific limitations in existing tools, such as the basic visualization and scripting options in free editors like HxD, by integrating paid-level features including entropy analysis, hashing algorithms, and dynamic data previews directly into a cross-platform application. WerWolv's motivations stemmed from practical demands in reverse engineering, where traditional hex editors often fell short in providing seamless integration of inspection, search, and modification workflows without requiring external plugins or cumbersome setups. By building ImHex from the ground up using modern libraries, the developer aimed to streamline binary dissection for programmers and security researchers, emphasizing extensibility through its novel pattern language from the outset.[3][1] ImHex's initial public release occurred on November 12, 2020, as version 1.0.0, marking the debut of its core hex viewing, file modification, and pattern highlighting functionalities. This version included essential tools like byte distribution graphs, entropy calculations, and support for multiple hash functions (e.g., MD5, SHA-256), alongside the foundational pattern scripting system that allowed users to define structures such as arrays and custom types for data interpretation, as well as an integrated disassembler using the Capstone framework supporting architectures like x86, ARM, and others. Hosted on GitHub, the release quickly garnered attention within programming and security communities.[11][12] Upon launch, ImHex experienced rapid uptake on GitHub, accumulating over 1,600 stars within the first 24 hours and reaching approximately 3,700 stars shortly thereafter, reflecting strong initial interest from reverse engineering enthusiasts who appreciated its innovative approach to binary editing. The project's early forks and contributions further indicated its appeal, as users began adapting it for specialized workflows in malware analysis and software debugging, solidifying its position as a promising open-source contender in the hex editor space.[13]Major Milestones and Updates
Following its initial release, ImHex saw the introduction of a web-based version around 2023-2024, enabling browser-based hex editing without native installation, which expanded accessibility for quick analyses.[1] YARA rule support was added in late 2021 or early 2022, allowing users to scan files for vulnerabilities using official YARA rules, with matches highlighted directly in the hex view to streamline malware analysis.[14][15] The project gained notable community recognition in January 2023 through a feature on Hackaday, which praised its modern interface and utility for hackers working late nights, underscoring its appeal to reverse engineers.[3] The graphical data processor was introduced around 2023 as a node-based visual scripting tool, facilitating complex byte preprocessing and transformations before display or parsing, with additions like loop nodes for iterative operations.[16][4] This feature addressed challenges in handling intricate data flows, building on prior enhancements to the pattern language for more flexible binary interpretation.[17] In 2024, ImHex was officially included in the Kali Linux toolset as of March 2024, integrating it into the premier penetration testing distribution for enhanced forensics workflows.[18][9] ImHex maintains a regular update cadence, with nightly builds for ongoing development and major stable releases tied to feature maturity; by 2025, it had surpassed 30 stable versions, including over 80 total releases on GitHub.[4] Key updates have tackled scalability issues, such as efficient loading of huge files exceeding gigabytes, comprehensive endianness handling across platforms, and multi-architecture compatibility for ARM64 and others via AppImages and targeted builds.[4] As of November 2025, development continues with nightly builds, though the latest stable release remains version 1.37.4 from February 26, 2025, which focused on bug fixes and user experience refinements, including HiDPI scaling across Windows, macOS, and Linux, native macOS menu bar integration, custom disassembler support via JSON configurations, and compilation with MSVC for improved Windows development. Community discussions on platforms like Hacker News and Reddit have highlighted its usability for large-scale binary inspection, contributing to its growing adoption among programmers and security researchers.[4][19]Core Functionality
Hex Editing and Viewing
ImHex provides a featureful hex view interface that serves as the primary canvas for displaying and modifying binary data. The interface renders the loaded file as a grid of hexadecimal bytes alongside an ASCII representation, with configurable column counts adjustable via a slider or automatic resizing to fit the window. Users can apply custom encodings, such as UTF-8, UTF-16, or ShiftJIS, to decode non-ASCII characters accurately, and toggle options like uppercase/lowercase hex display or graying out zero bytes for better readability. Byte patching is supported through direct editing, with visual indicators such as red highlighting for modified bytes, and the interface includes an infinite undo/redo system to manage changes efficiently.[20][1] For viewing large files, ImHex employs a paged data approach that allows handling of huge binaries without loading the entire content into memory, enabling fast navigation and rendering. Key viewing tools include bookmarks, which users can set with custom names and colors for quick access to specific addresses, and a goto function that jumps to any location by address, cursor position, or selected bytes (up to 8 bytes in length). The layout supports variable row and column configurations, including big/little endian byte ordering and segment separators for structured data visualization, while a minimap provides an entropy-based overview with customizable visualizers like color gradients or data type highlights. Additionally, the hex view integrates briefly with the data inspector for interpreting selected bytes as specific types, such as integers or floats.[20][1] Editing operations in ImHex emphasize precision and flexibility, allowing direct byte modification by double-clicking cells or using keyboard input. Users can copy selected bytes in various formats, including raw arrays, hexadecimal strings, C/C++ code snippets, Python lists, or even HTML tables for documentation purposes. Patch management features enable saving and applying modifications as patches, with support for generating and applying IPS and IPS32 formats to facilitate version comparisons or distribution of changes. File diffing is available to highlight differences between two binaries, displaying them side-by-side with color-coded indicators for added, removed, or altered bytes. Operations like inserting, removing, or resizing byte ranges are accessible via the Edit menu or right-click context, preserving the file's integrity during modifications.[20][1] Basic import and export functionalities complement the editing workflow, including direct support for Base64 encoding and decoding to handle text-based representations of binary data. The user interface incorporates dark and light theming options, with customizable color schemes and styles defined in theme files to suit different preferences. ImHex's design is retina-friendly, featuring high-resolution rendering and scalable fonts to ensure clarity during prolonged use, while detachable windows and a modern layout enhance usability across platforms.[20][1]Data Inspection and Search
ImHex provides robust data inspection capabilities through its dedicated Data Inspector view, which enables users to decode and analyze bytes at the current cursor position without requiring custom pattern definitions. This tool interprets selected bytes as integers (signed or unsigned, ranging from 8-bit to 64-bit), floating-point numbers (half-precision 16-bit, single-precision 32-bit, and double-precision 64-bit), strings (ASCII or UTF-8), globally unique identifiers (GUIDs), and RGBA color values (8-bit per channel).[1][21] Users can configure endianness (little-endian or big-endian) to adjust byte ordering for multi-byte values, select display formats such as decimal, hexadecimal, or octal for numeric outputs, and apply bit inversion to flip each byte's bits before decoding (e.g., converting 0xFA to 0x05).[21] Additionally, the inspector supports copying decoded values and modifying underlying bytes directly, with options to hide unused rows for cleaner visualization.[1] The search functionality in ImHex, accessible via the Find view, supports querying across the entire file or selected regions, making it efficient for large binaries by listing results in a table with offsets, sizes, and values while highlighting matches in the hex editor. It includes string searches for ASCII, UTF-16LE, or UTF-16BE encodings with configurable minimum lengths and null-termination options; sequence searches for exact byte matches (case-insensitive); regular expression queries for pattern matching (full or partial); binary pattern searches using wildcards; and numeric value searches for integers or floats within specified ranges, with support for signed/unsigned types, endianness, and bit widths.[22] Replace operations are handled separately through the Tools view's regex replacer, which applies regular expression-based substitutions to input data or selected regions.[23] For enhanced searching, users can leverage the pattern language to define complex queries beyond basic built-in options.[1] Hashing tools in ImHex facilitate integrity verification and data analysis by computing checksums on selected regions or arbitrary strings using multiple algorithms, including CRC-8/16/32, MD5, SHA-1/224/256/384/512, Adler-32, MurmurHash32/64, and XXHash64.[1] The Hashes view allows instantiation of multiple hashers with custom settings, automatically updating results as data changes, which is particularly useful for comparing file versions or verifying downloads.[24] Bookmarks enable users to annotate and navigate binary data by marking specific offsets or regions with custom names, colors, and comments, which appear as highlights in the hex editor view (visible on hover with Shift).[25] Created via selection and the toolbar or Edit menu, bookmarks support actions like jumping to locations, opening regions in new tabs, and toggling visibility, with lock/unlock options to protect against accidental edits.[25] File metadata is displayed in the Data Information view, providing essential details such as file path, size, creation/access/modification timestamps, and analyzed region boundaries.[26] Type detection uses the libmagic database (downloaded via the Content Store) to identify file formats and MIME types based on byte signatures.[26] Additional analytics include byte distribution histograms, entropy calculations (using Shannon entropy H(X) = -\sum p(x_i) \log_2 p(x_i) per block to detect randomness), and inferences about compression, encryption, or plaintext content from composition metrics like ASCII percentage and uniform byte patterns.[26]Advanced Features
Pattern Language
ImHex's Pattern Language is a domain-specific language (DSL) designed for defining and parsing binary data structures within the hex editor, enabling users to highlight, decode, and analyze file formats with precision.[27] Inspired by the syntax of C++ and Rust, it provides a declarative approach to describe complex binary layouts, allowing for the creation of reusable patterns that automate data interpretation.[27] This language facilitates tasks such as reverse engineering executables, dissecting network protocols, and visualizing embedded multimedia, making it a core tool for binary analysis in ImHex.[27] At its foundation, the Pattern Language supports essential programming constructs to model binary data. Structures (struct) group related fields, arrays (array) handle repetitive sequences, and pointers (pointer) enable referencing data at offsets.[27] Unions (union) allow overlapping interpretations of the same bytes, while conditionals (if/else) and loops (for/while) provide control flow for dynamic parsing based on content.[27] Variables can store intermediate values, supporting calculations and comparisons during evaluation.[27]
The language extends to advanced features for handling intricate formats. Dynamic typing infers types from context, bitfields (bitfield) extract individual bits from integers, and padding (padding) inserts unused bytes to align data.[27] Inheritance mechanisms allow patterns to extend base definitions, promoting modularity in describing hierarchical structures like file headers or protocol layers.[27]
Visualization is integrated directly into the editor, where parsed data can be rendered as images (e.g., pixel maps from bitmap files), audio waveforms (from raw sound data), or graphs (plotting sensor readings).[27] This capability transforms abstract binary streams into intuitive representations, aiding in debugging and exploration.[27]
In practice, users apply patterns to loaded files via the Pattern Editor, triggering automatic decoding upon execution. For instance, a pattern for Portable Executable (PE) files might define sections for headers, imports, and code, overlaying labels and values on the hex view.[27] Similarly, a network packet pattern could parse Ethernet frames, IP headers, and TCP payloads, highlighting fields like source addresses or checksums.[27] These patterns enhance the editor's disassembly tools by providing structural context for code analysis.[27]
Community contributions expand the language's utility through the ImHex-Patterns repository on GitHub, which hosts a collection of predefined patterns for common formats such as ROMs, archives, and media containers.[7] Users can import these directly into ImHex, fostering collaborative development and standardization of binary parsing scripts.[7]
Disassembler and Analysis Tools
ImHex features an integrated disassembler built on the Capstone library, enabling the disassembly of binary code into readable assembly instructions.[1] This tool supports multiple architectures, including x86 (16-bit, 32-bit, and 64-bit variants), ARM (encompassing ARM, Thumb, Cortex-M, and AArch32 modes), ARM64, PowerPC (32-bit and 64-bit), MIPS, RISC-V, and others provided by Capstone.[1] Additionally, users can implement custom disassemblers for proprietary or niche architectures through extensible interfaces.[1] The disassembler view offers practical aids for code exploration, such as syntax highlighting for code sections to distinguish instructions, data, and comments, along with annotations for jumps and calls that mark control flow elements.[1] Cross-references are supported to link definitions and usages of symbols or addresses across the disassembled output, streamlining the tracing of function calls and data dependencies in complex binaries.[1] For statistical analysis, ImHex incorporates YARA rule integration, allowing users to load and apply official YARA rulesets for pattern matching, particularly useful in identifying malware signatures or known vulnerabilities within files.[15] The tool highlights matches directly in the hex view, supporting multiple rule files for comprehensive scanning.[15] Complementary visualization tools include entropy graphs that plot Shannon entropy across data blocks to reveal patterns of randomness, byte distribution histograms displaying frequency counts of individual bytes or digrams on a logarithmic scale, and file magic detection via the libmagic library for automatic format identification using a MIME type database.[26] These features enable quick detection of uniform regions, such as ASCII text or repeated values, versus anomalous areas.[26] The data processor provides a node-based graphical interface for constructing data flows, where users chain operations to filter, transform, decrypt, or visualize binary data before it reaches the main editor.[17] Built-in nodes handle tasks like bitwise manipulations, encoding conversions, and conditional routing, with support for custom nodes to extend functionality.[17] These tools collectively support reverse engineering of binaries by facilitating code disassembly and structural analysis, while entropy and distribution metrics help pinpoint compressed or encrypted sections through indicators of high randomness or non-uniform byte patterns.[26][1]Extensibility
Plugins
ImHex features a modular plugin system that enables users to extend its core capabilities with custom modules for handling new file formats, adding specialized tools, or integrating external functionalities. Plugins are categorized into two primary types: native plugins, which are C++ shared libraries providing full access to ImHex's internals, and script plugins, which are cross-platform C# assemblies offering simpler, version-independent extensions with limited functionality. The native plugin system is built on the libimhex library, a C++ API that provides plugins with full access to ImHex's internal structures, including data views, content registries, and event handling mechanisms. This architecture allows developers to create native shared libraries that dynamically load at runtime, enhancing extensibility without modifying the base application.[28][29] Native plugins are further categorized based on their linkage and licensing requirements: core plugins, which link directly to the GPLv2-licensed ImHex core and must adhere to the same open-source terms, and UI plugins, which link to the LGPLv2.1-licensed libimhex and Fenestra UI library, permitting proprietary or closed-source development. Examples of core plugins include additional disassemblers for niche architectures or importers for specialized binary formats, while UI plugins often focus on interface extensions like custom views or toolbars. This distinction ensures compatibility and legal flexibility, with UI plugins bundled under the /plugins/ui directory in the source repository.[1] Script plugins, in contrast, are loaded via a dedicated script loader and executed on demand. They are suitable for tasks like custom data processors or simple tools and do not require compilation into shared libraries.[28] Installation of plugins is straightforward and supports dynamic loading: compiled .hexplug files for native plugins are placed in the designated plugins directory, which can be located via the application's "Help -> About -> ImHex Directories" menu, while .dll files for script plugins go into<ImHex Folder>/scripts/custom/dotnet/<Plugin Name>. ImHex automatically detects and initializes compatible plugins upon startup, with version-specific compatibility enforced to prevent conflicts. Community contributions are primarily hosted on GitHub, where users can submit pull requests or maintain separate repositories for their extensions.[30][28]
Development of plugins follows guidelines outlined in the official documentation and utilizes dedicated template repositories to streamline setup, including CMake build scripts and GitHub Actions for cross-platform compilation. Developers have access to the full ImHex API for registering new content providers, such as data processors or views, and can bundle resources via the romfs system for embedded assets like icons or configuration files. For native plugins, use the C++ template; for scripts, use the C# template project. Notable plugins include the Extra Hashes Plugin, which adds support for algorithms like Blake, Adler32, Murmur, and Tiger to the built-in hashing tools; the Discord RPC Plugin, enabling rich presence integration for activity tracking; and third-party format parsers like the Pcap Plugin, which handles network packet capture files by stripping headers and providing packet-level analysis. These examples illustrate how plugins facilitate targeted enhancements, such as parsing specific firmware structures or game file binaries through custom importers, fostering a vibrant ecosystem of contributions.[31][32][30][28][33][34][35]
Customization and Theming
ImHex provides extensive theming options to personalize the user interface, with a default dark mode designed for low-light environments and an optional light mode for brighter settings. Custom themes are defined in JSON files that specify colors and styles for UI elements, including hex views, syntax highlighting, and overall interface components, ensuring consistency across the application. These themes can be installed via the built-in content updater from community repositories or manually copied to the themes directory (e.g.,~/.local/share/imhex/themes on Linux/macOS or %LocalAppData%\imhex\themes on Windows). Built-in and community themes include Visual Studio Dark for a familiar coding aesthetic, Solarized Dark for reduced eye strain, multiple Catppuccin variants (Latte, Frappe, Macchiato, Mocha) for pastel palettes, and Retina Dark optimized for high-DPI displays to maintain sharpness without aliasing.[1][36][37]
Interface customization extends to layout and panel management, allowing users to resize panels dynamically and save custom layouts that preserve view positions, sizes, and states. Access these via the Workspace menu, where default presets like "Default" and "Minimal" are available; users can save new layouts, load them to overwrite the current setup, lock them to prevent modifications (toggle via the menu), or remove them by holding Shift while selecting. Detachable windows further enhance flexibility for multi-monitor workflows, while workspaces enable seamless switching between multiple personalized configurations without losing progress. Keyboard shortcuts are fully configurable through the Settings dialog's dedicated section, where users can remap actions like navigation, editing, and tool activation to match preferred key bindings, with support for non-QWERTY layouts.[38][1][39]
Font adjustments prioritize clarity, especially on high-resolution screens, with support for custom TTF or OTF fonts selectable in Settings > Fonts by entering a path or using the file picker—Nerd Fonts are recommended for their glyph coverage in technical displays. Once a custom font is loaded, a slider enables size scaling, which is disabled by default for the built-in bitmap font (Proggy Clean) to avoid blurriness but activates for vector fonts; retina-optimized selections like Retina Dark ensure crisp rendering on Retina or 4K displays, though changes require restarting ImHex. Syntax highlighting in hex views ties into theming, with options to gray out zero bytes, highlight modified data in red, and apply visualizers (e.g., decimals, floats, colors) via dropdowns for contextual emphasis.[37][20][40]
Core settings allow fine-tuning behavior, such as importing custom encodings via File > Import > Custom Encoding to handle specialized character sets in the ASCII column, with an advanced decoding view enabled post-import. Default column counts in the hex editor are set via a slider that auto-resizes to screen width when slid fully left, supporting efficient viewing of large datasets. Auto-save features, configurable in Settings, periodically back up project sessions at user-defined intervals to prevent data loss during extended analysis. Plugin management occurs through an integrated UI in Settings, where users can load, enable, or disable extensions, including those that further customize themes. For accessibility, theme options like high-contrast variants (e.g., via community contributions) aid visibility, while the interface supports smooth navigation of large files through efficient rendering.[20][41][1]
Export customization focuses on flexible output for analysis and sharing, with patches savable directly to files or exported via File > Export in formats like IPS and IPS32 for binary diffs. Data dumps support Base64 encoding, binary arrays tailored to languages (e.g., C++, Python), and Markdown reports for documented findings; selections can also be exported to new tabs or standalone files for isolated inspection. These options integrate with hex view customizations, such as endianness toggles and segment separators, to ensure accurate representation in outputs. Plugins may extend export capabilities for specialized formats.[42][1][20]