您好,登錄后才能下訂單哦!
老實(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è)步驟。
混淆是一個(gè)應(yīng)用程序編譯的代碼轉(zhuǎn)換成功能相同但難于逆向工程的代碼的過程。通常,這是由一個(gè)自動(dòng)混淆工具完成的,比如 obfuscator。下面是一個(gè)簡(jiǎn)單的例子,演示如何防止反工程混淆應(yīng)用程序。
考慮下面的一個(gè)Xamarin.Android 游戲源代碼中的一個(gè)C#方法:
當(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)反編譯的代碼,和原始的源代碼幾乎相同:
注意,類型、方法和成員標(biāo)識(shí)符在這里與源代碼中的標(biāo)識(shí)符相同,即使這些代碼元素通常不能從項(xiàng)目外部訪問(也就是說,它們被標(biāo)記為internal)。internal要注意,該方法的一般控制流,如if語句的順序,是顯而易見的。
如果,在分發(fā)的apk,開發(fā)商也通過Dotfuscator社區(qū)版混淆這個(gè)庫,逆向工程的結(jié)果會(huì)不同:
代碼已被重命名混淆保護(hù),代碼混淆的一種基本形式。名稱簡(jiǎn)單的屬性, 比如ArrowsOnHand,取而代之的是方法調(diào)用與直觀的名字, 諸如b 和 g。其他代碼元素也同樣被重命名。這使得對(duì)反編譯后的代碼更難閱讀和推理,作為重要的上下文線索提供的名稱不可用。
重命名混淆是這個(gè)博客文章的主要焦點(diǎn),但是我們將討論更高級(jí)的混淆形式,以及如何在以后應(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)用程序。
首先,你需要在你的開發(fā)機(jī)上安裝Dotfuscator。之后我們將使用Dotfuscator的命令行接口,您還需要注冊(cè)您的副本并記錄到接口的路徑。
安裝和設(shè)置Dotfuscator:
訪問 Dotfuscator 下載 面,它在優(yōu)先解決網(wǎng)站。
下載Visual Studio 2017最新的Dotfuscator 社區(qū)版 (CE) 。
Visual Studio包含了 Dotfuscator,P優(yōu)先解決偶爾發(fā)布重要更新將Visual Studio版本之間。 安裝Dotfuscator方法是確認(rèn)你已經(jīng)更新到最新版本。
注冊(cè)以后 或者檢查你的注冊(cè)狀態(tài),查找 注冊(cè)狀態(tài) 文本,在Dotfuscator社區(qū)版的開始頁的右上角。
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。
簡(jiǎn)化集成過程,Dotfuscator組創(chuàng)建了MSBuild目標(biāo)文件,你可以參考Xamarin項(xiàng)目。 你也可以從這里下載。
保存PreEmptive.Dotfuscator.Xamarin.targets 文件到你的解決方案路徑,并受控。
下一步,修改想要混淆的Visual Studio項(xiàng)目的項(xiàng)目文件。步驟如下:
注意你想要保護(hù)的項(xiàng)目的 構(gòu)建配置。 通常這些都是除了Debug配置之外的所有配置。查看更多指導(dǎo),請(qǐng)參閱從完全文檔中選擇如何保護(hù)一節(jié)。
在文本編輯器中打開項(xiàng)目文件。一個(gè) C#的樣例項(xiàng)目將是`YourProjectName.csproj`。
請(qǐng)注意從該文件到您下載的構(gòu)建集成文件的相對(duì)路徑。
通過在文件中添加以下行導(dǎo)入構(gòu)建集成文件, 在</Project> 標(biāo)簽之后:
<Import Project="..\..\PreEmptive.Dotfuscator.Xamarin.targets" />,使用步驟3中提到的絕對(duì)路徑。
<DotfuscatorXamarinCliPath>C:\pathto\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>, 用絕對(duì)路徑替代你之前記錄的Dotfuscator社區(qū)版命令行接口。
<DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
<DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
<DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled>
<ItemGroup><None Include="DotfuscatorConfig.xml" /></ItemGroup>
現(xiàn)在你可以使用Dotfuscator的混淆保護(hù)來構(gòu)建你的應(yīng)用程序。這樣做:
在Visual Studio中打開并重新加載你的項(xiàng)目。
選擇一個(gè)解決方案生成配置,以執(zhí)行您決定保護(hù)的項(xiàng)目構(gòu)建配置。
構(gòu)建這個(gè)項(xiàng)目。
在第一次構(gòu)建之后,注意建立輸出包含以下幾行關(guān)于Dotfuscator:
注意添加一個(gè)DotfuscatorConfig.xml文件到你的工程中。它是Dotfuscator配置文件,告訴Dotfuscator如何混淆代碼。建議查看源代碼控制。
在文件系統(tǒng)中,注意新的DotfuscatorReports路徑會(huì)出面在你的項(xiàng)目路徑中。這個(gè)路徑包含了項(xiàng)目如何被混淆的信息,包括了如何逆向和重命名處理。您應(yīng)該像構(gòu)建輸出那樣對(duì)待該目錄,并擁有源代碼管理器忽略它。
測(cè)試應(yīng)用程序,如果看到錯(cuò)誤,需要配置Dotfuscator further進(jìn)一步確定正確的保護(hù)行為。請(qǐng)參見下一節(jié)以供參考。
繼續(xù)開發(fā)應(yīng)用,像平常一樣構(gòu)建。當(dāng)Dotfuscator 用于構(gòu)建,構(gòu)建輸出會(huì)包含如下幾行:
有關(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用戶指南的 確定重命名排除 頁。
而不是免費(fèi)的Dotfuscator大眾版,你也可以使用 Dotfuscator專業(yè)片混淆你的Xamarin應(yīng)用。 專業(yè)版是許可用于商業(yè)產(chǎn)品,并且自由試用也是允許更新請(qǐng)求的。
查看社區(qū)版和專業(yè)版的差別,考慮早期的游戲示例。如果開發(fā)者通過Dotfuscator專業(yè)版代表社區(qū)版來保護(hù)庫,逆向工程的結(jié)果看起來更像:
除了重命名混淆,此代碼現(xiàn)在也通過控制流混淆保護(hù)。原始代碼的語句分散在鈍角的“開關(guān)”塊中 以看似隨機(jī)的順序, 使它很難跟隨。這些和其它混淆的高級(jí)形式都是Dotfuscator專業(yè)版特有的。
在這篇博客中,我們看到了如何使用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)先解決。
免責(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)容。