EXE Decompiler

EXE Decompiler Online

Decompile .NET EXE files back to a C# project. Native EXE files are inspected for architecture, imports, exports and resources.

.exe
Drop your EXE file here

⚠ Drag-and-drop upload could not load — an ad blocker is most likely blocking it. Please disable your ad blocker and reload the page to upload a file.

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.

How It Works

1

Upload

Drag and drop your .exe file or click to browse.

2

Decompile

CIL bytecode is converted back to C# source code.

3

Browse

Explore the decompiled C# project structure online.

What is an EXE File?

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.

How .NET EXE Decompilation Works

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:

.NET EXE vs Native EXE

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.

What You Get From a Native EXE

Every Windows executable is read for the information its own structure carries, whether or not it is a .NET assembly:

An 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.

Packed Executables

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.

Is the EXE a Packaged Python App?

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.

Obfuscated .NET Executables

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.

Frequently Asked Questions

Can I decompile any EXE file?

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.

My EXE is packed with UPX. Will that work?

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.

How does EXE decompilation work?

This tool reads CIL bytecode from .NET assemblies and reconstructs high-level C# source code with proper type inference and language feature detection.

How do I know if my EXE is a .NET application?

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.

Will obfuscated EXE files decompile correctly?

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.