web-dev-qa-db-ja.com

リフレクター-難読化されたコード

Reflectorを実行して一部のプログラムを逆コンパイルしましたが、難読化されているようです。

次の出力が得られましたが、あまり役に立ちません。

難読化されたコードを逆コンパイルする方法はありますか?

  [CompilerGenerated]
    get
    {
        // This item is obfuscated and can not be translated.
    }
    [CompilerGenerated]
    set
    {
        // This item is obfuscated and can not be translated.
        switch ((1 == 1))
        {
            case true:
                goto Label_0020;
        }
        goto Label_0018;
        if (((0 == 0) ? 0 : 1) != 0)
        {
        }
        this.eval_t = value;
    }
5
AaronS

技術的には、難読化されたコードの逆コンパイルは、難読化されていないコードの逆コンパイルと同じです。 。難読化の全体のポイントは、人々がReflectorなどを使用してコードを逆コンパイルし、コードの内部がどのように機能するかを理解できないようにすることです。

難読化を元に戻す簡単な方法はありません。あなたはコードをそのまま歩くのにかなり行き詰まっています。

5
Steve

ILSpyを試しましたか?

http://wiki.sharpdevelop.net/ILSpy.ashx

難読化されたコードでかなりうまくいきましたが、変数の名前が変更されているため、ガベージのように見えますが、かなり順守できます。

4
StrangeWill

使用されている難読化ツールを特定することは困難ですが、de4dot(.NET deobfuscator)が役立つ可能性があります: https://github.com/0xd4d/de4dot

3
0xd4d

メソッドと変数の名前を「匿名」の名前に変更することから、プログラムロジックをマングル化すること、さらにはランタイムの難読化エンジンに至るまで、実際にはいくつかの(少なくとも4つの)非常に異なる種類の難読化があります。
これを行うためのツールは、無料のプラグイン(一部のプログラマーは、すべてのコードをそのように作成することさえできます:))から、ハイエンドで高価な商用ツールまでさまざまです。答えが異なる場合があるかどうかに応じて、何を扱っているかを知る必要があります。

あなたの場合、コードはおそらくレベル2のように見えます。つまり、変数だけでなく、コードパスのマングリングも行われます。つまり、完全に有効であり、まったく同じ結果が得られますが、手動で解析するのは非常に困難です。 (単なる名前付けの場合は、コンテキストと範囲に応じて名前を段階的に変更し、そこから把握することができます)。

私には簡単な解決策はありませんが、問題は-それで何をしたいですか?

  • 小さな変更を加えて再コンパイルする場合-何が何であるかを本当に理解する必要がない限り、問題なく動作するはずです。
  • 欠陥がないか手動で確認したい場合-頑張ってください。
  • 一方、これを自動コードスキャナーに送ることは問題ありません。ハイエンドツール(:-))shouldは、これを解析するのに問題はありません(ただし、プロミスはありません)。しかし、少なくともセキュリティのレベルをある程度把握することができます。
3
AviD