哪些C#方法名称不应该混淆?

| 我正在开发一个C#模糊处理程序,我想知道框架中是否有“硬连线”的方法名称,因此不应该对其进行修改。我想到的是.ctor,.cctor和Dispose。还有其他应避免修改的内容吗? 编辑: 为了详细说明并受到Paul Alexander的启发(感谢您的回答),我正在通过修改IL源代码来做到这一点。以下是一些典型的(。).method语句:
  .method family hidebysig virtual instance void 
          Dispose(bool disposing) cil managed

  .method private hidebysig instance void 
          InitializeComponent() cil managed

  .method public hidebysig specialname rtspecialname 
          instance void  .ctor(class [mscorlib]System.Collections.Generic.List`1<string> twoLetterWords) cil managed

  .method private hidebysig static string[] 
          CreateStringArray() cil managed
我可以看到构造函数(.ctor)具有\“ rtspecialname \”选项,而Dispose具有\“ family \”选项。这是我应该注意的事情吗?     
已邀请:
给定方法的元数据在无法重命名的方法上包含一个“特殊名称”标志,您可以将其用作基本的启发式方法。但是,要准确确定方法的资格,您必须遍历整个继承树,计算基类,接口,属性字符串引用的方法/属性等。     
您绝对应该避免在公共类中修改任何公共方法。还要避免修改属性获取器和设置器(
get_XXX
set_XXX
方法)。     
除非混淆名称是通过属性明确声明的,否则不要混淆与序列化有关的内容。甚至要小心-一些序列化程序在元数据中包含类型名称(可能不会长期匹配)。 注意基于约定的方法;例如
ShouldSerializeFoo()
ResetFoo()
(与属性
Foo
配对)-这些约定在序列化器和
ComponentModel
中都是常见的。对于某些串行器,还有一个“ 7”约定。 而且任何将要使用反射的东西都注定要失败...; p     
有关通过反射使用的方法/类的更多信息:当心使用反射来发现类型和方法的框架或目标应用程序。即在ASP.Net MVC中,用于处理请求的类是按名称选择的,在SharePoint中,许多第三方类都是通过名称引用的-结果是,不应混淆要在此类应用程序中使用的程序集中的特定类名称。 我会采用其他混淆器正在使用的方法-定制属性来控制混淆,并分离不应混淆的类/方法的外部可配置列表。通常情况下,不可能正确猜测哪些方法可以混淆,哪些方法不能混淆。即仅当您知道所有调用者时才可能混淆公共方法名称-并非总是如此。     
有许多标准可用于确定何时不应该重命名方法: .Net基类库中的方法将覆盖虚拟方法。 ctor和cctor 标有specialName和rtSpecialName的方法以及运行时。 还有一些更像是在混淆dll时排除公共方法。 顺便说一句,我很好奇您是作为学习经验还是自己使用。如果是后者,我会告诉您,最好使用商用混淆器,而不要花时间在上面(而是关注您的核心功能!)。 免责声明:我在LogicNP Software工作,这是Crypto Obfuscator的开发人员     

要回复问题请先登录注册