CFR vs uncompyle6
CFR
benf.orguncompyle6
github.comSide by side
| Figure | CFR | uncompyle6 |
|---|---|---|
| Price from | Free | Free |
| Free plan | Yes | Yes |
| Free trial | — | — |
| Open source | — | — |
| Windows | Yes | Yes |
| macOS | Yes | Yes |
| Linux | Yes | Yes |
| API | Yes | — |
| Self-hosted | Yes | Yes |
| Plans published | 1 | 1 |
| Spec score · Reverse Engineering Tools | 8.2 (#10) | 7.6 (#34) |
| Spec score · Decompiler Software | 8.3 (#5) | 7.6 (#15) |
| Known limitation | The maker says CFR has edge cases and may produce poor results for some inputs. | The README identifies control-flow handling as a major decompilation problem and says erroneous decompilations may sometimes be detected and reported. |
| License | The maker’s FAQ directs users to the project README for its license; the project repository identifies the license as MIT. | The repository identifies the project as GPL-3.0 licensed. |
| Purpose | CFR is a Java decompiler that converts Java class files back into Java source. | uncompyle6 translates Python bytecode into equivalent Python source code. |
| Support | The maker invites users to email reports of problems and directs bug reports to the GitHub issue tracker. | The maintainer says bug reports may take a while to receive attention and that sponsoring or supporting the project can prioritize issues. |
Plans
In their own words
CFR
CFR is a free Java decompiler that reconstructs Java source from Java class files. It can process individual named classes, classes found on a classpath, or a whole JAR, and the command-line tool can place output in a chosen directory with the --outputdir option. Decompilation behavior can be adjusted through command-line options or an options file. The maker says CFR handles many features from Java 9, 12, and 14, and it can attempt class files from other JVM languages; those are rendered as Java rather than their original language. CFR is written in Java 6 and is said to run wherever Java 6 does. It is available as a downloadable JAR, through Maven, and from GitHub. The FAQ notes an API from version 0.135, and the project repository identifies the license as MIT. CFR handles bytecode rather than native code. Its maker also notes that some inputs fall into edge cases where output may be poor. There are no paid plans or usage limits stated.
uncompyle6
uncompyle6 is a free, GPL-3.0-licensed tool for translating compiled Python bytecode into equivalent Python source code. It runs on `.pyc` and `.pyo` files from the command line, and can also deparse code fragments or return source information around a bytecode offset. The README lists bytecode from Python 1.0 through 3.8, Dropbox Python 2.5 bytecode, and some PyPy bytecode as accepted inputs. Fragment deparsing is used in trepan debuggers to show source at runtime and can provide more stack-trace detail than a line number. The `--syntax-verify` option checks decompiled syntax when used with the matching bytecode version. Control-flow handling remains a major challenge, and some incorrect decompilations may be detected and reported. The tool does not handle obfuscated code, Cython, or MicroPython, and cannot directly decompile Py2EXE executables. Python 3.7 and 3.8 support is generally better in the related decompile3 project. Installation is through PyPI for Python 3.11 and later, or a GitHub Releases file for earlier Python versions. Platforms listed include Linux, macOS, Windows, and self-hosted use.