With a debugger you can step through the program assembly interactively.
With a disassembler, you can view the program assembly in more detail.
With a decompiler, you can turn a program back into partial source code, assuming you know what it was written in (which you can find out with free tools such as PEiD - if the program is packed, you'll have to unpack it first OR Detect-it-Easy if you can't find PEiD anywhere. DIE has a strong developer community on github currently).

Debuggers:

  • OllyDbg, free, a fine 32-bit debugger, for which you can find numerous user-made plugins and scripts to make it all the more useful.
  • WinDbg, free, a quite capable debugger by Microsoft. WinDbg is especially useful for looking at the Windows internals, since it knows more about the data structures than other debuggers.
  • SoftICE, SICE to friends. Commercial and development stopped in 2006. SoftICE is kind of a hardcore tool that runs beneath the operating system (and halts the whole system when invoked). SoftICE is still used by many professionals, although might be hard to obtain and might not work on some hardware (or software - namely, it will not work on Vista or NVIDIA gfx cards).

Disassemblers:

  • IDA Pro(commercial) - top of the line disassembler/debugger. Used by most professionals, like malware analysts etc. Costs quite a few bucks though (there exists free version, but it is quite quite limited)
  • W32Dasm(free) - a bit dated but gets the job done. I believe W32Dasm is abandonware these days, and there are numerous user-created hacks to add some very useful functionality. You'll have to look around to find the best version.

Decompilers:

  • Visual Basic: VB Decompiler, commercial, produces somewhat identifiable bytecode.
  • Delphi: DeDe, free, produces good quality source code.
  • C: HexRays, commercial, a plugin for IDA Pro by the same company. Produces great results but costs a big buck, and won't be sold to just anyone (or so I hear).
  • .NET(C#): dotPeek, free, decompiles .NET 1.0-4.5 assemblies to C#. Support for .dll, .exe, .zip, .vsix, .nupkg, and .winmd files.

Some related tools that might come handy in whatever it is you're doing are resource editors such as ResourceHacker (free) and a good hex editor such as Hex Workshop (commercial).

Additionally, if you are doing malware analysis (or use SICE), I wholeheartedly suggest running everything inside a virtual machine, namely VMware Workstation. In the case of SICE, it will protect your actual system from BSODs, and in the case of malware, it will protect your actual system from the target program. You can read about malware analysis with VMware here.

Personally, I roll with Olly, WinDbg & W32Dasm, and some smaller utility tools.

Also, remember that disassembling or even debugging other people's software is usually against the EULA in the very least :)

Top answer
1 of 16
619

With a debugger you can step through the program assembly interactively.
With a disassembler, you can view the program assembly in more detail.
With a decompiler, you can turn a program back into partial source code, assuming you know what it was written in (which you can find out with free tools such as PEiD - if the program is packed, you'll have to unpack it first OR Detect-it-Easy if you can't find PEiD anywhere. DIE has a strong developer community on github currently).

Debuggers:

  • OllyDbg, free, a fine 32-bit debugger, for which you can find numerous user-made plugins and scripts to make it all the more useful.
  • WinDbg, free, a quite capable debugger by Microsoft. WinDbg is especially useful for looking at the Windows internals, since it knows more about the data structures than other debuggers.
  • SoftICE, SICE to friends. Commercial and development stopped in 2006. SoftICE is kind of a hardcore tool that runs beneath the operating system (and halts the whole system when invoked). SoftICE is still used by many professionals, although might be hard to obtain and might not work on some hardware (or software - namely, it will not work on Vista or NVIDIA gfx cards).

Disassemblers:

  • IDA Pro(commercial) - top of the line disassembler/debugger. Used by most professionals, like malware analysts etc. Costs quite a few bucks though (there exists free version, but it is quite quite limited)
  • W32Dasm(free) - a bit dated but gets the job done. I believe W32Dasm is abandonware these days, and there are numerous user-created hacks to add some very useful functionality. You'll have to look around to find the best version.

Decompilers:

  • Visual Basic: VB Decompiler, commercial, produces somewhat identifiable bytecode.
  • Delphi: DeDe, free, produces good quality source code.
  • C: HexRays, commercial, a plugin for IDA Pro by the same company. Produces great results but costs a big buck, and won't be sold to just anyone (or so I hear).
  • .NET(C#): dotPeek, free, decompiles .NET 1.0-4.5 assemblies to C#. Support for .dll, .exe, .zip, .vsix, .nupkg, and .winmd files.

Some related tools that might come handy in whatever it is you're doing are resource editors such as ResourceHacker (free) and a good hex editor such as Hex Workshop (commercial).

Additionally, if you are doing malware analysis (or use SICE), I wholeheartedly suggest running everything inside a virtual machine, namely VMware Workstation. In the case of SICE, it will protect your actual system from BSODs, and in the case of malware, it will protect your actual system from the target program. You can read about malware analysis with VMware here.

Personally, I roll with Olly, WinDbg & W32Dasm, and some smaller utility tools.

Also, remember that disassembling or even debugging other people's software is usually against the EULA in the very least :)

2 of 16
62

psoul's excellent post answers to your question so I won't replicate his good work, but I feel it'd help to explain why this is at once a perfectly valid but also terribly silly question. After all, this is a place to learn, right?

Modern computer programs are produced through a series of conversions, starting with the input of a human-readable body of text instructions (called "source code") and ending with a computer-readable body of instructions (called alternatively "binary" or "machine code").

The way that a computer runs a set of machine code instructions is ultimately very simple. Each action a processor can take (e.g., read from memory, add two values) is represented by a numeric code. If I told you that the number 1 meant scream and the number 2 meant giggle, and then held up cards with either 1 or 2 on them expecting you to scream or giggle accordingly, I would be using what is essentially the same system a computer uses to operate.

A binary file is just a set of those codes (usually call "op codes") and the information ("arguments") that the op codes act on.

Now, assembly language is a computer language where each command word in the language represents exactly one op-code on the processor. There is a direct 1:1 translation between an assembly language command and a processor op-code. This is why coding assembly for an x386 processor is different than coding assembly for an ARM processor.

Disassembly is simply this: a program reads through the binary (the machine code), replacing the op-codes with their equivalent assembly language commands, and outputs the result as a text file. It's important to understand this; if your computer can read the binary, then you can read the binary too, either manually with an op-code table in your hand (ick) or through a disassembler.

Disassemblers have some new tricks and all, but it's important to understand that a disassembler is ultimately a search and replace mechanism. Which is why any EULA which forbids it is ultimately blowing hot air. You can't at once permit the computer reading the program data and also forbid the computer reading the program data.

(Don't get me wrong, there have been attempts to do so. They work as well as DRM on song files.)

However, there are caveats to the disassembly approach. Variable names are non-existent; such a thing doesn't exist to your CPU. Library calls are confusing as hell and often require disassembling further binaries. And assembly is hard as hell to read in the best of conditions.

Most professional programmers can't sit and read assembly language without getting a headache. For an amateur it's just not going to happen.

Anyway, this is a somewhat glossed-over explanation, but I hope it helps. Everyone can feel free to correct any misstatements on my part; it's been a while. ;)

🌐
Dogbolt
dogbolt.org
Decompiler Explorer
Decompiler Explorer is an interactive online decompiler which shows equivalent C-like output of decompiled programs from many popular decompilers.
🌐
JetBrains
jetbrains.com › decompiler
dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains
May 26, 2021 - dotPeek is a free tool based on ReSharper. It can reliably decompile any .NET assembly into C# or IL code.
🌐
Reddit
reddit.com › r/software › is it possible to reverse engineer exe file
r/software on Reddit: is it possible to reverse engineer exe file
July 12, 2022 -

Opening exe file in notepad is in Martian Language(no editable formate) is there tool exist that translate into earth language. I want to tweak in simple exe file

🌐
GitHub
github.com › itsKayWat › Exe-Decompiler
GitHub - itsKayWat/Exe-Decompiler: A powerful GUI tool for decompiling and analyzing Electron-based .exe applications. Features ASAR extraction, source map analysis, and live modifications with recompilation support. Built for developers and security researchers.
A powerful GUI tool for decompiling and analyzing Electron-based .exe applications. Features ASAR extraction, source map analysis, and live modifications with recompilation support. Built for devel...
Author   itsKayWat
🌐
Reddit
reddit.com › r/gamedev › can you decompile .exe files?
r/gamedev on Reddit: Can you decompile .EXE files?
February 17, 2021 -

I'm learning software engineering in a university and I'm at my second semester. I have a game called Clive Barker's Jericho, it's an old game from 2007. I've made a mod for it based on another guy's mod. The thing is the code for the game is separated into 2 parts. 1. all the cpp code in the compiled .EXE file and the other half is in .lc basically .lua/.luac files. The .lc files can be decompiled and you can work with them, but the .cpp code is compiled to a .EXE file so it's basically unaccessible. The game was made in unreal engine if I'm right, is there a way to decompile the cpp .EXE file? Or only reverse engineering works?

Find elsewhere
🌐
Quora
quora.com › How-can-I-decompile-an-exe-file-into-a-visual-studio-project-without-getting-so-many-errors-Or-maybe-someone-can-help-me-to-do-that
How to decompile an exe file into a visual studio project without getting so many errors? Or maybe someone can help me to do that - Quora
Answer (1 of 6): Assuming the .exe file is one compiled from C or C++, it is very unlikely that you will get anything resembling good source code. Reverse-engineering small pieces of code is sort of doable by hand, but for larger projects, it just becomes impossible. This program: [code]#inclu...
🌐
SourceForge
decompiler.sourceforge.net
Decompiler
The goal of a machine code decompiler is to analyze executable files (like .EXE or .DLL files in Windows or ELF files in Unix-like environments) and attempt to create a high level representation of the machine code in the executable file: the decompiler tries to reconstruct the source code from which the executable was compiled in the first place.
🌐
SourceForge
sourceforge.net › projects › decompiler
Decompiler download | SourceForge.net
Download Decompiler for free. Binary executable decompiler. Reko decompiler reads program binaries, decompiles them, infers data types, and emits structured C source code. Designed with a pluggable architecture, it currently has: - support for ...
Rating: 3.8 ​ - ​ 4 votes
🌐
Binary Ninja
binary.ninja
Binary Ninja
Developed with a focus on delivering a high-quality API for automation and a clean and usable GUI, Binary Ninja is in active use by malware analysts, vulnerability researchers, and software developers worldwide. Decompile software built for many common architectures on Windows, macOS, and Linux for a single price, or try out one of our limited (but free!) versions.
🌐
Hex-Rays
hex-rays.com › ida-free
IDA Free: Disassembler & Decompiler at No Cost
From 2 until 11 decompilers of your choice between x86-32, x86-64, ARM-32, ARM-64, MIPS-32+nM, MIPS-64, PPC-32, PPC-64, ARC, RISC-V-32, RISC-V-32
🌐
YouTube
youtube.com › ebola man
Convert .EXE to Source Code! - YouTube
• Educational Purposes Only •» Skool Community: https://www.skool.com/anonymous» GitHub: https://github.com/EbolaMan-YT
Published   February 25, 2024
Views   177K
🌐
ByteHide
bytehide.com › home › how to decompile .net applications (easy)✅
How To Decompile .NET Applications (Easy)✅
December 2, 2021 - Well, decompile process is the opposite, you have an executable file, .dll, .exe…, and with a tool (decompiler) you get the original source code (in other words, the compiled code is converted into readable source code).
🌐
Microsoft Learn
learn.microsoft.com › en-us › answers › questions › 344936 › help-decompile-exe-back-to-vb-source-code
Help. Decompile EXE back to VB source code? - Microsoft Q&A
April 5, 2021 - (I've seen decompilers for C# but not VB.) TIA ... An object-oriented programming language developed by Microsoft that can be used in .NET. ... I know this post is old, but recently with Claude 3.7 a vb .exe was decompiled and re-written into python.
🌐
x36dbg
exedecompiler.com › home
How to Decompile an EXE File Using Common Tools (e.g., IDA Pro, Ghidra) - EXE Decompiler
November 23, 2024 - The “Pseudocode” window shows a more readable version of the code. Look through the code to understand the program, find vulnerabilities, or see specific functions. Ghidra is a well-liked open-source tool for decompiling EXE files.
🌐
GitHub
github.com › icsharpcode › ILSpy
GitHub - icsharpcode/ILSpy: .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
Go to Tools / Options / Text Editor / C# / Advanced and check "Enable navigation to decompiled source" ... ILSpy is distributed under the MIT License. Please see the About doc for details, as well as third party notices for included open-source libraries. Make sure Windows PowerShell (at least version) 5.0 or PowerShell 7+ is installed. Clone the ILSpy repository using git. Execute git submodule update --init --recursive to download the ILSpy-Tests submodule (used by some test cases).
Starred by 24.2K users
Forked by 3.6K users
Languages   C# 98.5% | JavaScript 0.6% | PowerShell 0.3% | Visual Basic .NET 0.2% | HTML 0.1% | Less 0.1%