5

したがって、以下のコードでは、「// このアイテムは難読化されており、翻訳できません」というコメントに気付くでしょう。

私が疑問に思っているのは、難読化されたコードの代わりにコメントがあり、それに続くものは実際には難読化されていないということですか、それとも「次のコードが難読化されている」ということですか?

Webで見つけたものからすると、前者のように聞こえますが、よくわかりません。コードは明らかに難読化されているように見えますが、翻訳不可能というわけではありません。

public static NameValueCollection ParseStringIntoNameValueCollection(string responseString, bool undoCallbackEscapes)
{
    // This item is obfuscated and can not be translated.
    NameValueCollection values;
    string[] strArray;
    int num;
    string str2;
    string str3;
    int num3;
    goto Label_0027;
Label_0002:
switch (num3)
{
    case 0:
        if (!undoCallbackEscapes)
        {
            goto Label_0057;
        }
        num3 = 4;
        goto Label_0002;

    case 1:
        goto Label_00E5;

    case 2:
        if (num < strArray.Length)
        {
            string str = strArray[num];
            int index = str.IndexOf('=');
            str2 = str.Substring(0, index);
            str3 = str.Substring(index + 1);
            num3 = 0;
        }
        else
        {
            num3 = 6;
        }
        goto Label_0002;

    case 3:
        if (7 < (7 - 5))
        {
            goto Label_0071;
        }
        goto Label_00E5;

    case 4:
        str2 = unEscapeCallbacks(str2);
        str3 = unEscapeCallbacks(str3);
        num3 = 5;
        goto Label_0002;

    case 5:
        goto Label_0057;

    case 6:
        return values;
}
Label_0027:
    values = new NameValueCollection();
    strArray = responseString.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
    num = 0;
    num3 = 1;
    goto Label_0002;
Label_0057:
    values.Add(str2, str3);
    num++;
    num3 = 3;
    goto Label_0002;
Label_00E5:
    num3 = 2;
    goto Label_0002;
}

更新: 私はこれを見つけました...「ときどき、あまり頻繁ではありませんが、Reflector がソース コードを逆アセンブルしているときに、コードの代わりに「このアイテムは難読化されているため、翻訳できません」と表示されます。

これは、難読化されたコードをコメントで覆い隠していることを意味します。誰でもこれを確認できますか?私はILを見ましたが、それはすべてを示しているように見えるので、その声明は正確ではないかもしれません.

私には、このコードは難読化ソフトウェアではなく、BASIC の知識を持つ 5 歳の子供によって難読化されたように見えます。

4

2 に答える 2

3

アンパサンドに基づいて文字列を分割し、switch/を通過caseして処理方法を決定する文字列関数であるという意味で、難読化されているように見えます。の使用法は、goto純粋に (一見すると) やや悪い方法でコード リーダーを混乱させることです...

確かに、Redgate のリフレクター (以前の Rutz Loeder のリフレクター) を使用して任意の .NET EXE/DLL をロードしてコードを分析およびダンプできます。簡単に。

暗号化されていない限り、.NET EXE/DLL を保護する実際の方法はありません。管理されていない C/C++ コードを使用して .NET ランタイムをロードし、.NET EXE を復号化し、それを新しくホストしている appdomain にロードします...

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-02-26T23:58:44.663 に答える
2

どんなに難読化されていても、常にILに逆コンパイルできるはずなので、それを見て、リフレクターが実際にすべてを表示しているかどうかを確認できます。

于 2010-02-26T23:48:14.310 に答える