A dnSpyEx extension to aid reversing of obfuscated assemblies.
- Change the displayed symbol name of types, methods, properties or fields, without modifying the binary. These modified names are saved in an xml file, meaning you can write a tool to generate them automatically.
- Please keep in mind that this works in a relatively hacky way, and it can't be seen as a perfect replacement for manually renaming symbols. See current issues for limitations.
- Inject managed (.NET) DLLs into the debugged process. The injected DLL must have a method with signature
static int Method(string argument)
. .NET Core and Unity x64 are not yet supported. - Disassemble native functions
- Show control flow graphs for both managed and native functions
- Underline managed assemblies in the treeview.
- Several commands to help with extension development in debug mode
I have developed some other extensions which are linked here for convenience:
Download the latest release for your dnSpyEx version (net48
or net6.0-windows
) and extract it to the bin/Extensions/dnSpy.Extensions.HoLLy
directory. You may need to create this folder.
Make sure that you copied all the dependency DLLs too. Your directory structure will look something like this:
dnSpy-net-win64/
├─ dnSpy.exe
├─ dnSpy.Console.exe
└─ bin/
├─ Extensions/
│ └─ dnSpy.Extension.HoLLy/
│ ├─ AutomaticGraphLayout.dll
│ ├─ dnSpy.Extension.HoLLy.x.dll
│ ├─ Echo.Core.dll
│ └─ ...
├─ LicenseInfo/
├─ FileLists/
├─ Themes/
├─ dnSpy.Analyzer.x.dll
├─ dnSpy.Contracts.Debugger.dll
└─ ...
Also make sure that you are using the correct version of dnSpy that matches the plugin! This should be mentioned in the release notes or the changelog. The plugin will not work with certain mismatched versions due to strong-name signing of some dependencies.
To test the extension, you can launch dnSpy with the --extension-directory {directory}
argument, where {directory}
is the build directory (ie. .../bin/Debug/netcoreapp3.1
).
JetBrains Rider supports launch profiles, allowing you to specify dnSpy as the executable to start. This means you can launch and debug the extension from within the IDE.
Due to how the .NET Framework does assembly resolving, this method may only work on .NET Core.
Due to dnSpy being licensed under the GPLv3 license, this plugin is too.
- dnSpyEx and its dependencies, licensed under the GPLv3 license and others
- iced, licensed under the MIT license
- dnlib, licensed under the MIT license
- Echo, licensed under the LGPLv3 license
- Microsoft Automatic Graph Layout, licensed under the MIT license