[英]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.