Nimfilt is a collection of modules and scripts to help with analyzing Nim binaries. It started out as a CLI demangling tool inspired by c++filt
.
It evolved into a larger set of tools for analyzing Nim, but the original name stuck.
nimfilt.py
: a Python module that implements demangling for Nim. It can also be run as basic CLI tool.id_nim_binary.yar
: a set of YARA rules to identify Nim ELF and PE binaries.nimimfilt_ida.py
: Nimfilt for IDA, an IDApython script to help reverse-engineers handle Nim binaries.Nim is compiled to another language (usually C/C++) before being compiled to a native executable. It also doesn’t include a large runtime.
However, the process still leaves some Nim-specific artefacts and specificites in in the produced binary.
For one, method and module names are mangled using, Nim’s own name scheme which is distinct from C++’s.
This scheme isn’t documented so I relied on the source code of the Nim compiler.
Most of this name mangling in implemented in compiler/msgs.nim
and compiler/ccgtypes.nim
.
The IDAPython script can be run as a one-off or installed as a plugin.
If running as a script, simply launch it from the Nimfilt project directory. It is recommended to do so after auto-analysis has completed and you’ve loaded any additional FLIRT signatures.
Add <nimfilt_project_dir>/nimfilt_ida.py
to your your plugins.list
as per their instruction on installing plugins.
nimfilt.py
to a directory that is included in your IDAPython’s PYTHONPATH
(commonly <IDA_install_dir>/python/
or %APPDATA%/Hex-Rays/IDA Pro/python/3/
).nimfilt_ida.py
to your IDAPython plugin directory (usually <IDA_install_dir>/plugins/
)*Note: The current version of Nimfilt for IDA only supports one command which runs all analyses. *
Navigate to Edit -> Plugins -> Nimfilt and click on it.
You can set Nimfilt to automatically execute when a loaded file is recognized as a Nim binary. To do so, set the AUTO_RUN
global variable to True
in nimfilt_ida.py
Current features include:
Introduction to the Model Context Protocol (MCP) The Model Context Protocol (MCP) is an open…
While file extensions in Linux are optional and often misleading, the file command helps decode what a…
The touch command is one of the quickest ways to create new empty files or update timestamps…
Handling large numbers of files is routine for Linux users, and that’s where the find command shines.…
Managing files and directories is foundational for Linux workflows, and the mv (“move”) command makes it easy…
Creating directories is one of the earliest skills you'll use on a Linux system. The mkdir (make…