Java and android 的反编译问题
小弟最近反编译 了一段android 代码(反编译以后的) 如下:
import java.security.MessageDigest;
public class h
{
public static final String a(String paramString)
{
int i = 0;
char[] arrayOfChar1 = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70 };
try
{
byte[] arrayOfByte1 = paramString.getBytes();
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(arrayOfByte1);
byte[] arrayOfByte2 = localMessageDigest.digest();
int j = arrayOfByte2.length;
char[] arrayOfChar2 = new char[j * 2];
int k = 0;
while (true)
{
if (i >= j)
return new String(arrayOfChar2);
int m = arrayOfByte2[i];
int n = k + 1;
arrayOfChar2[k] = arrayOfChar1[(0xF & m >>> 4)];
k = n + 1;
arrayOfChar2[n] = arrayOfChar1[(m & 0xF)];
i++;
}
}
catch (Exception localException)
{
localException.printStackTrace();
}
return null;
}
}
猜测 应该是 MD5加密 然后和 固定数组 异或 所得的 加密字符串,但里面 出现了一个乱码“>>>”("arrayOfChar2[k] = arrayOfChar1[(0xF & m >>> 4)];"),“>>>” 这个实在是不知道是什么意思,望哪位大侠给指点一下
下面是 对应的smali 代码:
.class public Lcom/sing/client/k/h;
.super Ljava/lang/Object;
# direct methods
.method public static final a(Ljava/lang/String;)Ljava/lang/String;
.registers 10
.prologue
const/4 v0, 0x0
.line 7
const/16 v1, 0x10
new-array v2, v1, [C
fill-array-data v2, :array_44
.line 9
:try_start_8
invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B
move-result-object v1
.line 11
const-string v3, "MD5"
invoke-static {v3}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;
move-result-object v3
.line 13
invoke-virtual {v3, v1}, Ljava/security/MessageDigest;->update([B)V
.line 15
invoke-virtual {v3}, Ljava/security/MessageDigest;->digest()[B
move-result-object v3
.line 17
array-length v4, v3
.line 18
mul-int/lit8 v1, v4, 0x2
new-array v5, v1, [C
move v1, v0
.line 20
:goto_1f
if-lt v0, v4, :cond_27
.line 25
new-instance v0, Ljava/lang/String;
invoke-direct {v0, v5}, Ljava/lang/String;-><init>([C)V
.line 28
:goto_26
return-object v0
.line 21
:cond_27
aget-byte v6, v3, v0
.line 22
add-int/lit8 v7, v1, 0x1
ushr-int/lit8 v8, v6, 0x4
and-int/lit8 v8, v8, 0xf
aget-char v8, v2, v8
aput-char v8, v5, v1
.line 23
add-int/lit8 v1, v7, 0x1
and-int/lit8 v6, v6, 0xf
aget-char v6, v2, v6
aput-char v6, v5, v7
:try_end_3b
.catch Ljava/lang/Exception; {:try_start_8 .. :try_end_3b} :catch_3e
.line 20
add-int/lit8 v0, v0, 0x1
goto :goto_1f
.line 26
:catch_3e
move-exception v0
.line 27
invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V
.line 28
const/4 v0, 0x0
goto :goto_26
.line 7
:array_44
.array-data 2
0x30s
0x31s
0x32s
0x33s
0x34s
0x35s
0x36s
0x37s
0x38s
0x39s
0x41s
0x42s
0x43s
0x44s
0x45s
0x46s
.end array-data
.end method
哪位大侠 帮我解释一下 那一句中的“>>>”应该是什么运算符,万分感谢!