Skip to content

holly-hacker/dnSpy.Extension.HoLLy

Repository files navigation

dnSpy.Extension.HoLLy

A dnSpyEx extension to aid reversing of obfuscated assemblies.

Features

  • 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.
    • This can be accessed through the decompiler language dropdown in the menu bar.
  • 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

Other extensions

I have developed some other extensions which are linked here for convenience:

Installation

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.

Developing

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.

License

Due to dnSpy being licensed under the GPLv3 license, this plugin is too.

Used libraries