在分析一个软件的时候,加密代码反编译变成字节码了。记录一下解决方案。
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了。