簡體   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