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

如何解决哪些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的开发人员     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?