繁体   English   中英

Dotfuscator访问器重命名get和set

[英]Dotfuscator accessors renaming get and set

我的问题是Dotfuscator配置重命名。 想象一个看起来像这样的类:

Class MyClass
{
    private int _propertyA;
    private int _propertyB;

    public int PropertyA
    {
        get{return _propertyA;}
        set{_propertyA = value;}
    }

    [Obfuscation(Feature = "renaming", Exclude = true)]
    public int DestinationReference
    {
        get{return _propertyB;}
    }
}

混淆的类将写成这样的东西

Class a
{

    int s()
    void z(int a)

    public int DestinationReference
    {
        get{return _propertyB;}
    }
}

这是我从使用.Net Reflector看到的假设

我的问题如下: - 在我们的代码中,我们实现了一个方法,该方法使用反射查找类的所有属性以查找特定参数 - 此方法在模糊代码中不起作用,因为我的访问者PropertyA已被替换为两个get访问器和set访问器的不同方法。 - 我知道如果我将一个访问者排除在重命名之外它会在msil代码中保留一个访问者,并且可以通过我的方法查找访问者

我的问题是: - 不是重命名唯一的选择吗? - Dotfuscator中是否有一个参数允许重命名访问者,而不将其分成两个不同的方法并丢失访问者?

我对混淆很新,所以原谅我的不完美之处,这就是我所能看到的类似于上面反射器中所描述的类的东西。

截图

如您所见,从重命名中排除的属性将保留具有get访问器的属性。 但对于另一个被混淆的人,我可以看到两个不同的方法s和z

我试图看看是否有办法获得单个访问器,例如使用底层的getter和setter重命名为“s”

我在查看这篇文章后首先找到了一些问题的答案: http//vicky4147.wordpress.com/2007/10/23/exploring-msil-properties/

我看到MSIL生成了get_XXX()方法和set_XXX(int)方法以及添加属性。 Dotfuscator负责重命名get和set方法(这是我们想要的),但也用于删除属性本身(我不想要)

解决方案是为混淆的DLL启用“库模式”,如果启用了库模式,则文档说明:

  • 不重命名公共类和嵌套公共类的名称。 如果这些类具有public,family或famorassem访问权限,则也不会重命名这些类的成员(字段和方法)。
  • 此外,无论访问说明符如何,都不会重命名虚拟方法。 这允许库的客户端在需要时覆盖私有虚拟方法(这是.NET体系结构中允许的行为)。
  • 除了上述规则隐含的排除外,还会应用任何用户指定的自定义重命名排除项。
  • 始终保留属性和事件元数据。

这可以在反射器中进行模糊处理后看到,顶部库模式被禁用,底部库模式被启用

截图

可以看出,没有公共类/方法/字段被重命名,更重要的是我保留了属性元数据。

现在我的下一个问题是,如何保留属性元数据但允许重命名属性本身。 我想找到一个令人满意的解决方案,而无需使用自定义混淆属性定义手动装饰每个属性。

我会继续寻找另一天,如果我找不到任何东西,就会将这个答案标记为问题的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM