zoukankan      html  css  js  c++  java
  • 主流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

     
  • 相关阅读:
    Nodejs初阶之express
    windows 下安装nodejs及其配置环境
    NodeJS、NPM安装配置与测试步骤(windows版本)
    nodejs npm常用命令
    系列文章--Node.js学习笔记系列
    系列文章--8天学通MongoDB
    python 特征选择 绘图 + mine
    TCP/IP 详解卷一
    CNN检测模型统计检出率
    leetcode 572. Subtree of Another Tree
  • 原文地址:https://www.cnblogs.com/GKLBB/p/13831614.html
Copyright © 2011-2022 走看看