使用Dotfuscator保護你的Xamarin應用程序
老實說,發布一個庫、桌面應用程序或移動應用程序可能有點嚇人。一旦你的軟件可以免費提供給世界,你就失去了如何使用它的某種程度的控制權。特別是,開發人員經常擔心逆向工程的威脅。
在許多平臺和語言中,代碼混淆工具是防止逆向工程的常見方法。例如,如果你是一個Android開發者,你可能已經使用到收縮和混淆的java代碼。
現在,Xamarin的開發商獲得同樣的保護,在所有主要的移動設備的家庭,將Android和iOS移植到通用的Windows(UWP)。完成這個工作 的工具叫做 Dotfuscator, 社區版本 在 Visual Studio中已經可以使用了。
今天,我將解釋如何混淆可以保護Xamarin。Android應用程序從逆向工程,以及如何你可以把同樣的保護自己的Xamarin程序簡單的幾個步驟。
混淆如何保護應用程序
混淆是一個應用程序編譯的代碼轉換成功能相同但難於逆向工程的代碼的過程。通常,這是由一個自動混淆工具完成的,比如 obfuscator。下面是一個簡單的例子,演示如何防止反工程混淆應用程序。
考慮下面的一個Xamarin.Android 遊戲源代碼中的一個C#方法:
當這個遊戲的開發人員準備將它部署到設備上,或者上傳到應用程序商店時,他們將源代碼編譯成庫,然後將這些庫打包到一個應用程序包中。在這個例子中,開發商包庫到Android設備上分配一個apk文件。
然而,一旦應用程序發布到App Store,一個糟糕的演員可以很容易地獲取和逆向APK,生產反編譯的代碼,和原始的源代碼幾乎相同:
註意,類型、方法和成員標識符在這裏與源代碼中的標識符相同,即使這些代碼元素通常不能從項目外部訪問(也就是說,它們被標記為internal)。internal要註意,該方法的一般控制流,如if語句的順序,是顯而易見的。
如果,在分發的apk,開發商也通過Dotfuscator社區版混淆這個庫,逆向工程的結果會不同:
代碼已被重命名混淆保護,代碼混淆的一種基本形式。名稱簡單的屬性, 比如ArrowsOnHand,取而代之的是方法調用與直觀的名字, 諸如b 和 g。其他代碼元素也同樣被重命名。這使得對反編譯後的代碼更難閱讀和推理,作為重要的上下文線索提供的名稱不可用。
重命名混淆是這個博客文章的主要焦點,但是我們將討論更高級的混淆形式,以及如何在以後應用它們。
如何保護你的應用程序
現在,讓我們來看看如何整合Dotfuscator 社區版重合名混淆到你的Xamarin構建管道中。作為一個例子,我將使用Xamarin.Android應用程序在上一節中提到的。你可以按照你自己的Xamarin APP,包括iOS和UWP。
我們將使用 優先保護 – Dotfuscator, 一個 .NET 混淆器和保護工具,現在也支持Xamarin。
註:這些步驟假設您正在為Windows開發VisualStudio 2017的應用程序。
安裝和設置Dotfuscator
首先,你需要在你的開發機上安裝Dotfuscator。之後我們將使用Dotfuscator的命令行接口,您還需要註冊您的副本並記錄到接口的路徑。
安裝和設置Dotfuscator:
訪問 Dotfuscator 下載 面,它在優先解決網站。
下載Visual Studio 2017最新的Dotfuscator 社區版 (CE) 。
Visual Studio包含了 Dotfuscator,P優先解決偶爾發布重要更新將Visual Studio版本之間。 安裝Dotfuscator方法是確認你已經更新到最新版本。
註冊以後 或者檢查你的註冊狀態,查找 註冊狀態 文本,在Dotfuscator社區版的開始頁的右上角。
dotfuscatorCLI.exe是Dotfuscator 社區版命令行接口,記下可執行文件 的絕對路徑,以後會用到。
在這個路徑中,定位 Dotfuscator 社區版擴展文件,它在 *\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE。
瀏覽你安裝Visual Studio 2017的路徑。比如Visual Studio 2017 專業版的默認安裝路徑是 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional。
下載構建集成文件
簡化集成過程,Dotfuscator組創建了MSBuild目標文件,你可以參考Xamarin項目。 你也可以從這裏下載。
保存PreEmptive.Dotfuscator.Xamarin.targets 文件到你的解決方案路徑,並受控。
修改項目使用集成構建
下一步,修改想要混淆的Visual Studio項目的項目文件。步驟如下:
註意你想要保護的項目的 構建配置。 通常這些都是除了Debug配置之外的所有配置。查看更多指導,請參閱從完全文檔中選擇如何保護一節。
在文本編輯器中打開項目文件。一個 C#的樣例項目將是`YourProjectName.csproj`。
請註意從該文件到您下載的構建集成文件的相對路徑。
通過在文件中添加以下行導入構建集成文件, 在</Project> 標簽之後:
<Import Project="..\..\PreEmptive.Dotfuscator.Xamarin.targets" />,使用步驟3中提到的絕對路徑。
<DotfuscatorXamarinCliPath>C:\pathto\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>, 用絕對路徑替代你之前記錄的Dotfuscator社區版命令行接口。
<DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
<DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
<DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled>
<ItemGroup><None Include="DotfuscatorConfig.xml" /></ItemGroup>
構建應用程序
現在你可以使用Dotfuscator的混淆保護來構建你的應用程序。這樣做:
在Visual Studio中打開並重新加載你的項目。
選擇一個解決方案生成配置,以執行您決定保護的項目構建配置。
構建這個項目。
在第一次構建之後,註意建立輸出包含以下幾行關於Dotfuscator:
註意添加一個DotfuscatorConfig.xml文件到你的工程中。它是Dotfuscator配置文件,告訴Dotfuscator如何混淆代碼。建議查看源代碼控制。
在文件系統中,註意新的DotfuscatorReports路徑會出面在你的項目路徑中。這個路徑包含了項目如何被混淆的信息,包括了如何逆向和重命名處理。您應該像構建輸出那樣對待該目錄,並擁有源代碼管理器忽略它。
測試應用程序,如果看到錯誤,需要配置Dotfuscator further進一步確定正確的保護行為。請參見下一節以供參考。
繼續開發應用,像平常一樣構建。當Dotfuscator 用於構建,構建輸出會包含如下幾行:
有關使用混淆繼續開發的更多信息, 請查看Dotfuscator 用戶指南的 持續發展 一節。
配置重命名
在某些情況下,應用程序假定編譯時代碼元素的名稱在運行時是相同的。這是特別真實的Xamarin程序,依靠XAML和反射。重命名混淆可以打破這個假設,造成混淆的應用程序有不同的表現。
而新的版本將能夠更好的自動處理這些場景,某些情況下,可能需要手動配置。用於說明和示例,請查看Dotfuscator用戶指南的 確定重命名排除 頁。
高級的混淆
而不是免費的Dotfuscator大眾版,你也可以使用 Dotfuscator專業片混淆你的Xamarin應用。 專業版是許可用於商業產品,並且自由試用也是允許更新請求的。
查看社區版和專業版的差別,考慮早期的遊戲示例。如果開發者通過Dotfuscator專業版代表社區版來保護庫,逆向工程的結果看起來更像:
除了重命名混淆,此代碼現在也通過控制流混淆保護。原始代碼的語句分散在鈍角的“開關”塊中 以看似隨機的順序, 使它很難跟隨。這些和其它混淆的高級形式都是Dotfuscator專業版特有的。
總結
在這篇博客中,我們看到了如何使用Dotfuscator來保護Xamarin庫和應用程序,使之不容易被逆向工程。我使用了一個Android應用程序來做例子,這些步驟同樣適用於iOS和UWP項目,While I used an Android app as an example, these same steps can also be applied to iOS and UWP projects,所以你可以保護你的應用程序,不管它運行在什麽平臺上。
如何使用Dotfuscator保護Xamarin工程的更多信息,可以查閱 Dotfuscator用戶指南的Xamarin頁。 這裏有所有平臺的集成Dotfuscator到一個Xamarin工程的git倉庫。
你也可以通過訪問 優先解決方案博客來獲取混淆空間的最新開發草席, 也可以在 twitter.com/preemptive跟隨優先解決。
本文出自 “wangccsy” 博客,轉載請與作者聯系!
使用Dotfuscator保護你的Xamarin應用程序