Decompile .NET EXE files back to a C# project. Native EXE files are inspected for architecture, imports, exports and resources.
For Windows app distributions, use the MSIX package viewer or APPX extractor to inspect bundles, manifests and supported managed assemblies.
To extract packaged application files, use the Inno Setup extractor, MSI extractor, CAB file extractor, NSIS extractor or 7-Zip SFX extractor.
Drag and drop your .exe file or click to browse.
CIL bytecode is converted back to C# source code.
Explore the decompiled C# project structure online.
EXE (Executable) is the standard file format for programs on Windows. There are two main categories of EXE files: native executables compiled from languages like C and C++, and managed executables built with .NET languages like C#, VB.NET, and F#.
This tool focuses on .NET executables. Unlike native code that compiles to machine instructions, .NET code compiles to CIL (Common Intermediate Language) — a platform-independent bytecode that runs on the .NET runtime. Because CIL retains rich type information, method signatures, and metadata, it can be decompiled back to high-quality source code.
When a .NET application is built, the compiler (csc for C#, vbc for VB.NET) produces CIL bytecode rather than native machine code. This bytecode is stored in a PE (Portable Executable) file along with extensive metadata including type definitions, method signatures, and assembly references.
The decompiler reads this CIL bytecode and metadata, then reconstructs high-level source code. It can recognize and reconstruct complex language features:
It is important to understand the distinction between .NET and native executables:
Uploading a native EXE no longer produces an empty result. The .NET decompiler is skipped — the absence of a CLR directory in the PE header says there is no CIL to read — and the file is inspected structurally instead. That is metadata and resource extraction, not source recovery, and the result says so.
Every Windows executable is read for the information its own structure carries, whether or not it is a .NET assembly:
.ico files, bitmaps, the application manifest as XML, decoded string tables, and every other resource blob with its id and languageAn Authenticode certificate table is reported as present or absent. That is not a signature check: nothing is hashed and no certificate chain is built.
None of this is decompiled source. A binary compiled from C, C++, Delphi or Rust keeps no type or method metadata, which is exactly what makes C# recovery possible for .NET; reading its machine code is a job for a disassembler such as Ghidra or IDA.
A UPX-packed program has its real sections compressed into one blob, so a packed upload appears to import almost nothing. When the file is confirmed packed — by running UPX itself, not by trusting UPX0 section names, which anything can write — it is expanded to a separate copy and that copy is classified again. If what is underneath is a .NET assembly, a PyInstaller launcher or a Godot game, it reaches the decompiler for that format; otherwise it gets its own structural report. The uploaded file is never modified and neither the packed nor the unpacked program is ever run. Modified UPX builds and commercial protectors are out of scope.
PyInstaller and py2exe applications are native launchers around Python bytecode, not .NET assemblies. They are detected before the C# decompiler and routed to the PyInstaller and py2exe decompiler, which extracts their .pyc modules and recovers Python source where the bytecode version is supported.
Many commercial .NET applications use obfuscators (like Dotfuscator, ConfuserEx, or SmartAssembly) to make decompilation harder. Common obfuscation techniques include renaming identifiers to meaningless characters, encrypting string literals, injecting anti-tamper checks, and adding control flow obfuscation.
Even with obfuscation, the underlying CIL bytecode must remain valid for the .NET runtime to execute it. This means the code structure is always recoverable — just harder to read. The decompiler will produce valid but obfuscated-looking source code.
This tool decompiles .NET executables (built with C#, VB.NET, or F#). Native Win32 executables compiled from C or C++ cannot be decompiled to high-level source code — they can only be disassembled to assembly language. Upload one anyway and you get its architecture, sections, imports, exports, version information and extracted resources instead of an empty result.
Yes, for standard UPX. The file is confirmed packed by running UPX itself, expanded to a separate copy, and the copy is classified again — so a .NET assembly or a PyInstaller launcher hidden under the packing reaches its own decompiler. Your uploaded file is left unchanged and nothing is executed. Modified UPX builds, commercial protectors and crypters are not supported.
This tool reads CIL bytecode from .NET assemblies and reconstructs high-level C# source code with proper type inference and language feature detection.
Most .NET executables are relatively small and require the .NET Framework or .NET runtime. You can check by looking for the .NET metadata header, or simply upload it — if it is a .NET assembly, it will be decompiled successfully.
Obfuscated .NET assemblies can still be decompiled, but the output will have renamed identifiers, string encryption, and control flow obfuscation. The structure and logic are still recoverable.