Are there any tools available to take an already compiled .dll or .exe file that you know was compiled from C# or Visual Basic and obtain the original source code from it?
-
1ILSpy is probably the best choice (IMHO)– jyzMar 20, 2013 at 18:15
-
1Because decompiling .net is very easy most .net code is protected or obfuscated. So in order to use any of the tools suggested in the answer you must remove this protection (if present) first.– RemkoMar 20, 2013 at 19:38
8 Answers
ILSpy is a great open-source decompiler.
ILSpy Features
- Assembly browsing
- IL Disassembly
- Support C# 5.0 "async"
- Decompilation to C#
- Supports lambdas and 'yield return'
- Shows XML documentation
- Decompilation to VB
- Saving of resources
- Save decompiled assembly as .csproj
- Search for types/methods/properties (substring)
- Hyperlink-based type/method/property navigation
- Base/Derived types navigation
- Navigation history
- BAML to XAML decompiler
- Save Assembly as C# Project
- Find usage of field/method
- Extensible via plugins (MEF)
- Assembly Lists
-
1
I've used JetBrains dotPeek (free of charge) before with some success.
Any JetBrains software I've ever used has been very solid.
It is not quite the 'original source' but it is very readable C# - about the closest thing I would expect to get. Quote from their website:
What's Cool about dotPeek?
- Decompiling .NET 1.0-4.5 assemblies to C#
- Support for .
dll
,.exe
,.zip
,.vsix
,.nupkg
, and.winmd
files- Quick jump to a type, assembly, symbol, or type member
- Effortless navigation to symbol declarations, implementations, derived and base symbols, and more
- Accurate search for symbol usage with advanced presentation of search results
- Overview of inheritance chains
- Support for downloading code from source servers
- Syntax highlighting
- Complete keyboard support
- dotPeek is free!
The last point is free as in free beer, not as in free speech.
Recently I've been using dnSpy [forked from ILSpy by the creator(s) of de4dot] as my main tool for the decompiling and live debugging of .NET code
https://github.com/0xd4d/dnSpy
Main difference from ILSpy :
- Uses dnLib to read assemblies (vs ILSpy's Mono.Cecil)
https://github.com/0xd4d/dnlib
dnlib was created because de4dot needed a robust .NET assembly library that could handle all types of obfuscated assemblies. de4dot used to use Mono.Cecil but since Mono.Cecil can't handle obfuscated assemblies, doesn't fully support mixed mode assemblies, doesn't read .NET assemblies the same way the CLR does and many other missing features de4dot needed, dnlib was a necessity. The API is similar because it made porting de4dot to dnlib a lot easier.
-
-
This is my first answer, is linking to an external discussion appropriate? : reddit.com/r/ReverseEngineering/comments/3jau4m/… ... I will also summarize above.– KalibrDec 3, 2015 at 23:59
-
I can vouch for dnSpy, it think its better than any other similar .NET tool out there. It can even debug the process. Feb 11, 2016 at 16:38
-
I can really recommend this one. It is the only free tool I found that supports debugging of assembly.– bennofsJun 5, 2016 at 21:33
-
There is a free tool available called JustDecompile which does that.
Some features:
- Creating a Visual Studio project from an assembly in order to export lost projects or obtain multiple classes without the need to copy and paste code. At present, JustDecompile is able to export decompiled code only to C#.
- Exporting code directly from the command prompt
- Quickly loading core .NET assemblies (.NET 2, .NET3.5, .NET 4, .NET 4.5, WinRT Metadata and Silverlight)
- Directly editing assemblies loaded into the program
-
JustDecompile has a De4Dot Deobfuscator plugin that will help with obfuscated exe Aug 24, 2017 at 21:18
I have used .NET Reflector (Note: Commercial, but trial available) several times and quite like it:
http://www.red-gate.com/products/dotnet-development/reflector/
-
7Some examples of use cases would be a good addition to this answer. Currently, it is too vague to be of much use besides offering a tool and its website. Giving some real use examples helps define the product a little better. Mar 20, 2013 at 17:09
If you are interested into a decompiler on API level: https://code.google.com/p/facile-api/ (in Java though)
-
-
-
I am expecting to add ".NET support" feature to this Disassembler app (github.com/KYHSGeekCode/Android-Disassembler). :) Dec 31, 2018 at 11:30
-
I would second the answer about ILSPY as being a really great.net decompiler. Also, checkout de4dot for deobfuscation. This is a cool writeup of it in action. http://blogs.cisco.com/security/talos/reversing-multilayer-net-malware
Compiled visual basic can be a different and painful animal. http://vrt-blog.snort.org/2014/08/discovering-dynamically-loaded-api-in.html?m=1
-
1
-
.NET assemblies (.exe and .dll) can be decompiled online at Decompiler.com
The author is affiliated with the mentioned website it appears (username: www.Decompiler.com).
-
"Post good, relevant answers, and if some (but not all) happen to be about your product or website, that’s okay. However, you must disclose your affiliation in your answers." Sep 21, 2020 at 5:52
-
@PawełŁukasik given the username, I think that qualifies as disclosure, no? But I'll also add a note, in case the username ever changes 😉 ... but I do find the answer lacking. I'll ask the other mods to have a look and ask their advice. I feel a downvote is enough, though.– 0xC0000022L ♦Sep 28, 2020 at 19:45
-
@0xC0000022L I like things to be explicit, but agree it might have been enough. Thx for the edit anyway. Sep 29, 2020 at 6:21