2012-01-21 8 views
0

私は、コンパイルされたコードに次の関数を見つけるために、逆コンパイラを使用:コンパイルされたJavaバイトコードをどのように編集しますか?

public static void sub_e5b() 
    { 
     var_972 = null; 
     System.gc(); 
     vservConfigHashTable = new Hashtable(); 
     vservConfigHashTable.put("appId_end", "498"); 
     vservConfigHashTable.put("showAt", "both"); 
     vservConfigHashTable.put("categoryId", "22"); 
     vservConfigHashTable.put("viewMandatory_end", "true"); 
     (new VSERV_BCI_CLASS_000(var_93a, vservConfigHashTable)).showAtEnd(); 
    } 

は今、私は"false""true"値を変更したいです。

この変更を行うために使用できるツールやテクニックは何ですか?

+1

使用、Javaのdcomplier。 – Lucifer

+1

Check http://stackoverflow.com/questions/2395574/java-bytecode-editor –

答えて

1

これは、Krakatauのような逆アセンブラを使用して簡単に行うことができます(開示、私は書きました)。

逆アセンブラを逆コンパイラよりも使用する利点は、動作することが保証されていることです。すべてのコードをデコンパイルすることはできませんが、いつでも逆アセンブルすることができます。

たとえば、このようなクラスを取る。

public class A{ 
    public static void main(String[] args) 
    { 
     System.out.println("true"); 
    } 
} 

クラカタウと解体した後、このようなものが得られます。

.version 51 0 
.class super public A 
.super java/lang/Object 


.method public <init> :()V 
    .limit stack 1 
    .limit locals 1 
    aload_0 
    invokespecial java/lang/Object <init>()V 
    return 
.end method 

.method static public main : ([Ljava/lang/String;)V 
    .limit stack 2 
    .limit locals 1 
    getstatic java/lang/System out Ljava/io/PrintStream; 
    ldc 'true' 
    invokevirtual java/io/PrintStream println (Ljava/lang/String;)V 
    return 
.end method 

変更ldc 'false'にラインldc 'true'、それを再構築し、それが今で偽の代わりに、真の印刷されます。

-1

逆コンパイルしたコードを編集してコンパイルし、代わりに使用します。

私はSystem.gc()を削除することを真剣に考えます。

+0

-1逆コンパイルされたコードを再コンパイルするのは、最も簡単な場合を除いては機能しません。なぜなら、デコンパイルは正確ではなく、両方の手順がロッシーであるからです。 – Antimony

+0

@Antimonyほとんどの場合、動作しないと言うと少し強くなります。あなたが提案するほどの損失はありません。 –

+0

私はそれがあなたが扱っているアプリケーションの種類に依存すると思います。私の経験では、ほとんど動作しません。 – Antimony

関連する問題