Skip to content

Releases: WerWolv/ImHex

Environment values, in/out variables and improvements

09 Jan 21:31
Compare
Choose a tag to compare

Changelog

Additions

  • Added global progress bar to show currently running tasks
    • This shows all currently running background tasks in one places
    • With this, also a bunch of things that previously were running synchronously have now been made asynchronous.
  • Added link to Discord server to Welcome screen
  • If another ImHex instance is already open on Windows, new files are now automatically opened in that current instance.
    • It's still possible to have multiple instances running. Just open a new instance without opening a file through it.
  • Added ability to clear the recent files list. Thanks to @draftshade

Pattern Language

  • Added a Environment Variables tab to pattern editor view
    • Environment variables let you specify a value (string, boolean, integer or float). These values can then be accessed again through the use of std::env.
  • Added in/out variables
    • in variables work similar to properties found in e.g Unity. They automatically add an entry with their name to the UI and can be set to some value through the UI. The value will be applied before running the pattern.
    • out variables work the same but simply display whatever value has been assigned to them once the pattern is done running.
  • Dangerous functions such as file IO or HTTP request functions are now gated behind a user confirmation dialog.
    • The first time such a function gets called in the current session, a popup will show up asking the user to confirm or deny running the pattern. The user can then either allow all dangerous function for this session or deny it in which case the popup will show up again the next time the function is called. When denying, execution of the current pattern is aborted.
  • Added break and continue statements
    • These can be used inside of for and while loops but also inside of structs. When an array is created and a break statement is hit, the array will stop growing and keep its current size. When a continue statement is hit, the current entry will be skipped but the array continues to grow until it reaches the end.

Improvements

  • Added better timeouts for all curl code.
    • If you don't have an internet connection, ImHex will no longer try to check for updates for ages
  • The diff view line spacing is now is the same as the one in the main hex editor view
  • Improved how shortcuts are handled within ImHex

Bug Fixes

  • Fixed opening files as read-only if user doesn't have write permissions
  • Fixed Windows TTY COM Port view
  • Fixed restarting of ImHex on Linux Thanks to @qxxxb
  • Fixed saving files
  • Fixed reading data from huge files
  • Fixed pattern language [[color]] attribute not working for arrays and structs
  • Fixed IPS patches import and export

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

Crash and build fixes

16 Dec 18:11
Compare
Choose a tag to compare

Changelog

Improvements

  • Capstone is now bundled with ImHex directly to work around issues with Ubuntu

Bug Fixes

  • Fixed AppImages
  • Fixed opening zero-sized files
  • Fixed crashes when having yara installed on Linux
  • Fixed yara rule matching yielding invalid addresses
  • Fixed loading a project file crashes ImHex

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

GDB and Raw disk provider

13 Dec 22:50
Compare
Choose a tag to compare

Changelog

Additions

  • Added GDB Server data provider
    • This allows accessing memory data from running processes, microcontrollers and many other things. ImHex can attach to any running GDB Server over the network
  • Added Raw Disk data provider
    • This allows accessing raw disk images or partitions of devices connected to your computer
  • Pattern Language: Added std::env function and a configuration menu for it
    • This lets you query strings, integers, bools and floats from a list and use them within the script making configuring patterns much easier.
  • Added "File -> Save Pattern..." option to save the current pattern language code

Improvements

  • Added selection size in hexadecimal to hex editor view
  • Redid data provider reading and writing. This should fix many issues with non-zero base addresses or large files with multiple pages
  • ImHex now uses the native API to open websites so the command line window doesn't pop up every time you're clicking on a link
  • Improved about and settings page
  • Added icon to footer when ImHex is being run with Administrator or root permissions

Bug Fixes

  • Pattern Language: Fixed variable access inside of pointer pattern yielding invalid results
  • Pattern Language: Fixed indexing of static arrays
  • Fixed bookmark colors not being saved into projects
  • Fixed flickering of the window on Windows if it was full screen
  • Fixed window border and shadow rendering on Windows more consistent with other windows
  • Fixed cursor not changing to the right resize arrow in the window corners

Rendering issues

If you're on Windows and you're experiencing any rendering or your Computer's or VM's GPU doesn't support OpenGL, download the opengl32.dll file from the releases below and drop it next to the ImHex application. This will cause the entire UI to be software rendered which will be much heavier on your CPU but may allow you to use ImHex at least.

Plugin Development

If you'd like to build a plugin for ImHex, you can do so now easily using the C++ and Rust plugin templates found here:


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

New release packages, many small improvements

04 Dec 22:36
Compare
Choose a tag to compare

Changelog

Additions

  • Added new .deb packages
  • Added new AppImage packages. Thanks to @wardwouts
  • Added number of found strings to string finder view. Thanks to @qdlmcfresh

Improvements

  • Improved scaling and font rendering on MacOS. Thanks to @DavidBuchanan314
  • ImHex now automatically compiles all magic source files when analyzing a file

Bug Fixes

  • Fixed libimhex not being included in any Linux builds
  • Fixed diffing view not correctly scrolling all the way down
  • Fixed pattern language variable casting incrementing cursor
  • Fixed crash when ImHex takes longer than 200ms to draw a frame. Thanks to @wardwouts

Rendering issues

If you're on Windows and you're experiencing any rendering or your Computer's or VM's GPU doesn't support OpenGL, download the opengl32.dll file from the releases below and drop it next to the ImHex application. This will cause the entire UI to be software rendered which will be much heavier on your CPU but may allow you to use ImHex at least.

Plugin Development

If you'd like to build a plugin for ImHex, you can do so now easily using the C++ and Rust plugin templates found here:


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

ImHex is no longer completely unusable everywhere

28 Nov 20:52
Compare
Choose a tag to compare

Documentation

A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!

Changelog

Bug Fixes

  • Fixed window being undecorated on all platforms while it should only be undecorated on Windows.
    • This caused the window to be unmovable and unresizable on platforms other than Windows
  • Fixed crash on Windows when launching ImHex without a terminal window on Windows

I am so sorry for this mess...


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

MacOS support is back, Rust plugins and many many pattern language improvements

28 Nov 13:51
Compare
Choose a tag to compare

Documentation

A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!

Changelog

Additions

  • Added back MacOS support! Huge thanks to @Kuruyia for taking the time to fix it!
  • Added basic support to create plugins using Rust instead of C++! Huge thanks to @jam1garner
  • Added border around byte selection to make it more visible with other things highlighted
  • Put maximum FPS limit to 200, added "Unlocked" option
  • Variable names are now displayed when matching yara rules
  • Added regex searching to string finder view. Thanks to @qdlmcfresh

Pattern Language

  • Added button to stop evaluation prematurely
  • Added main function support. If a function called main exists, it will automatically be called after all other things have been evaluated.
  • Added global variables
  • Allow functions to be called inside structs
  • Added for loops
  • Variables declared in global scope can now be accessed inside custom types.
  • Added padding expressions in bitfields
  • Limited maximum number of patterns that can be created. Can be overridden using the pattern_limit pragma.
  • Allow str types to be used inside function bodies
  • Allow pointer endianess to be changed

Standard Library

  • Added basic file io built-in functions

Improvements

  • Improved the command palette
  • Limited numbers of characters being displayed in parsed strings
  • [[name]] attribute no longer changes the variable name but only the name displayed in the pattern data view
  • The pattern code editor now automatically closes (, {, [, " and '

Bug fixes

  • Fixed titlebar and cursor being misaligned on some computers
  • Fixed nothing being printed to console in release mode, even when console is open
  • Fixed multi variable declarations sometimes causing crashes
  • Fixed endian pragma not working
  • Fixed issue where signed integers weren't correctly sign extended
  • Fixed null bytes being included in read strings
  • Fixed Project file load and save not working correctly
  • Fixed incorrect offsets being accessed when passing custom types to functions
  • Fixed color attribute taking a color value in BGR instead in RGB format
  • Fixed not all include paths being searched correctly
  • Fixed CRC and hash calculations not working properly in all cases. Thanks to @raron for fixing them and writing many unit tests to prevent issues like this in the future
  • Fixed bookmarks closing when changing their name
  • Fixed ImHex crashing after splash screen if no plugins have been loaded
  • Fixed syntax error in code generated "Copy as Rust array" option. Thanks to @paoda
  • Fixed string pattern causing crashes when they are empty

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

Pattern language standard library, file tools and improvements

30 Sep 11:02
Compare
Choose a tag to compare

Documentation

A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!

Changelog

Additions

  • Added File Utils
    • File Shredder: Safely deletes files
    • File splitter: Splits a file into multiple smaller files of a given size
    • File combiner: Combines multiple smaller files into a single one
  • Added custom font size setting
    • As this only works for custom fonts, the option is available only by manually editing the hex.builtin.setting.interface.font_size setting in the config file
  • Added support for include files in Yara Rules
  • Pattern Files dropped onto ImHex are now automatically opened in the pattern editor
  • Yara rules and magic databases dropped onto ImHex are now copied to their respective folder

Pattern Language

  • Added the auto datatype for functions to accept any variable type
  • Added inheritance for structs
  • Moved all std::str functions to std::string since they were not accessible anymore
  • Comments (//, /* */) and preprocessor directives are now ignored inside strings
  • Added [[inline]] attribute to allow struct, union and array members to be displayed without adding deeper nesting
  • Added [[transform]] attribute to allow modifying the a value before it's being accessed through the dot syntax
  • Added [[pointer_base]] attribute to allow making pointers relative from different regions of the file or to calculate a custom offset
  • Fixed unary expressions behaving wrong in parenthesis
  • Fixed boolean mathematical expressions and cast syntax
  • Fixed std::string::substr
  • Fixed enum entry scope resolution
  • Fixed accessing strings as rvalues
  • Fixed pointer offset calculation
  • Fixed recursive types
  • Respect endianess when accessing rvalues
  • Fixed member access inside of an if body

Standard Library

  • The pattern language now has a proper standard library
  • Added std::http allowing HTTP GET requests from the pattern language
  • Added std::bit for common bit operatons
  • Added C Types files containing C/C++ type definitions (uint32_t, float64_t, etc)
  • Added Rust Types files containing Rust type definitions (i32, f64, etc)
  • Added std::ctype to inspect ASCII character traits
  • Added std::fxpt with fixed point number conversion and arithmetic
  • Added std::limits with minimal and maximal values for different data types
  • Added std::math with common math functions
  • Added std::ptr with helper functions for the [[pointer_base]] attribute
  • Added additional std::string functions. (std::string::parse_int, std::string::to_string, std::string::contains and more)

Improvements

  • Improved automatic pattern loading based on the MIME type of the currently loaded data
    • This can be turned off in the settings
  • Improved Hex editor Find and Goto popup

Bug fixes

  • Fixed a major memory leak with Yara Rules
  • Fixed new update available popup appearing, even on latest version
  • Fixed "File -> Close" option crashing
  • Fixed "Open File" shortcut not working

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

Evaluator rewrite, diffing view and more

22 Sep 00:43
Compare
Choose a tag to compare

Documentation

A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!

Changelog

Additions

  • Added support for loading multiple files/data sources simultaneously
  • Added Binary Diffing view
  • Added Quit ImHex option to File menu
  • Added Follow system theme option
  • Added Chinese (Simplified) Localization. Many thanks to @xtexChooser

Pattern Language

  • Rewrote entire evaluation engine
    • Made Evaluator a lot simpler and faster
    • Function parameters now require a type definition
    • Strings may now be passed to functions using the str type
    • Added check to prevent huge arrays from being generated (can be overridden with a pragma)
    • Added cast expression
    • Added std::format
      • It and std::print now use libfmt / C++'s std::format syntax
    • Allow passing variables of custom types to functions
    • Added multi-variable declaration for functions
    • Many more under-the-hood changess
  • [[format]] attribute to override the way values are displayed
  • Added Unit tests
    • This will hopefully help with things breaking in the pattern language randomly
  • Unnecessary semicolons are now ignored
  • Added std::mem::read_string built-in function

Improvements

  • **On Windows, resources are now placed in the AppData folder in addition to next to the executable``
  • Fixed format-security warnings. Thanks to @russkel
  • Moved all Hex Editor settings to the settings menu
  • Restructured the settings menu into multiple tabs
  • Fixed footer items jumping around a lot when updating
  • Removed View suffix from all View names in the Views menu. Thanks to @xtexChooser
  • Fixed pattern language evaluator "lagging" behind when Automatic evaluation is active

Bug fixes

  • Fixed settings not being initialized correctly sometimes and causing crashes
    • No more crashes when settings have been set to invalid values
  • Fixed recent files not updating properly
  • Fixed Resize File option crashing
  • Fixed crash when creating arrays with negative size.
  • Fixed parent keyword not working correctly
  • Fixed constants store page not getting cleared correctly on reload
  • Fixed feedback button URL
  • Fixed padding not working correctly
  • Fixed enums not counting properly
  • Fixed bitfields not respecting endian setting
  • Fixed language selection combo box crashing in some circumstances
  • Fixed settings menu closing when changing language
  • Fixed Regex replacer tool
  • Fixed TTY console crashing if no COM ports are available. Thanks to @xtexChooser


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

Pattern language functions, namespaces, optimizations and new views

10 Sep 15:21
Compare
Choose a tag to compare

Documentation

A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!

Changelog

First of all, there has been made some adjustments to the distributed binaries:

  • Windows releases are now distributed as an installer and a portable version
  • Linux releases are now distributed as a flatpak file and a portable version
    • Thanks to @Calinou for the initial work on this
  • MacOS support has been dropped because it's impossible for me currently to get it working correctly
    • The reason for this is that I have no access to a Mac and development is just frustrating for me
    • The previous release was already horribly broken because of that
    • If anybody would like to help fix ImHex on MacOS, PRs are highly appreciated.

For people that rather like to build ImHex themselves, there's now a Dockerfile present in the /dist folder of this repository

Additions

  • Added a TTY console view (Windows only)
  • CTRL + A now selects all bytes in the hex view
  • Added default polynomials to CRC16 and CRC32 initially
  • Added CPU usage to footer (Windows only)
  • Added a new view for looking up common constants
  • Added Create new File option
  • Added Resize file option
  • Added a UNIX permissions calculator tool
  • Added a minimap to the data processor nodes editor
  • Added crash detection and emergency backups
    • If ImHex crashes now, an automatic backup will be created and you will be asked if you want to restore it the next time you open ImHex.
  • Got rid of the window border and title bar on Windows and instead use a custom one
  • Added a toolbar with buttons
  • Added proper interface scaling settings
  • Added tips of the day popup at launch
    • This can be disabled from the popup or in the settings
  • Added a tool to quickly upload files to https://anonfiles.com
  • Added a tool to get short definitions of terms from Wikipedia
  • Added half floats (16 bit floating point numbers) to data inspector
  • Added UTF-8 strings to data inspector
  • Added a built-in download "store" for patterns, libraries, magics and constant databases

Pattern Language

  • Added while statements for array definitions
  • Added [[hidden]] attribute to hide a variable from the pattern data view
  • Fixed the parent keyword not working properly
  • Added ability to declare custom functions
  • Allow fields in bitfields to be accessed like struct members
  • Added support for namespaces
  • Added support for declaring multiple variables on the same line
    • e.g u32 x, y, z;
  • Moved all built-in functions to the std namespace
    • Most functions also got renamed to use snake_case instead
  • Fixed endianess setting not applying to char16s
  • Added full unicode support by default
    • ImHex now loads unifont on launch
  • Optimize arrays of built-in types
    • This causes e.g huge byte arrays to not take up nearly as much memory anymore
    • The same optimization can be applied to custom structs by marking them with the new [[static]] attribute, however this only works correctly if the layout of the struct is actually static.

Improvements

  • ImHex now reduces its framerate if there's no events to be processed and doesn't render at all anymore when minimized.
  • Allow ImHex to redraw the screen when resizing for a much smoother experience
  • Added a nice banner to the welcome screen
  • Splash screen, banner and certificates are now embedded into the executable instead of needing to be in the right folder
  • ImHex now makes sure that saved project files always have the .hexproj extension. Thanks to @jam1garner
  • Added a bunch of icons to the welcome screen
  • The splash screen is now DPI aware
  • ImHex now more reliably detects when a file has been modified
  • Floats in the data inspector are now displayed in decimal form if they are reasonably close to 0.0 and in scientific notation otherwise. Thanks to @jam1garner
  • Drastically improved how bookmarks are displaying bytes
  • Added buttons to calculator tool
  • Reduced build times of ImHex quite a bit
  • Massively improved string search memory usage
  • ImHex now searches in the exeutable folder for plugins and resources again on Linux as well as in the system directories

Bug fixes

  • Fixed advanced decoding separator in the hex view not respecting horizontal scrolling
  • Fixed various issues related to plugin loading
  • Fixed keyboard shortcuts not working
  • ImHex no longer crashes on every exit

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

Crash fixes and QoL changes

24 May 17:23
Compare
Choose a tag to compare

Changelog

Additions

  • Added a list of all paths used by ImHex to the about page to allow locating them easily on platforms with non-default settings

Improvements

  • Improve confusing "Quit application" popup text
  • Allow using of system libraries during build instead of the bundled ones. Thanks a lot to @Mailaender
  • Selecting the "Match Selection" checkbox now correctly updates the current region in the Hash and Disassembler view
  • Display correct offsets in hex editor header when base address is not aligned to the number of columns
  • The disassembler now always disassembles all selected bytes and inserts .byte "instructions" when a opcode couldn't be decoded.

Bug fixes

  • Fix crashes when ImHex is installed in a privileged location (e.g C:/Program Files) and is not launched as Administrator
  • Fix git commit hash and branch not being displayed properly in Release builds
  • Fix broken header text in About popup
  • Fix published name of ImHex to show as "Humanity" in Window's Program and Features window

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