.net 4.0 识别反向代码是否混淆

.net 4.0 识别反向代码是否混淆,.net-4.0,obfuscation,deobfuscation,.net 4.0,Obfuscation,Deobfuscation,我可以为我的客户访问一个旧的管理系统,他希望添加更多内容。我能够联系到最初编写主要DLL的人,然后我获得了控制权并开始围绕它们进行构建。但现在,我也需要扩展原始版本,我别无选择,只能进行反向工程 我尝试了Reflector Pro和JustDecompile,但获得的源代码充满了错误。ILSpy工作得很好,但下面是我从ILSpy获得的示例代码: private static object ParseIntoValue(string stringValue, string targetTy

我可以为我的客户访问一个旧的管理系统,他希望添加更多内容。我能够联系到最初编写主要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;
    }
私有静态对象ParseIntoValue(字符串stringValue,字符串targetType)
{
if(targetType!=null)
{
如果({C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$Method0x60008F-1==null)
{
{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$Method0x60008F-1=新字典(12)
{
...
};
}
int-num;
如果({C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$method0x60008F-1.TryGetValue(targetType,out num))
{
客观结果;
开关(num)
{
案件在这里。。。
违约:
goto IL_2A6;
}
返回结果;
}
}
IL2A6:
返回null;
}
很明显,这里应用了某种形式的混淆。来自JustDecompile和Reflector Pro的反向代码是完全无用的。有了ILSpy,我可以编译一些项目,而无需任何修改

我需要帮助来识别这种混淆(如果是这样的话)。最初的开发者说他没有混淆。我不太确定

谢谢。

反编译代码中的PrivateImplementationDetails可能是自动实现的属性

如果用属性替换
{C6507306-5ECF-4D05-8EE4-BD4D7781AC4E}.$$Method0x60008F-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))
        {
          ....
Dictionary MyProp{get;set;}
私有静态对象ParseIntoValue(字符串stringValue、字符串targetType)
{
if(targetType!=null)
{
如果(MyProp==null)
{
MyProp=新词典(12)
{
...
};
}
int-num;
if(MyProp.TryGetValue(targetType,out num))
{
....

由于是.NET 4.0,可能是lambda表达式。有人告诉我,这些表达式很难反编译。为什么不从原始开发人员那里获取源代码?原始开发人员现在正在休假,我怀疑他是否会交出源代码。在他回来说狗吃掉了他的硬盘驱动器之前,我正准备自己重新编写所有内容在.Net 4.0上验证了这是在ILSpy中反映的自动实现的属性强制转换为Dictionary的输出。我想知道为什么Dictionary…{get;set;}会有这么多问题?