0

重複の可能性:
jsr キーワードの意味は何ですか?

私は逆コンパイラを使用して .class ファイルを逆コンパイルしました。下部にあるいくつかのコードを除いてすべてを逆コンパイルしたようです。

  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-block を実装するために使用されます)、したがって、このコードはおそらく文字列の「復号化」サブルーチンにジャンプするために使用されます (私は復号化を配置します)。引用符で囲まれているのは、ここで機能している強力なタイポグラフィの解読ではない可能性が高いためです)。

于 2010-01-25T21:55:41.693 に答える
0

これらは、アプリケーション内で使用するための暗号化された文字列である可能性が最も高いです。アプレットには、それらのためのある種の復号化ルーチンが含まれている必要があります。そうしないと、それらを使用できなくなります。zこれは、呼び出されたクラス(文字列の配列)内のフィールドの初期化コードが不十分に逆コンパイルまたは難読化されているように見えます。

Java に関する限り、これらは単なる通常の文字列定数です。それらに特別な意味はありません。

于 2010-01-25T21:45:17.310 に答える