Skip to content

Releases: WerWolv/ImHex

Parameter packs, assignment operators and byte inserting

30 Jan 21:30
Compare
Choose a tag to compare

Changelog

Addition

  • Added function for inserting bytes in the middle of files
  • Added custom encoding files to content store
  • ImHex now automatically writes all log output to a file
  • Added menu items to save and load data processors
  • Added support for copying values from the pattern language console
  • Added RISC-V, M68K, M680X, WebAssembly, MOS65XX and BPF architectures to disassembler

Improvements

  • Fixed interface being scaled horribly on MacOS
  • Updated Italian translation. Thanks a lot to @CrustySean
  • Updated Chinese translation. Thanks a lot to @xtexChooser
  • Improved how integer values are displayed in the data inspector
  • Improved loading of custom encoding files
  • Splash screen no longer gets drawn on top of all other windows
  • GoTo and Find text boxes are now automatically focused when the window is opened. Execute GoTo or Find function when pressing enter
  • Patches that have the same value as the original value are now getting removed

Bug Fixes

  • Fixed pasting bytes
  • Fixed Flatpak release not working correctly
  • Fixed ImHex crashing when exiting
  • Fixed many format warnings and security issues
  • Fixed jumping to addresses moving hex editor window to wrong offset
  • Fixed curl SSL verification on MacOS and Linux

Pattern Language

  • Added parameter packs
    • This allows passing an unlimited amount of parameters to a function
  • All built-in functions have now been to the builtin namespace.
    • This means, to use built-in functions you now need to download and use libstd from the content store and include the correct include file
  • Added [[no_unique_address]] attribute
    • Applying this attribute to a variable makes it not increasing the cursor when placing it ​
  • Added ability to assign a value to the dollar operator to change the current cursor
  • Added assignment operators (+=, -=, *=, etc)
  • Added #pragma once directive
  • Added extra math functions (floor, ceil, round, sin, cos, and more)
  • Fixed local variables not respecting their type's size
  • Fixed color overriding for arrays and structs
  • Fixed [[static]] attribute not correctly optimizing the type
  • Fixed continue and break statements not working correctly in structs
  • Fixed highlighting of arrays
  • Fixed endian setting applied to structs not applying it to their members correctly
  • Fixed strings being displayed wrongly
  • Fixed lexing of sizeof and addressof operator

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

`[[format]]` and function argument fixes

12 Jan 08:54
Compare
Choose a tag to compare

Changelog

Improvements

  • Undocked windows now appear in the task bar and the window switching interface
  • Improved the look and feel of the hex editor footer bar

Bug Fixes

  • Fixed default directories not being created correctly when ImHex launches
  • Fixed a crash when closing certain popups such as the about page

Pattern Language

  • Improve the memory usage of patterns a bunch. This is not the end yet though
  • Fixed various crashes related to passing values and variables to functions
  • The [[format]] attribute can now be used correctly on custom types such as structs or enums
  • Limited Pattern Data UI to only display 50 array entries by default.
    • If you want to see more, double click on the last entry
  • Fixed local variables being able to hold larger values than they should be able to

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 fixes

10 Jan 21:51
Compare
Choose a tag to compare

Changelog

Bug Fixes

  • Fixed passing structs and arrays to custom functions causing their address to be invalid
  • Fixed [[pointer_base]] attribute placing value at invalid addresses
  • Fixed settings screen being way too big
  • Fixed occasional crash when disassembling files

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

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