關於 Dotfuscator Community & Visual Studio
PreEmptive Protection - Dotfuscator 可為 .NET 應用程式提供全方位的保護,而且很容易就能夠整合到您的軟體開發生命週期中。 使用它來強化、保護及清理傳統型、行動裝置、伺服器和嵌入式應用程式,以協助保護商業機密和其他智慧財產 (IP)、減少盜版和仿冒,並防止竄改及未經授權的偵錯。 Dotfuscator 不需要其他程式設計作業,甚至不需要存取原始程式碼,就可以在編譯的組件上執行。
為何保護很重要
保護您的「智慧財產」(IP) 非常重要。 您的應用程式程式碼包含可視為智慧財產的設計和實作詳細資料。 不過,建基於 .NET Framework 的應用程式包含大量中繼資料與高層級中繼程式碼,因此只要使用眾多免費自動化工具當中的任一種,就能輕易對應用程式進行還原工程。 藉由中斷並阻止還原工程,您可以防止未經授權的智慧財產公開,並展示您的程式碼包含商業機密。 Dotfuscator 可以混淆您的 .NET 組件來阻礙還原工程,同時仍維持應用程式原有的行為。
「保護應用程式的完整性」也相當重要。 除了還原工程之外,惡意執行者也可能嘗試製作盜版應用程式、改變應用程式在執行階段的行為,或是操控資料。 Dotfuscator 可以在您的應用程式中插入偵測及回應未經授權用途的功能,包括竄改、第三方偵錯與已破解 (Root) 的裝置。
如需 Dotfuscator 如何整合到安全軟體開發週期的詳細資訊,請參閱 PreEmptive Solutions 的 SDL App Protection (SDL 應用程式保護) 頁面。
關於 Dotfuscator Community
您的 Microsoft Visual Studio 包含一份 PreEmptive Protection - Dotfuscator Community,可免費供個人使用。 (這個免費版本先前稱為 Dotfuscator Community Edition 或 Dotfuscator CE。)
如需如何安裝 Visual Studio 隨附 Dotfuscator Community 版本的指示,請參閱安裝頁面。
Dotfuscator Community 為開發人員、架構設計人員和測試人員提供多種軟體保護及強化服務。 Dotfuscator Community 中包含的 .NET Obfuscation 及其他應用程式保護功能的範例:
- 為識別碼「重新命名」,使得編譯過的組件較難進行還原工程。
- 「反竄改」會偵測經竄改應用程式的執行,以及終止或回應經竄改的工作階段。
- 「反偵錯」會偵測附加到執行中應用程式的偵錯工具,以及終止或回應受偵錯的工作階段。
- 「反已破解 (Root) 裝置」會偵測應用程式是否在已破解 (Root) 的 Android 裝置上執行,然後終止或回應這些裝置上的工作階段。
- 「應用程式到期行為」會編碼「生命結束」日期,並終止已到期的應用程式工作階段。
如需這些功能的詳細資料,包括如何將其整合到您的應用程式保護策略,請參閱功能頁面。
Dotfuscator Community 提供現成的基本保護。 Dotfuscator Community 的註冊使用者,以及 PreEmptive Protection - Dotfuscator Professional (全球頂尖的 .NET Obfuscator) 使用者,將有更多的應用程式保護方法可以使用。 如需增強 Dotfuscator 的相關資訊,請參閱升級頁面。
開始使用
若要開始從 Visual Studio 使用 Dotfuscator Community,請在 [搜尋方塊] \(Ctrl+Q) 中輸入 dotfuscator
。
- 如果您已安裝 Dotfuscator Community,[搜尋方塊]會在 [功能表] 標題下,顯示啟動 Dotfuscator Community 的選項。 如需詳細資料,請參閱完整 Dotfuscator Community 使用者指南的使用者入門頁面。
- 如果尚未安裝 Dotfuscator Community,[搜尋方塊] 會改為在 [個別元件] 標題下顯示 [安裝 PreEmptive Protection - Dotfuscator]。 如需詳細資訊,請參閱安裝頁面。
您也可以從 preemptive.com 上的 Dotfuscator 下載頁面取得最新版本的 Dotfuscator Community。
從 Dotfuscator Community 5 升級
了解如何升級至 PreEmptive Protection - Dotfuscator Community 6。
依據您的安裝歷程記錄和 Visual Studio 版本而定,您目前可能執行舊的主要版本 Dotfuscator Community 5。 如果是的話,您應該升級,因為確保程式碼有最新的保護措施相當重要。 免費提供升級。
本文說明如何判斷您目前擁有的版本、如何在必要時升級至第 6 版,以及兩個版本之間已取代或移除哪些功能。
判斷 Dotfuscator 版本
如果您不確定您正在執行的 Dotfuscator 版本,您可以執行下列其中一個選項來判斷版本:
移至 Visual Studio 的 [工具] 功能表,然後選取 [PreEmptive Protection - Dotfuscator Community],以啟動 Dotfuscator Community 圖形化使用者介面。
從 Dotfuscator GUI 中,開啟 [說明] 功能表,然後選取 [關於...] 以顯示 [關於] 畫面。
此畫面會列出 Dotfuscator 的版本。
如果您已命令列介面 (例如 Xamarin 應用程式) 將 Dotfuscator 整合至您的組建,您也可以檢查您的組建記錄檔中是否有如下列範例的程式碼行:
Dotfuscator Community Version 5.42.0.9514-e0e25f754
您可能需要增加組建的詳細程度,才能看到此文字。 針對 Visual Studio,請參閱詳細程度設定。
版本的第一個整數,在第一個點 .
前面,表示 Dotfuscator 的主要版本。 如果第一個整數是 5
,則您應該在此頁面上執行升級步驟,以便利用最新的 Dotfuscator 6 功能和保護更新。
升級指示
本節包含將 Dotfuscator Community 一般使用方式從第 5 版升級至第 6 版的指示集。
安裝 Dotfuscator 6
Dotfuscator Community 會散發為 Visual Studio 的延伸模組。 安裝 Dotfuscator 6 的指示會因您擁有的 Visual Studio 版本而異:
Visual Studio 2022 Dotfuscator Community 6 包含在 Visual Studio 2022 中。
Visual Studio 2019 Dotfuscator Community 6 隨附於更新版本的 Visual Studio 2019 (16.10.0 版和更新版本)。 更新 Visual Studio 2019 為最新版本。 更新 Visual Studio 會自動將任何 Dotfuscator Community 5 安裝升級至 Dotfuscator Community 6。
如果您尚未安裝 Dotfuscator,請先更新 Visual Studio,然後查看安裝。
除了 Visual Studio 的版本之外,您一律可以從 Dotfuscator 下載 頁面取得最新版本的 Dotfuscator Community。
Visual Studio 2017 這個版本的 Visual Studio 僅隨附於 Dotfuscator Community 5。 不過,您可以移至 Dotfuscator 下載 頁面,然後選取適當的下載連結,以安裝或升級至 Dotfuscator Community 6。
執行下載的
.vsix
檔案,並依照提示將 Dotfuscator Community 6 安裝到 Visual Studio。 現有的 Dotfuscator Community 5 安裝也會升級。舊版 Visual Studio Dotfuscator Community 6 在這些版本的 Visual Studio 中不受支援。 建議您升級至較新版本的 Visual Studio,或從 Dotfuscator Community 升級至 Dotfuscator Professional。
如果您先前已註冊 Dotfuscator Community 5,該註冊會在您第一次執行 Dotfuscator Community 6 時自動轉換。
更新 CLI 的路徑
如果您先前使用 Dotfuscator 5 的命令列介面 (CLI) 來保護您的應用程式,您必須在參考它的任何專案和建置指令碼中,更新 CLI 的路徑。 其中包含使用 Dotfuscator Community Xamarin 整合的專案。
Dotfuscator CLI 路徑現在可能不正確的原因,是因為與 Dotfuscator Community 一起安裝的一些可執行檔名稱在 Dotfuscator 6 中已變更。 這項變更讓這些可執行檔名稱在 Dotfuscator Community 和 Dotfuscator Professional 之間相同。
適用於以下項目的可執行檔... | Dotfuscator 5 | Dotfuscator 6 |
---|---|---|
GUI | dotfuscator.exe |
dotfuscatorUI.exe |
CLI | dotfuscatorCLI.exe |
dotfuscator.exe |
注意
如果您在主要版本的 Visual Studio 之間升級或切換 Visual Studio 版本,因為 Dotfuscator CLI 是安裝在 Visual Studio 的安裝目錄下,所以 CLI 路徑也可能無效。 下列徵兆和解決方案也適用於此案例。
如果您的組建使用不正確 Dotfuscator CLI 路徑,您可能會收到錯誤,例如下列其中一個範例:
'"[...]\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe"' is not recognized as an internal or external command, operable program or batch file.
The command ""[...]\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe" Dotfuscator.xml" exited with code 9009.
When the DotfuscatorXamarinEnabled property is 'true', the Dotfuscator command line interface specified by DotfuscatorXamarinCliPath ('[...]\DotfuscatorCE\dotfuscatorCLI.exe') must exist.
若要更新組建以使用正確的 CLI 路徑:
移至 Visual Studio 的 [工具] 功能表,然後選取 [PreEmptive Protection - Dotfuscator Community],以啟動 Dotfuscator Community GUI。
在 Dotfuscator Community GUI 中,移至 [工具] 功能表,然後選取 [Dotfuscator 命令提示字元]。
在開啟的命令提示字元中,輸入
where dotfuscator.exe
。 複製顯示到純文字文件的第一個路徑,以供稍後參考。 此路徑是 Dotfuscator Community 6 CLI 的新路徑。依據您的組建系統開啟專案或建置組態。
找出專案或建置組態中使用 Dotfuscator Community 5 CLI 舊路徑的任何位置。 通常是以
dotfuscatorCLI.exe
結尾的路徑。- 使用 Dotfuscator Community 的 Xamarin 整合來更新專案時,舊路徑位於
<DotfuscatorXamarinCliPath>
和</DotfuscatorXamarinCliPath>
標記之間。
- 使用 Dotfuscator Community 的 Xamarin 整合來更新專案時,舊路徑位於
以您在步驟 3 中記下的新路徑取代步驟 5 中的舊路徑。
如果其中一個舊路徑不是絕對路徑,則您應該根據內容適當地調整新路徑。 在下列範例中,
VSInstallDir
環境變數用於舊路徑中,因此對應的新路徑應該使用相同的項目。- 步驟 3 的新路徑:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe
- 專案檔中的舊路徑:
%VSInstallDir%\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe
- 專案檔中的新路徑:
%VSInstallDir%\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe
- 步驟 3 的新路徑:
如果您使用原始程式碼控制系統,例如 Git,請確定步驟 6 中的變更會反映在該系統中。 依據您的系統和組織的需求,將這些變更散發給小組的其餘成員。
警告
由於 dotfuscator.exe
在 Dotfuscator 5 中參考圖形化使用者介面 (GUI),但是在 Dotfuscator 6 中參考命令列介面 (CLI),因此在更新跨多部電腦共用的建置指令碼時請小心。
已安裝 Dotfuscator 5 的電腦執行針對 Dotfuscator 6 更新的指令碼,會導致指令碼啟動圖形化使用者介面,而不是預期的命令列介面。 這可能會導致建置成功,儘管未套用 Dotfuscator 的保護,這表示您的輸出套件將不會受到保護。
在其他情況下,反而會造成建置失敗。
若要避免這些案例,請同時將所有電腦和建置指令碼的 Dotfuscator Community 從第 5 版升級至第 6 版。
升級 Dotfuscator 組態檔
在 Dotfuscator 6 以前建立的所有 Dotfuscator 組態檔 (例如 Dotfuscator.xml
) 都必須升級。
如果您嘗試使用舊組態檔執行 Dotfuscator CLI,您會收到類似下列範例的錯誤:
Dotfuscator Engine Initialization error: PreEmptive Analytics, Authenticode signing, and the Introduce Explicit Method Overrides setting are no longer supported. Please open your Dotfuscator config in the Config Editor which automatically upgrades it.
重要
即使您未使用所述的功能,您仍會收到此錯誤,而且需要升級組態檔。
若要升級組態檔:
移至 Visual Studio 的 [工具] 功能表,然後選取 [PreEmptive Protection - Dotfuscator Community],以啟動 Dotfuscator Community 圖形化使用者介面。
開啟有問題的 Dotfuscator 組態檔 (Ctrl+O)。
[建置輸出] 索引標籤中會顯示下面這則訊息:
PreEmptive Analytics, Authenticode signing, and the Introduce Explicit Method Overrides setting are no longer supported. The associated settings have been removed. Please save your upgraded Dotfuscator config.
儲存更新後的 Dotfuscator 組態檔 (Ctrl+S)。
如果您使用原始程式碼控制系統,例如 Git,請確定 Dotfuscator 組態檔的變更會反映在該系統中。 依據您的系統和組織的需求,將這些變更散發給小組的其餘成員。
更新 Xamarin 整合
如果您將 Dotfuscator Community 5 整合到 Xamarin 專案中,其中一個步驟需要您下載自訂 MSBuild 目標和工作,例如 PreEmptive.Dotfuscator.Xamarin.targets
。 Dotfuscator Community 6 中已更新這些目標和工作,因此您必須以新版本取代舊版。
若要更新 Xamarin 整合檔案:
找出您最初下載這些檔案的目錄。 指示中提供的範例會使用名為
PreEmptive.Dotfuscator.Xamarin
的子目錄,但是您可能已經將檔案下載到不同的目錄,而該目錄可能與 Dotfuscator 無關。在步驟 1 的目錄中,刪除與 Dotfuscator Xamarin 整合相關的檔案。
下載在下列「使用者指南」區段目前版本連結的 ZIP 檔案:下載 Dotfuscator 的自訂 MSBuild 目標和工作集。
將 ZIP 檔案的內容解壓縮到與步驟 1 中所述相同的目錄。
如果您使用原始程式碼控制系統,例如 Git,請確定移除舊檔案,且新增新檔案會反映在該系統中。 依據系統類型而定,這些變更可能會顯示為檔案變更內容,而不是被取代。 依據您的系統和組織的需求,將這些變更散發給小組的其餘成員。
此頁面中的其他小節也適用於 Xamarin 專案,因此請務必檢閱此頁面的其餘指示。
更新屬性程式庫的參考
Dotfuscator 可讓您透過原始程式碼中的 .NET 屬性 來設定特定功能。 如果您的專案使用這類屬性,您可能需要更新它們以處理 Dotfuscator 6 中的變更。
混淆屬性
混淆屬性沒有變更。 這些屬性定義在 .NET 基底類別程式庫中,Dotfuscator Community 6 會繼續接受這些屬性。
檢查屬性
包含檢查屬性的程式庫已變更。 在 Dotfuscator Community 5 中,它會與 Dotfuscator 本身一起以檔案的形式散發。 從 Dotfuscator Community 6 開始,它會改為以公用 NuGet 套件的形式散發。
如果您嘗試建置仍然參考舊位置的 Visual Studio 專案,您可能會收到類似下列範例的錯誤:
The type or namespace name 'PreEmptive' could not be found (are you missing a using directive or an assembly reference?)
The type or namespace name 'TamperCheckAttribute' could not be found (are you missing a using directive or an assembly reference?)
您也會收到此警告:
Could not resolve this reference. Could not locate the assembly "PreEmptive.Attributes". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
若要更新您的專案以使用新位置:
移除對
PreEmptive.Attributes.dll
的專案組件參考。將 NuGet 套件參考
PreEmptive.Protection.Checks.Attributes
新增至專案。 套件可在預設 NuGet 摘要 nuget.org 上取得。
也會移除每個檢查屬性的 ExtendedKey
參數。
Dotfuscator Community 5 中會忽略這些參數,但是如果您的原始程式碼使用它們,請移除這些使用方式,讓您的專案進行編譯。
檢測屬性
檢測屬性可用來在 Dotfuscator 5 中設定 PreEmptive Analytics 功能。 不過,Dotfuscator 6 中已移除 PreEmptive Analytics;請參閱「已移除的功能」子區段 PreEmptive Analytics。 因此,檢測屬性也已移除。
如果您嘗試建置使用檢測屬性的 Visual Studio 專案,您可能會收到與檢查屬性中所述相同的錯誤和警告類型,不過屬性名稱不同 (例如,FeatureAttribute
而不是 TamperCheckAttribute
)。
如果您嘗試在包含檢測屬性使用方式的已建置組件上執行 Dotfuscator,您會收到類似下列範例的錯誤:
The PreEmptive.Attributes.FeatureAttribute attribute (annotating SomeNamespace.SomeType::SomeMethod) is not recognized by this version of Dotfuscator.
若要修正這些問題,請從原始程式碼中移除檢測屬性的所有使用方式。
您也需要移除定義屬性之程式庫的組件參考,PreEmptive.Attributes.dll
。
(如果您也使用此程式庫中定義的檢查屬性,它們已移動;請參閱上述檢查屬性。)
已移除的功能
Dotfuscator Community 6 引進 Dotfuscator Community 5 的中斷性變更。 如果您使用 Dotfuscator Community 5,本節說明如何處理可能需要建置修改或影響 Dotfuscator 輸出的變更。
變更記錄中提供變更的完整清單。
PreEmptive Analytics
Dotfuscator 6 不支援 PreEmptive Analytics,包括檢查遙測。 不過,仍然支援檢查本身 (包括 應用程式更新和檢查動作)。
若要使用 Dotfuscator 6,升級組態檔以移除 PreEmptive Analytics 設定。
如果您使用程式碼內屬性來設定 PreEmptive Analytics,從原始程式碼中移除它們,並重建輸入組件,然後 Dotfuscator 6 才能保護這些組件。
如果您使用檢查遙測在檢查偵測到無效狀態時回報 (例如偵測到竄改時),您可以使用自訂應用程式更新加以取代,將事件報告至 Azure Application Insights 或您選擇的其他服務。
不支援的應用程式類型
Dotfuscator 6 中不再支援下列應用程式類型:
- Windows Phone
- WinRT (Windows 8 應用程式)
- Silverlight
- Unity (遊戲引擎)
此外,只有 Xamarin 案例才支援通用 Windows 平台 (UWP) 應用程式。
若要保護其他類型的 UWP 應用程式,請升級至 Dotfuscator Professional,並遵循保護您的應用程式指示。
不支援的輸入
Dotfuscator Community 不再支援通用 Windows 平台 (UWP) .appx
套件作為輸入。 您可以使用 Xamarin 整合,繼續保護以 UWP 為目標的 Xamarin 應用程式。 若要保護其他類型的 UWP 應用程式,請升級至 Dotfuscator Professional,並遵循保護您的應用程式指示。
此外,.xap
套件無法再作為輸入使用,因為不再支援 Silverlight。
引進明確的方法覆寫
已從 Dotfuscator 移除用於引進明確方法覆寫的重新命名選項。 若要使用 Dotfuscator 6,升級組態檔以移除此設定。
完整文件
如需詳細的使用指示,請參閱 preemptive.com 上的完整 Dotfuscator Community 使用者指南,其中包含如何開始使用 Dotfuscator Community 使用者介面。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: