2011-04-14 37 views
0

我正在研究一个C#混淆程序,我想知道是否有方法名称“硬连线”到框架中,因此不应该被修改。想到的是.ctor,.cctor和Dispose。还有其他我应该避免修改吗?哪些C#方法名称不应该被混淆?

编辑: 为了阐述和启发Paul Alexander(感谢您的回答),我通过修改IL源代码来实现这一点。下面是一些典型发言。方法(?):

.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”选项,处置有一个“家”的选项。这是我应该寻找的东西吗?

回答

1

对某个方法的元数据包含了“特别的名字”标志上的方法是不能被重命名,你可以作为一个使用基本的启发式。但要准确确定方法的合格性,您必须遍历整个继承树,会计基类,接口,属性字符串引用的方法/属性等。

+0

感谢您的回答。请参阅我的编辑。 – RenniePet 2011-04-14 23:21:10

+0

所有的答案都很有用,但我选择这个作为最有洞察力的答案,以及Paul Alexander关于get_和set_的另一个答案的评论。感谢所有回答。 – RenniePet 2011-04-22 23:51:27

2

您绝对应该避免修改公共课程中的任何公共方法。同时避免修改属性获取器和设置器(get_XXXset_XXX方法)。

+0

好点的就get_xxx和set_xxx,感谢开发者。至于公共类中的公共方法名称,我打算修改它们 - 然后在处理来自其他类和程序集的引用时考虑到这一点。任何其他方法名称应该单独保留? – RenniePet 2011-04-14 23:05:48

+0

get_XXX和set_XXX实际上是安全的混淆。即使在混淆时,.NET运行库也可以解析属性的方法 - 即使在使用反射时也是如此。 – 2011-04-14 23:06:00

2

不要混淆与序列化有关的任何事情,除非通过属性明确声明名称;甚至还要小心 - 一些序列化器在元数据中包含了类型名称(可能不会长时间匹配)。

小心基于会议的方法;例如ShouldSerializeFoo()ResetFoo()(与属性Foo配对) - 这些约定在串行器和ComponentModel中都很常见。对于某些序列化程序也有一个FooHasValue约定。

,那就是要使用反射很可能是注定的事情......,P

1

有关通过反射使用的方法/类的更多信息:注意框架或使用反射来指定应用程序类型和方法。即在ASP.Net用于处理请求的MVC类是按名称选取的,在SharePoint中很多第三方类都是通过名称引用的,因为结果不应该在汇编中混淆特定的类名以用于此类应用程序。

我会采用其他混淆器正在使用的自定义属性来控制混淆并将不应该被混淆的类/方法的外部可配置列表分开。在一般情况下,无法正确猜测哪些方法可以并且不能被混淆。即混淆公共方法名称是可能的,只有当你知道所有的呼叫者 - 并非总是如此。

+0

感谢您的回答。 “只有当你知道所有的调用者时,才可能混淆公共方法名称” - 我确实知道所有的调用者 - 这是我自己的程序,我可以完全控制它的所有部分,即使它是一个多装配程序。 – RenniePet 2011-04-14 23:24:50

1

有许多标准应该被用来确定何时方法不应当重命名:

  • 方法overridding从.NET基类库虚拟方法。
  • ctor和cctor
  • 标记为specialName和rtSpecialName和runtime的方法。

和一些更喜欢如果混淆一个dll解析公共方法。

顺便说一句,我很好奇你是否在做这个学习经验或为你自己使用。如果是后者,我会告诉你最好使用商业混淆器,而不是花时间在这个上(而不是专注于你的核心功能!)。

声明:我在LogicNP软件工作,Crypto Obfuscator

+0

“如果是后者,我会告诉你,最好使用商业混淆器,而不是花时间在这个上” - 什么?并错过了所有这些乐趣?顺便说一句,谢谢你的回答。 – RenniePet 2011-04-15 22:58:47

相关问题