3

私はクライアントの古い管理システムにアクセスできますが、彼はそれにさらに追加したいと考えています。最初にメインDLLを作成した人に連絡することができ、それから制御を取得して、それらを中心に構築を開始しました。しかし今、私もオリジナルを拡張する必要があり、リバースエンジニアリングするしかありません。

Reflector ProとJustDecompileを試しましたが、取得したソースにエラーがたくさんありました。ILSpyはうまく機能しますが、それでも、ILSpyから取得したサンプルコードは次のとおりです。

    private static object ParseIntoValue(string stringValue, string targetType)
    {
        if (targetType != null)
        {
            if (<PrivateImplementationDetails>{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$method0x600080f-1 == null)
            {
                <PrivateImplementationDetails>{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$method0x600080f-1 = new Dictionary<string, int>(12)
                {
                    ...
                };
            }
            int num;
            if (<PrivateImplementationDetails>{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$method0x600080f-1.TryGetValue(targetType, out num))
            {
                object result;
                switch (num)
                {

                cases are here...

                default:
                    goto IL_2A6;
                }
                return result;
            }
        }
        IL_2A6:
        return null;
    }

ここに何らかの形の難読化が適用されていることは明らかです。JustDecompileとReflectorProからの逆コードは完全に役に立たなかった。ILSpyを使用すると、何も変更せずにいくつかのプロジェクトをコンパイルできます。

この難読化を特定するための支援が必要です(その場合)。元の開発者は、彼が難読化していないと言います。私はちょっと確信が持てません。

ありがとう。

4

1 に答える 1

6

逆コンパイルされたコードのPrivateImplementationDetailsは、自動実装されたプロパティである可能性があります。

<PrivateImplementationDetails>{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$method0x600080f-1プロパティに置き換えると、コードは理にかなっているようです。

Dictionary<string, int> MyProp { get; set;}

private static object ParseIntoValue(string stringValue, string targetType)
{
    if (targetType != null)
    {
        if (MyProp == null)
        {
           MyProp = new Dictionary<string, int>(12)
            {
                ...
            };
        }
        int num;
        if (MyProp.TryGetValue(targetType, out num))
        {
          ....
于 2012-03-07T13:25:13.293 に答える