Dotfuscator 访问器重命名 get 和 set

Posted

技术标签:

【中文标题】Dotfuscator 访问器重命名 get 和 set【英文标题】:Dotfuscator accessors renaming get and set 【发布时间】:2014-11-09 13:16:54 【问题描述】:

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

Class MyClass

    private int _propertyA;
    private int _propertyB;

    public int PropertyA
    
        getreturn _propertyA;
        set_propertyA = value;
    

    [Obfuscation(Feature = "renaming", Exclude = true)]
    public int DestinationReference
    
        getreturn _propertyB;
    

混淆后的类会写成这样的

Class a


    int s()
    void z(int a)

    public int DestinationReference
    
        getreturn _propertyB;
    

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

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

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

我对混淆很陌生,所以请原谅我的不完美之处,这是我在反射器中看到的类似于上面描述的类。

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

我正在尝试查看是否有一种方法可以获取单个访问器,例如使用底层的 getter 和 setter 重命名为“s”

【问题讨论】:

【参考方案1】:

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

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

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

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

在反射器中混淆后可以看到,顶部库模式被禁用,底部库模式被启用

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

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

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

【讨论】:

你有没有找到解决这个问题的方法?我遇到了同样的问题。我想混淆包含属性的类,但仍然让它们被视为属性和属性,以便使用 Json.Net 进行(反)序列化仍然有效。

以上是关于Dotfuscator 访问器重命名 get 和 set的主要内容,如果未能解决你的问题,请参考以下文章

c# dotfuscator 混淆后无法使用

如何使用命名 URL 映射从控制器重定向?

如何使用 $.get() 检测服务器重定向

通过来自 React App 的 GET 请求从 express 服务器重定向到外部 URL

PreEmptive Dotfuscator and Analytics CE

dotfuscator安装