我们用6个反编译核心进行测试:
Procyon-现代Java的快速反编译器
CFR-对现代Java来说,非常好且受支持的反编译器
JDCore(非常快)
Jadx,快速且具有Android支持
Fernflower
JAD(非常快,但已过时)
先来个helloworld,试试
源程序
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
以下用红色表示有源程序的差别
CFR
/*
* Decompiled with CFR 0.150.
*/
public class HelloWorld {
public static void main(String[] arrstring) {
System.out.println("Hello World");
}
}
CFR只有一处不同
Fernflower
public class HelloWorld {
public static void main(String[] var0) {
System.out.println("Hello World");
}
}
只有一处不同
jadx
package p000;
/* renamed from: HelloWorld */
public class HelloWorld {
public static void main(String[] strArr) {
System.out.println("Hello World");
}
}
有两处,且有一处是致命错误
Procyon
//
// Decompiled by Procyon v0.5.36
//
public class HelloWorld
{
public static void main(final String[] array) {
System.out.println("Hello World");
}
}
有两处
JDCore
import java.io.PrintStream;
public class HelloWorld { public HelloWorld() {} public static void main(String[] paramArrayOfString) { System.out.println("Hello World"); }
}
有三处
Jad
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
// Source File Name: HelloWorld.java
import java.io.PrintStream;
public class HelloWorld
{
public HelloWorld()
{
}
public static void main(String args[])
{
System.out.println("Hello World");
}
}
有三处
因此综合排名是
高 .CFR Fernflower Procyon
中 Jad JDCore
低 jadx
此次jadx因为有一个致命错误排到了最后,而jad这个老人确做到了中等水平
我们来个难的
Procyon
//
// Decompiled by Procyon v0.5.36
//
package com.helloworld.android;
import android.os.Bundle;
import android.app.Activity;
public class HelloWorldActivity extends Activity
{
public void onCreate(final Bundle bundle) {
super.onCreate(bundle);
this.setContentView(2130903040);
}
}
只有四处
CFR
/*
* Decompiled with CFR 0.150.
*
* Could not load the following classes:
* android.app.Activity
* android.os.Bundle
*/
package com.helloworld.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldActivity
extends Activity {
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
this.setContentView(2130903040);
}
}
有三处
JDCore
package com.helloworld.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldActivity
extends Activity
{
public HelloWorldActivity() {}
public void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(2130903040);
}
}
有三处
jadx
package com.helloworld.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(C0000R.layout.main);
}
}
零处有错,你没看错!!!!!!!jadx对安卓的dex这个类java文件进行了特殊优化
Fernflower
package com.helloworld.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldActivity extends Activity {
public void onCreate(Bundle var1) {
super.onCreate(var1);
this.setContentView(2130903040);
}
}
三个
JAD
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
package com.helloworld.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorldActivity extends Activity
{
public HelloWorldActivity()
{
}
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
setContentView(0x7f030000);
}
}
有三个
高 jadx
中 CFR Procyon JDCore Fernflower JAD
没有低等
结论
可见,java反编译最好的是CFR Fernflower Procyon,而dex或apk的类java反编译最好的是jadx