共用方式為


反映和動態類別載入

反映和動態類別載入是 .NET 架構中功能非常強大的工具,這個執行階段程式自訂的層級會使 Dotfuscator 無法正確判斷是否能安全地對載入所指定程式的所有型別進行重新命名。

請考慮下列 (C#) 程式碼片段:

public object GetNewType() { 
   Type type = Type.GetType( GetUserInputString(), true ); 
   object newInstance = Activator.CreateInstance( type ); 
   return newInstance; 
} 

這個程式碼會依據名稱載入一個型別,然後以動態方式將它執行個體化,此外,名稱是來自使用者輸入的字串(或 Runtime 資料庫,或是其他程式)。

Dotfuscator 顯然無法預知使用者會輸入哪些型別名稱,解決之道就是排除所有可能載入之型別的名稱 (請注意,方法和欄位重新命名仍然可以進行),這就是手動使用者組態 (和有關以 Dotfuscator 處理之應用程式的知識) 必須派上用場的時候了。

通常這種情況並不會太嚴重。請參考下面這個稍微改變的範例:

public MyInterface GetNewType() { 
   Type type = Type.GetType( GetUserInputString(), true ); 
   object newInstance = Activator.CreateInstance( type ); 
   return newInstance as MyInterface; 
} 

現在就可以立刻看出來,只有一個型別的子集必須排除:就是實作 MyInterface 的那些型別。

© 2002-2007 PreEmptive Solutions. All rights reserved.