簡體   English   中英

混淆裝配和反思

[英]Obfuscate Assembly and Reflection

我想通過Dotfuscator模糊我的匯編文件(* .dll,* .exe)。 我的問題是,如果我這樣做,我仍然可以使用原始名稱(我的意思是混淆之前的名稱)並使用System.Reflection方法來處理這些程序集中的類和類型嗎?

如果您需要更多細節,請告訴我

混淆是反射會給你帶來一些問題。 即使你采取建議使用選項不混淆公共方法,一些反映的代碼可能會調用私有方法。 問題是混淆將改變您可能需要保持不變的某些代碼的名稱。

如果您知道或可以找到易於使用反射的區域,則可以使用

[global::System.Reflection.Obfuscation(Exclude=true, Feature="renaming")]

這將告訴混淆器保留名稱。

使用反射運行模糊處理需要進行更多測試,但仍然可以...

請閱讀此處http://msdn.microsoft.com/en-us/library/ms227298(v=vs.80).aspx有一個“庫模式”來禁用公共成員的混淆。 其他你可能無法訪問這些方法。 在類型級別有一個控制混淆的屬性: http//msdn.microsoft.com/en-us/library/ms227281(v = vs。80).aspx

您可以在混淆的程序集上使用System.Reflection ,但由於某些混淆點是將程序集中的所有內容重命名為隨機且無意義的內容,因此您無法對非相同的名稱和標識符進行反映。 - 混淆裝配。 如果要對模糊處理的程序集進行反射,則需要以不依賴於命名的類型和成員的方式執行此操作。

您可以創建自己的私有地圖以從舊的地圖中獲取新名稱。 Mapper必須使用以下結構將排序表寫入disk / db:Module(executable),Index,OriginalType,ObfuscatedType

創建基於參數在兩種模式下運行的“Mapper”控制台應用程序:應用程序將接收作為參數的可執行路徑

  1. 裝載組件
  2. 來自loadedAssembly的GetTypes
  3. PreObfuscation刪除所有條目並重新寫入索引和OriginalType值。 PostObfuscation按索引更新ObfuscatedType。 后期構建事件必須如下:
    1. Mapper.exe“target.exe”“Pre”
    2. [模糊處理]
    3. Mapper.exe“target.exe”“發布”

現在你需要一個來自OriginalName的getObfuscatedName函數,你就完成了。

請注意,此解決方案不適用於修剪,因為類型的數量將更改,索引將不再匹配

OriginalAssembly.GetTypes()

ObfuscatedAssembly.GetTypes()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM