主流java反编译器效率比对

我们用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

 
原文地址:https://www.cnblogs.com/GKLBB/p/13831614.html