0

可能重复:
jsr 关键字是什么意思?

我使用反编译器来反编译一个 .class 文件,它似乎反编译了除了底部的一些代码之外的所有内容,这很奇怪,因为我是 java 新手,我不确定它们的含义:

  static
  {
    String[] tmp5_2 = new String[6];
    jsr 50;
    tmp5_2[0] = "pH@JeAE";
    String[] tmp13_5 = tmp5_2;
    jsr 42;
    tmp13_5[1] = "lRMMoF";
    String[] tmp21_13 = tmp13_5;
    jsr 34;
    tmp21_13[2] = "KHUT;\f\19VSv\rRHJkBJH@dL\18OAu";
    String[] tmp29_21 = tmp21_13;
    jsr 26;
    tmp29_21[3] = "\18\14\22\n1\r\f\15\21";
    String[] tmp37_29 = tmp29_21;
    jsr 18;
    tmp37_29[4] = "wTD\4OJRKEWJXDK@SLMAu\3UR\4NMPHJd\r";
    String[] tmp45_37 = tmp37_29;
    jsr 10;
    tmp45_37[5] = "KHUT;\f\19\16\226\r\f\15\20/\18\19RP`WIR";
    z = tmp45_37;
    break label68:
    label68: localObject = returnAddress;
  }

tmp5_2[0]例如,看后面的代码,它们是什么意思?

4

3 回答 3

3

从快速浏览来看,我可能完全错了,它看起来像是被混淆工具混淆的代码,以防止你试图做的事情(逆向工程)

于 2010-01-25T21:45:31.617 回答
1

请注意,您发布的代码不是有效的 Java 代码。

你反编译得到的字节码很可能被一些混淆器混淆了,它也混淆了字符串常量(我偶尔使用的唯一混淆器是ZKM,它做类似的事情)。

请注意示例中的此代码:

jsr 50;

这不是一个有效的 Java 语句,它包含在反编译器中,告诉您有一条字节码指令无法反编译成有效的 Java 源语句。

jsr实际上是一个gosub(即它将返回地址压入堆栈并在指定的偏移量处调用字节码,它通常用于实现finally-blocks),所以这段代码可能用于跳转到一些String“解密”子程序(我把解密在引号中,因为它很可能不是在这里工作的强排版解密)。

于 2010-01-25T21:55:41.693 回答
0

这些很可能是在应用程序中使用的加密字符串。小程序应该为它们包含某种解密例程,否则它将无法使用它们。在我看来,这对于类中称为z(字符串数组)的某些字段的反编译或混淆初始化代码很差。

就 Java 而言,这些只是常规的字符串常量。对它们没有任何特殊意义。

于 2010-01-25T21:45:17.310 回答