溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

發(fā)布時(shí)間:2020-07-02 00:00:27 來源:網(wǎng)絡(luò) 閱讀:906 作者:wangccsy 欄目:移動(dòng)開發(fā)

老實(shí)說,發(fā)布一個(gè)庫、桌面應(yīng)用程序或移動(dòng)應(yīng)用程序可能有點(diǎn)嚇人。一旦你的軟件可以免費(fèi)提供給世界,你就失去了如何使用它的某種程度的控制權(quán)。特別是,開發(fā)人員經(jīng)常擔(dān)心逆向工程的威脅。

在許多平臺(tái)和語言中,代碼混淆工具是防止逆向工程的常見方法。例如,如果你是一個(gè)Android開發(fā)者,你可能已經(jīng)使用到收縮和混淆的java代碼。

現(xiàn)在,Xamarin的開發(fā)商獲得同樣的保護(hù),在所有主要的移動(dòng)設(shè)備的家庭,將Android和iOS移植到通用的Windows(UWP)。完成這個(gè)工作 的工具叫做 Dotfuscator, 社區(qū)版本 在 Visual Studio中已經(jīng)可以使用了。

今天,我將解釋如何混淆可以保護(hù)Xamarin。Android應(yīng)用程序從逆向工程,以及如何你可以把同樣的保護(hù)自己的Xamarin程序簡(jiǎn)單的幾個(gè)步驟。

混淆如何保護(hù)應(yīng)用程序

混淆是一個(gè)應(yīng)用程序編譯的代碼轉(zhuǎn)換成功能相同但難于逆向工程的代碼的過程。通常,這是由一個(gè)自動(dòng)混淆工具完成的,比如 obfuscator。下面是一個(gè)簡(jiǎn)單的例子,演示如何防止反工程混淆應(yīng)用程序。

考慮下面的一個(gè)Xamarin.Android 游戲源代碼中的一個(gè)C#方法:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

當(dāng)這個(gè)游戲的開發(fā)人員準(zhǔn)備將它部署到設(shè)備上,或者上傳到應(yīng)用程序商店時(shí),他們將源代碼編譯成庫,然后將這些庫打包到一個(gè)應(yīng)用程序包中。在這個(gè)例子中,開發(fā)商包庫到Android設(shè)備上分配一個(gè)apk文件。

然而,一旦應(yīng)用程序發(fā)布到App Store,一個(gè)糟糕的演員可以很容易地獲取和逆向APK,生產(chǎn)反編譯的代碼,和原始的源代碼幾乎相同:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

注意,類型、方法和成員標(biāo)識(shí)符在這里與源代碼中的標(biāo)識(shí)符相同,即使這些代碼元素通常不能從項(xiàng)目外部訪問(也就是說,它們被標(biāo)記為internal)。internal要注意,該方法的一般控制流,如if語句的順序,是顯而易見的。 

如果,在分發(fā)的apk,開發(fā)商也通過Dotfuscator社區(qū)版混淆這個(gè)庫,逆向工程的結(jié)果會(huì)不同:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

代碼已被重命名混淆保護(hù),代碼混淆的一種基本形式。名稱簡(jiǎn)單的屬性, 比如ArrowsOnHand,取而代之的是方法調(diào)用與直觀的名字, 諸如b 和 g。其他代碼元素也同樣被重命名。這使得對(duì)反編譯后的代碼更難閱讀和推理,作為重要的上下文線索提供的名稱不可用。

重命名混淆是這個(gè)博客文章的主要焦點(diǎn),但是我們將討論更高級(jí)的混淆形式,以及如何在以后應(yīng)用它們。

如何保護(hù)你的應(yīng)用程序

現(xiàn)在,讓我們來看看如何整合Dotfuscator 社區(qū)版重合名混淆到你的Xamarin構(gòu)建管道中。作為一個(gè)例子,我將使用Xamarin.Android應(yīng)用程序在上一節(jié)中提到的。你可以按照你自己的Xamarin APP,包括iOS和UWP。

我們將使用 優(yōu)先保護(hù) – Dotfuscator, 一個(gè) .NET 混淆器和保護(hù)工具,現(xiàn)在也支持Xamarin。

注:這些步驟假設(shè)您正在為Windows開發(fā)VisualStudio 2017的應(yīng)用程序。

安裝和設(shè)置Dotfuscator

首先,你需要在你的開發(fā)機(jī)上安裝Dotfuscator。之后我們將使用Dotfuscator的命令行接口,您還需要注冊(cè)您的副本并記錄到接口的路徑。

安裝和設(shè)置Dotfuscator:

  1. 訪問 Dotfuscator 下載 面,它在優(yōu)先解決網(wǎng)站。

  2. 下載Visual Studio 2017最新的Dotfuscator 社區(qū)版 (CE) 。

  • Visual Studio包含了 Dotfuscator,P優(yōu)先解決偶爾發(fā)布重要更新將Visual Studio版本之間。 安裝Dotfuscator方法是確認(rèn)你已經(jīng)更新到最新版本。

遵照指示運(yùn)行你下載的VSIX 文件。 打開Visual Studio 2017并選擇 Tools -> PreEmptive Protection – Dotfuscator 來加載Dotfuscator社區(qū)版用戶接口。 在你使用命令行接口之前首先要注冊(cè)Dotfuscator的一個(gè)拷貝。在你第一次運(yùn)行時(shí)也被要求注冊(cè)Dotfuscator;按照指示。
  •  注冊(cè)以后 或者檢查你的注冊(cè)狀態(tài),查找 注冊(cè)狀態(tài) 文本,在Dotfuscator社區(qū)版的開始頁的右上角。

你要知道命令行接口的路徑,以方便以后配置集成構(gòu)建。找到路徑:
  • dotfuscatorCLI.exe是Dotfuscator 社區(qū)版命令行接口,記下可執(zhí)行文件 的絕對(duì)路徑,以后會(huì)用到。

  • 在這個(gè)路徑中,定位 Dotfuscator 社區(qū)版擴(kuò)展文件,它在 *\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE。

  • 瀏覽你安裝Visual Studio 2017的路徑。比如Visual Studio 2017 專業(yè)版的默認(rèn)安裝路徑是 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional。

下載構(gòu)建集成文件

簡(jiǎn)化集成過程,Dotfuscator組創(chuàng)建了MSBuild目標(biāo)文件,你可以參考Xamarin項(xiàng)目。 你也可以從這里下載。

保存PreEmptive.Dotfuscator.Xamarin.targets 文件到你的解決方案路徑,并受控。

修改項(xiàng)目使用集成構(gòu)建

下一步,修改想要混淆的Visual Studio項(xiàng)目的項(xiàng)目文件。步驟如下:

  1. 注意你想要保護(hù)的項(xiàng)目的 構(gòu)建配置。 通常這些都是除了Debug配置之外的所有配置。查看更多指導(dǎo),請(qǐng)參閱從完全文檔中選擇如何保護(hù)一節(jié)。

  2. 在文本編輯器中打開項(xiàng)目文件。一個(gè) C#的樣例項(xiàng)目將是`YourProjectName.csproj`。

  3. 請(qǐng)注意從該文件到您下載的構(gòu)建集成文件的相對(duì)路徑。

  4. 通過在文件中添加以下行導(dǎo)入構(gòu)建集成文件, 在</Project> 標(biāo)簽之后:

  • <Import Project="..\..\PreEmptive.Dotfuscator.Xamarin.targets" />,使用步驟3中提到的絕對(duì)路徑。

要<PropertyGroup> 標(biāo)簽之下,沒有條件屬性,并添加下面的標(biāo)簽:
  • <DotfuscatorXamarinCliPath>C:\pathto\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>, 用絕對(duì)路徑替代你之前記錄的Dotfuscator社區(qū)版命令行接口。

  • <DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>

  • <DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>

在步驟1中提到的每個(gè)構(gòu)建配置,定位到 <PropertyGroup>并添加下面的標(biāo)簽:
  • <DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled>

在最后的<ItemGroup> 標(biāo)簽之后,加入下面的內(nèi)容:
  • <ItemGroup><None Include="DotfuscatorConfig.xml" /></ItemGroup>

保存并關(guān)閉這個(gè)文件。

構(gòu)建應(yīng)用程序

現(xiàn)在你可以使用Dotfuscator的混淆保護(hù)來構(gòu)建你的應(yīng)用程序。這樣做:

  1. 在Visual Studio中打開并重新加載你的項(xiàng)目。

  2. 選擇一個(gè)解決方案生成配置,以執(zhí)行您決定保護(hù)的項(xiàng)目構(gòu)建配置。

  3. 構(gòu)建這個(gè)項(xiàng)目。

  4. 在第一次構(gòu)建之后,注意建立輸出包含以下幾行關(guān)于Dotfuscator:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

  1. 注意添加一個(gè)DotfuscatorConfig.xml文件到你的工程中。它是Dotfuscator配置文件,告訴Dotfuscator如何混淆代碼。建議查看源代碼控制。

  2. 在文件系統(tǒng)中,注意新的DotfuscatorReports路徑會(huì)出面在你的項(xiàng)目路徑中。這個(gè)路徑包含了項(xiàng)目如何被混淆的信息,包括了如何逆向和重命名處理。您應(yīng)該像構(gòu)建輸出那樣對(duì)待該目錄,并擁有源代碼管理器忽略它。

  3. 測(cè)試應(yīng)用程序,如果看到錯(cuò)誤,需要配置Dotfuscator further進(jìn)一步確定正確的保護(hù)行為。請(qǐng)參見下一節(jié)以供參考。

  4. 繼續(xù)開發(fā)應(yīng)用,像平常一樣構(gòu)建。當(dāng)Dotfuscator 用于構(gòu)建,構(gòu)建輸出會(huì)包含如下幾行:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

有關(guān)使用混淆繼續(xù)開發(fā)的更多信息, 請(qǐng)查看Dotfuscator 用戶指南的 持續(xù)發(fā)展 一節(jié)。

配置重命名

在某些情況下,應(yīng)用程序假定編譯時(shí)代碼元素的名稱在運(yùn)行時(shí)是相同的。這是特別真實(shí)的Xamarin程序,依靠XAML和反射。重命名混淆可以打破這個(gè)假設(shè),造成混淆的應(yīng)用程序有不同的表現(xiàn)。

而新的版本將能夠更好的自動(dòng)處理這些場(chǎng)景,某些情況下,可能需要手動(dòng)配置。用于說明和示例,請(qǐng)查看Dotfuscator用戶指南的 確定重命名排除 頁。

高級(jí)的混淆

而不是免費(fèi)的Dotfuscator大眾版,你也可以使用 Dotfuscator專業(yè)片混淆你的Xamarin應(yīng)用。 專業(yè)版是許可用于商業(yè)產(chǎn)品,并且自由試用也是允許更新請(qǐng)求的。

查看社區(qū)版和專業(yè)版的差別,考慮早期的游戲示例。如果開發(fā)者通過Dotfuscator專業(yè)版代表社區(qū)版來保護(hù)庫,逆向工程的結(jié)果看起來更像:

使用Dotfuscator保護(hù)你的Xamarin應(yīng)用程序

除了重命名混淆,此代碼現(xiàn)在也通過控制流混淆保護(hù)。原始代碼的語句分散在鈍角的“開關(guān)”塊中 以看似隨機(jī)的順序, 使它很難跟隨。這些和其它混淆的高級(jí)形式都是Dotfuscator專業(yè)版特有的。

總結(jié)

在這篇博客中,我們看到了如何使用Dotfuscator來保護(hù)Xamarin庫和應(yīng)用程序,使之不容易被逆向工程。我使用了一個(gè)Android應(yīng)用程序來做例子,這些步驟同樣適用于iOS和UWP項(xiàng)目,While I used an Android app as an example, these same steps can also be applied to iOS and UWP projects,所以你可以保護(hù)你的應(yīng)用程序,不管它運(yùn)行在什么平臺(tái)上。

如何使用Dotfuscator保護(hù)Xamarin工程的更多信息,可以查閱 Dotfuscator用戶指南的Xamarin頁。 這里有所有平臺(tái)的集成Dotfuscator到一個(gè)Xamarin工程的git倉庫。

你也可以通過訪問 優(yōu)先解決方案博客來獲取混淆空間的最新開發(fā)草席, 也可以在 twitter.com/preemptive跟隨優(yōu)先解決。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI