我如何获得C#类的真实姓名?

时间:2013-08-02 15:33:00

标签: c# obfuscation deobfuscation

我有一个程序,我已经加密了我的类名:

namespace eGTt4d2HADJI3qZvyr
{

 internal class epOl6XynGueNUNwY5Y
  {
    internal static ModuleHandle e1gr6SXh7;
    internal static RuntimeTypeHandle e53w34m968awCm9P85taUZe(int token)
    {
        return epOl6XynGueNUNwY5Y.e1gr6SXh7.GetRuntimeTypeHandleFromMetadataToken(token);
    }
    internal static RuntimeFieldHandle q3oMVe54wE47w4v68C7s2I(int token)
    {
        return epOl6XynGueNUNwY5Y.e1gr6SXh7.GetRuntimeFieldHandleFromMetadataToken(token);
    }
    public epOl6XynGueNUNwY5Y()
    {
        <PrivateImplementationDetails>{75896B12-4F98-4FD3-B464-42D866146FAE}.SLV0fFIsptsZtjvFft17();
        base..ctor();
    }
    static epOl6XynGueNUNwY5Y()
    {
        // Note: this type is marked as 'beforefieldinit'.
        <PrivateImplementationDetails>{75896B12-4F98-4FD3-B464-42D866146FAE}.SLV0fFIsptsZtjvFft17();
        epOl6XynGueNUNwY5Y.e1gr6SXh7 = typeof(epOl6XynGueNUNwY5Y).Assembly.GetModules()[0].ModuleHandle;
    }
}

}

如何获得真实姓名,例如“epOl6XynGueNUNwY5Y”?

源是* .dll文件,我使用ILSpy来反映它。大部分代码都是正常的,还有一小部分像这样。如果有人知道Arithmatic.Al通过Reflector无法正常工作。

PS:我从互联网上找到解决问题的算术。但只是一点线索。

线索是:Encrption字符串只有大写/小写/数字。

我使用reflector的高版本,例如7.6.netframework 4.0并解决问题,它只是invlid方法。

感谢您的帮助!在我想知道C#之前,我学到了很多SqlConnection代码知识,如何连接?现在使用反射器可以找到代码,而不仅仅是重新编写代码!!

感谢您告诉我代码混淆。

您希望看到.dll文件源代码(C# .NetFramework)ILSpyreflector是推荐的。

2 个答案:

答案 0 :(得分:5)

这是混淆代码。只有在混淆之前有代码才能获得原始类名的唯一方法。除非代码的编写者在其中留下了一些漏洞,否则唯一的选择是通过代码并花费大量时间重构代码以摆脱默默无闻并试图从中理解它,但它可能会更快地编写自己的应用程序,做同样的事情。

作为补充说明,由于代码被混淆,代码具有真实的类名。即使你要调用一个返回类名的方法,这正是你应该得到的。

答案 1 :(得分:4)

您很可能反编译 混淆 exe。 模糊处理的主要原因是保护代码。因此,除非您知道代码是如何混淆的(模式/算法)等,否则您将无法获取原始类名。您可以阅读更多相关信息here