jd-gui反编译出来是字节码的解决方案

在分析一个软件的时候,加密代码反编译变成字节码了。记录一下解决方案。

1.DJ Java Decompiler 3.8把MD5Utils.class导出

2.把MD5Utils.class导入到idea。

//源文件


public class MD5Utils {
  public static String md5Password(String paramString, int paramInt) { // Byte code:
    //   0: ldc 'md5'
    //   2: invokestatic getInstance : (Ljava/lang/String;)Ljava/security/MessageDigest;
    //   5: aload_0
    //   6: invokevirtual getBytes : ()[B
    //   9: invokevirtual digest : ([B)[B
    //   12: astore_0
    //   13: new java/lang/StringBuffer
    //   16: dup
    //   17: invokespecial <init> : ()V
    //   20: astore #4
    //   22: aload_0
    //   23: arraylength
    //   24: istore_2
    //   25: iconst_0
    //   26: istore_1
    //   27: goto -> 84
    //   30: iload_3
    //   31: sipush #255
    //   34: iand
    //   35: invokestatic toHexString : (I)Ljava/lang/String;
    //   38: astore #5
    //   40: aload #5
    //   42: invokevirtual length : ()I
    //   45: iconst_1
    //   46: if_icmpne -> 57
    //   49: aload #4
    //   51: ldc '0'
    //   53: invokevirtual append : (Ljava/lang/String;)Ljava/lang/StringBuffer;
    //   56: pop
    //   57: aload #4
    //   59: aload #5
    //   61: invokevirtual append : (Ljava/lang/String;)Ljava/lang/StringBuffer;
    //   64: pop
    //   65: goto -> 96
    //   68: aload #4
    //   70: invokevirtual toString : ()Ljava/lang/String;
    //   73: astore_0
    //   74: aload_0
    //   75: areturn
    //   76: astore_0
    //   77: aload_0
    //   78: invokestatic printStackTrace : (Ljava/lang/Throwable;)V
    //   81: ldc ''
    //   83: areturn
    //   84: iload_1
    //   85: iload_2
    //   86: if_icmpge -> 68
    //   89: aload_0
    //   90: iload_1
    //   91: baload
    //   92: istore_3
    //   93: goto -> 30
    //   96: iload_1
    //   97: iconst_1
    //   98: iadd
    //   99: istore_1
    //   100: goto -> 84
    // Exception table:
    //   from	to	target	type
    //   0	25	76	java/security/NoSuchAlgorithmException
    //   30	57	76	java/security/NoSuchAlgorithmException
    //   57	65	76	java/security/NoSuchAlgorithmException
    //   68	74	76	java/security/NoSuchAlgorithmException }
}

//目标文件


import com.google.devtools.build.android.desugar.runtime.ThrowableExtension;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    public MD5Utils() {
    }

    public static String md5Password(String var0, int var1) {
        NoSuchAlgorithmException var10000;
        label46: {
            int var2;
            StringBuffer var4;
            byte[] var10;
            boolean var10001;
            try {
                var10 = MessageDigest.getInstance("md5").digest(var0.getBytes());
                var4 = new StringBuffer();
                var2 = var10.length;
            } catch (NoSuchAlgorithmException var9) {
                var10000 = var9;
                var10001 = false;
                break label46;
            }

            for(var1 = 0; var1 < var2; ++var1) {
                byte var3 = var10[var1];

                String var5;
                try {
                    var5 = Integer.toHexString(var3 & 255);
                    if (var5.length() == 1) {
                        var4.append("0");
                    }
                } catch (NoSuchAlgorithmException var8) {
                    var10000 = var8;
                    var10001 = false;
                    break label46;
                }

                try {
                    var4.append(var5);
                } catch (NoSuchAlgorithmException var7) {
                    var10000 = var7;
                    var10001 = false;
                    break label46;
                }
            }

            try {
                var0 = var4.toString();
                return var0;
            } catch (NoSuchAlgorithmException var6) {
                var10000 = var6;
                var10001 = false;
            }
        }

        NoSuchAlgorithmException var11 = var10000;
        ThrowableExtension.printStackTrace(var11);
        return "";
    }
}

很清晰明了了,整理一下就ok了。

JAVA工具精品新译<5>DJ Java Decompiler 3.12.12.96 32位老朽痴拙汉化特别版(JAVA反编译之王) 使用DJ Java Decompiler可用於 2000,XP,2003,Vista,Windows7, 32位环境.你可以反编译class文件并且可以保存为文本文件或其它格式。 DJ非常容易使用。选择你想反编译的class文件(路径勿含中文),或者只是双击想反编译的class文件(建立关联)。 DJ同时支持在界面上拖拽的方式来反编译class文件。 DJ可以从已经编译的二进制class文件重新创建最初的源代码(比如说Java applets)。 DJ可以反编译复杂的Java applets和二进制文件,产生准确的源代码。 DJ是一个标准的Windows应用程序;它甚至不需要你的机器上安装有JAVA开发环境。 DJ不仅是一个JAVA反汇编器,而且是一个全功能的有着语法高亮的带用户界面的JAVA编辑器。 使用DJ Java Decompiler你还可以反编译一次性反编译多个class文件。 安装路径,如:C:/Program Files/decomp。然后将该路径加入到环境变量path中。 首先将要反编译的jar文件,用winrar解压到和jar文件名称一样的文件夹中 在命令输入框中输入如下命令: jad -o -r -d F:/am -sjava F:/amclientsdk/**/*.class 其中:F:/am 表示编译后文件的存放路径 F:/amclientsdk/**/*.class 表示需要被反编译的文件 -o - overwrite output files without confirmation (default: no) 无需确定覆写文件 -r - restore package directory structrure 恢复包目录结构 -s - output file extension (by default '.jad') 如果不设置为-sjava,则默认扩展名为.jad 其他的,F:/amclientsdk/**/*.class 中的两颗接连的星,表示任意层次的子目录。 在Windows资源管理器的鼠标右键菜单中你也可以立即查看到源代码。你可以在你的电脑硬盘中或者在一个网络磁盘(你有全部的访问权限或者只是修改.jad文件默认的输出目录)中反编译class文件。 你不需要安装有Java虚拟机或者其它任何Java SDK环境,但是你安装了以上环境之后,DJ就可以创建、编译、运行JAR文件,在浏览器中运行applet小程序。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值