Let's be honest, there is no reason to remember how to decompile stuff with the various tools available. Wouldn't it be nice to just decompile the $h*! out of things right off the fingertips in Visual Studio Code? Well, here we go:
This extension decompiles ...
- Binary executables for various platforms
- Java Jar archives and compiled Classes
- Android APK's
- Python
.pyc
and.pyo
- Ethereum/EVM based Smart Contracts
- (Experimental, Linux/MacOs only)
Just right-click โ Decompile
on a supported executable and wait for the magic to happen.
The decompilation result is added to a temporary sub-workspace. You can right-click โ Download
files to your local file-system right from the sub-workspace.
Have phun ๐
macOS
Windows (Ghidra vs. IDAPro)
Ethereum Smart Contract
Save the EVM
byte-code in a file with extension .evm
, then right-click โ Decompile
.
Requirements: General
- Requires Java (11+) to be installed system-wide. Just install the latest JRE/JDK for your OS (e.g. OpenJDK, Oracle JDK).
- Other tools are bundled with the extension. Just make sure Java is available in your
PATH
.
Requirements: Binary executables (Ghidra / IDA Pro)
- Requires a working installation of Ghidra (โ Download) to decompile executables
- either available in
PATH
(like when you install it withbrew cask install ghidra
on os-x; or set-up manually) - otherwise please specify the path to the executable
<ghidra>/support/analyzeHeadless
incode โ preferences โ settings: vscode-decompiler.tool.ghidra.path
and make sure that theanalyzeHeadless
script runs without errors (and is not prompting for the JDK Home ๐ค). Here's a sample Ghidra config for Windows:
- either available in
- (Experimental; Windows Only) Optional a licensed version of IDA Pro with decompiler support.
- specify the path to the
idaw
executable incode โ preferences โ settings: vscode-decompiler.tool.idaPro.path
, e.g.c:\IDA68\idaw.exe
. - set preference to
idaPro (experimental Windows Only)
incode โ preferences โ settings: vscode-decompiler.default.decompiler.selected
. - we'll automatically try to run 32 and 64bits
idaw
on the target application (preference on what executable is configured by you) - If you're running
<= IDA Pro 6.6
and the normal IDA decompilation mode does not work you can try the set preference toidaPro legacy hexx-plugin (experimental Windows Only)
incode โ preferences โ settings: vscode-decompiler.default.decompiler.selected
. Note: Use this method only if the normal IDA Pro mode doesnt work. Caveat:idaw*.exe
must not be in a path that contains spaces, ask @microsoft why ๐.
- specify the path to the
Requirements: Python
- Python decompilation requires
pip3 install uncompyle6
(see settings)- specify the
uncompyle6
script location incode โ preferences โ settings: vscode-decompiler.tool.uncompyle.path
or set touncompyle6
if it is available inPATH
- specify the
Requirements: Smart Contracts (EVM byte-code)
- The pseudocode generator panoramix/eveem requires a working installation of
python3.8
or newer.- specify the
python3.8
path incode โ preferences โ settings: vscode-decompiler.tool.python38.path
(e.g./usr/local/opt/[email protected]/bin/python3.8
(macos/homebrew)) - make sure
pip
forpython3.8
is installed - install
panoramix
dependencies:$ /usr/local/opt/[email protected]/bin/python3.8 -m pip install coloredlogs requests web3 timeout_decorator
- specify the
- Note: Panoramix is run in local mode. EVM byte-code is not sent to eveem.org.
- It will attempt to download a function signature database on first load.
- It will cache files to
<userhome>/.panoramix
.
- No Windows support :/ (see this issue).
Setting tool preferences
code โ preferences โ settings:
- Set default decompiler preference to
ghidra
(default) oridaPro (experimental Windows Only)
(requires a licensed version of IDAPro + Decompiler)vscode-decompiler.default.decompiler.selected
- Set preference for java decompilation to JADX or JD-CLI (default)
vscode-decompiler.java.decompiler.selected
- Set preference for android apk decompilation to dex2jar + jd-cli (slow) or JADx (default)
vscode-decompiler.apk.decompiler.selected"
This extension wouldn't be possible without the smarties that are developing the following reverse-engineering tools:
- Ghidra by @NSA/CSS
- JadX by @skylot
- JD-CLI by @Josef Cacek
- dex2Jar by @Bob Pan
- IDA Pro Advanced & Decompiler
- python-uncompyle6 by @R. Bernstein
- panoramix the engine behind eveem.org created by @Tomasz Kolinko
- LogoMakr (CC; Logo)
see CHANGELOG