Определите, является ли обратный код скрытым или нет - PullRequest
3 голосов
/ 07 марта 2012

У меня есть доступ к старой системе управления для моего клиента, и он хочет добавить к ней больше. Мне удалось связаться с парнем, который первоначально написал основные библиотеки 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 и Reflector Pro был совершенно бесполезен. С помощью ILSpy я могу скомпилировать несколько проектов без каких-либо изменений.

Мне нужна помощь, чтобы определить это запутывание (если это так). Оригинальный разработчик говорит, что он не запутывал. Я не уверен в этом.

Спасибо.

1 Ответ

6 голосов
/ 07 марта 2012

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))
        {
          ....
...