wiki:https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
由于jd好多年没更新了,今天找到这个新的开源反汇编,很不错
分享一下。
之前一直用jd,结果很多时候要看smali
现在好多了
As a developer who splits his time between the .NET and Java platforms, I have been surprised and dismayed by the lackluster selection of decompilers in the Java ecosystem. Jad (no longer maintained) and JD-GUI are pretty decent choices, but the former does not support Java 5+ language features, and the latter tends to barf on code emitted by my LINQ/DLR tree compiler. Neither is open source.
To address the situation, I recently started developing a decompiler myself, inspired by (and borrowed heavily from) ILSpy and Mono.Cecil.
While still incomplete, my own tests seem to indicate that the Procyon decompiler can generally hold its own against the other leading Java decompilers out there. There are, however, some known issues.
javac
)
may produce less than optimal results, especially for constructs like
String-based switch
statements. Up until now, I have mostly
tested classes compiled with Javac. I will work to improve support for other
compilers as time goes on.The Procyon decompiler handles language enhancements from Java 5 and beyond that most other decompilers don‘t. It also excels in areas where others fall short. Procyon in particular does well with:
switch
statements (only tested against javac
1.7 so far)::
operator).I‘ve posted some simple input/output comparisons comparing original source, decompiled output, and JD-GUI output.
Java 7 is required to run. Unfortunately, I do not yet have a slick GUI front-end like JD-GUI (but third-party front-ends do exist--see below!). I do, however, offer color-coded output for consoles supporting ANSI/xterm-256. I also offer three output modes:
-r
)-b
,
add -u
for unoptimized)Note that color-coded output requires an ANSI-compatible console.
Unfortunately, this rules out the Windows command prompt. To get color-coded
output on Windows, I recommend using a terminal environment like MobaXterm.
If ANSI detection fails for whatever reason (as it does with MobaXterm), you can
force it on by running with -DAnsi=true
.
The main class (entry point) is
com.strobel.decompiler.DecompilerDriver
. It‘s also the entry class
for decompiler.jar
(available under Downloads).
You can pass in one or more types to be processed. At the moment, all output
goes to System.out
. I will probably add file-based output in the
future. To call the public API externally, use the helper class
com.strobel.decompiler.Decompiler
.
The input types can be fully-qualified names in dotted or binary form (e.g.,
java.lang.String
or java/lang/String
) or
relative/absolute file paths (path/to/MyClass.class
or
C:\src\path\to\MyClass.class
) or even whole jar files. If you pass
in a type name, it will attempt to load it out of the user or bootstrap
classpath. If you have trouble getting it to locate classes from jars or
directories in your CLASSPATH
environment variable, try running the
main class directly instead of running with -jar
.
I still have a remarkably flimsy grasp of how all this classpath business works in Java, so if someone would like to educate me (or submit a pull request), be my guest :).
Assuming that you have renamed the download file from procyon-decompiler-x.x.xx.jar to decompiler.jar, the following are some common options.
Show help/usage information and exit.
$ java -jar decompiler.jar $ java -jar decompiler.jar -?
Decompile a single class to the console.
$ java -jar decompiler.jar java.lang.String $ java -DAnsi=true -jar decompiler.jar java.util.Collections
Decompile a whole jar to a directory.
$ java -jar decompiler.jar -jar myJar.jar -o out
Don‘t want to use the command line? Try one of these GUI front-ends for Procyon:
SecureTeam Java
Decompiler
A JavaFX-based decompiler front-end with fast and
convenient code navigation. Download it, or launch it directly from your
browser.
Luyten
An open
source front-end by deathmarine.
原文:http://www.cnblogs.com/shendiao/p/3536912.html