今天我在网上搜索并用java的汇编语言找到了一个代码,然后把它转回到java代码中,发现了一些奇怪的代码,比如“tmp”这个“tmp_xxx”是什么意思? 这是代码:
private static String encrypted()
{
byte[] arrayOfByte = new byte[32];
byte[] tmp8_6 = arrayOfByte;
tmp8_6[0] = 104;
byte[] tmp13_8 = tmp8_6;
tmp13_8[1] = 116;
byte[] tmp18_13 = tmp13_8;
tmp18_13[2] = 116;
byte[] tmp23_18 = tmp18_13;
tmp23_18[3] = 112;
byte[] tmp28_23 = tmp23_18;
tmp28_23[4] = 58;
byte[] tmp33_28 = tmp28_23;
tmp33_28[5] = 47;
byte[] tmp38_33 = tmp33_28;
tmp38_33[6] = 47;
byte[] tmp44_38 = tmp38_33;
tmp44_38[7] = 112;
byte[] tmp50_44 = tmp44_38;
tmp50_44[8] = 97;
byte[] tmp56_50 = tmp50_44;
tmp56_50[9] = 115;
byte[] tmp62_56 = tmp56_50;
tmp62_56[10] = 116;
byte[] tmp68_62 = tmp62_56;
tmp68_62[11] = 101;
byte[] tmp74_68 = tmp68_62;
tmp74_68[12] = 98;
byte[] tmp80_74 = tmp74_68;
tmp80_74[13] = 105;
byte[] tmp86_80 = tmp80_74;
tmp86_80[14] = 110;
byte[] tmp92_86 = tmp86_80;
tmp92_86[15] = 46;
byte[] tmp98_92 = tmp92_86;
tmp98_92[16] = 99;
byte[] tmp104_98 = tmp98_92;
tmp104_98[17] = 111;
byte[] tmp110_104 = tmp104_98;
tmp110_104[18] = 109;
byte[] tmp116_110 = tmp110_104;
tmp116_110[19] = 47;
byte[] tmp122_116 = tmp116_110;
tmp122_116[20] = 114;
byte[] tmp128_122 = tmp122_116;
tmp128_122[21] = 97;
byte[] tmp134_128 = tmp128_122;
tmp134_128[22] = 119;
byte[] tmp140_134 = tmp134_128;
tmp140_134[23] = 47;
byte[] tmp146_140 = tmp140_134;
tmp146_140[24] = 85;
byte[] tmp152_146 = tmp146_140;
tmp152_146[25] = 52;
byte[] tmp158_152 = tmp152_146;
tmp158_152[26] = 101;
byte[] tmp164_158 = tmp158_152;
tmp164_158[27] = 122;
byte[] tmp170_164 = tmp164_158;
tmp170_164[28] = 83;
byte[] tmp176_170 = tmp170_164;
tmp176_170[29] = 51;
byte[] tmp182_176 = tmp176_170;
tmp182_176[30] = 113;
byte[] tmp188_182 = tmp182_176;
tmp188_182[31] = 101;
tmp188_182;
String str = "";
int j = arrayOfByte.length;
int i = 0;
if (i < j)
{
int k = arrayOfByte[i];
if (k == 48);
while (true)
{
i += 1;
break;
if (k == 127)
str = str.concat("π");
else
str = str.concat(Character.toString((char)k));
}
}
return str;
}
答案 0 :(得分:2)
所以名字用&#34; tmp&#34;只是字节名称,编译器无法备份其旧名称,因此用tmp替换了名称。
我已经清理了代码,这里是没有tmp代码的代码
希望这有助于:)
代码:
private static String encrypted() {
byte[] arrayOfByte = new byte[32];
arrayOfByte[0] = 104;
arrayOfByte[1] = 116;
arrayOfByte[2] = 116;
arrayOfByte[3] = 112;
arrayOfByte[4] = 58;
arrayOfByte[5] = 47;
arrayOfByte[6] = 47;
arrayOfByte[7] = 112;
arrayOfByte[8] = 97;
arrayOfByte[9] = 115;
arrayOfByte[10] = 116;
arrayOfByte[11] = 101;
arrayOfByte[12] = 98;
arrayOfByte[13] = 105;
arrayOfByte[14] = 110;
arrayOfByte[15] = 46;
arrayOfByte[16] = 99;
arrayOfByte[17] = 111;
arrayOfByte[18] = 109;
arrayOfByte[19] = 47;
arrayOfByte[20] = 114;
arrayOfByte[21] = 97;
arrayOfByte[22] = 119;
arrayOfByte[23] = 47;
arrayOfByte[24] = 85;
arrayOfByte[25] = 52;
arrayOfByte[26] = 101;
arrayOfByte[27] = 122;
arrayOfByte[28] = 83;
arrayOfByte[29] = 51;
arrayOfByte[30] = 113;
arrayOfByte[31] = 101;
快乐的编码! :)
答案 1 :(得分:1)
只是可变名称: tmp = temp(临时)
答案 2 :(得分:1)
当你像你一样反编译Java字节码文件时,反编译器通常无法找到局部变量的原始名称等。 (通常省略局部变量的名称。这取决于使用的原始编译器和编译器开关)。
但Java语言要求局部变量具有名称。因此,反编译器需要生成一些名称以放入它输出的源代码中。名称通常基于一些简单的模式。这些生成的名称没有与它们相关的内在含义/语义。您(试图理解字节码的人)必须通过弄清楚代码实际在做什么来赋予它们意义。
其他观察结果是反编译代码实际上没有多大意义。我怀疑字节码是混淆的;即处理使得现成的反编译器难以反编译。这导致了问题:
&#39;如果它是非法的,或道德上可疑(如破解许可证密钥或DRM计划),我们不应该帮助您。