.net程序源代碼如何避免被反編譯

.net程序源代碼如何避免被反編譯

來自專欄 程序員技術分享

許多開發人員仍然不知道可移植的可執行文件(PE)文件是可以被編譯成可讀的源代碼。在學習如何防止或使反編譯器難以對源代碼進行反向編譯之前,我們需要了解一些基本概念。

什麼是可移植的可執行文件?

當源代碼被執行時,它會生成一個可移植的可執行文件。可移植的可執行文件(PE)不是DLL就是EXE。PE文件包含MSIL (Microsoft中間語言)和元數據。MSIL最終由CLR轉換為處理器能夠理解的本機代碼。元數據包含裝配信息,如程序集名稱、版本、文化和公鑰。

如何從DLL或EXE獲取源代碼?

是的,我們可以從DLL或EXE獲取源代碼。為了演示這一點,讓我們先創建一個簡單的應用程序。

打開Visual Studio,創建一個新的項目並選擇基於控制台的應用程序。

添加一些簡單的代碼:

using System; namespace MyConsoleApp{ internal class Program { private static void Main(string[] args) { Console.WriteLine(PublicMethod()); Console.WriteLine(PrivateMethod()); } public static string PublicMethod() { // Your source code here return "Public Method"; } private static string PrivateMethod() { // Your source code here return "Private Method"; } }}

現在編譯這個工程,會在bin/debug目錄下生成一個exe文件

現在我們試著從EXE文件獲取源代碼。

首先,打開Visual Studio命令提示符窗口:

鍵入ildasm 然後點擊回車鍵。 IL DASM is MSIL 是個反編譯程序,可以用來查看中間語言。

會打開IL DASM 窗口,現在我們打開剛剛編譯生成的Exe文件:

如上圖所示,IL DASM會犯編譯EXE文件,很多有用的信息可以被查看,儘管它並沒有完全提供原始的源代碼。我們可以使用市場上免費的反編譯器,比如Telerik JustDecompile和Jet brain dotPeek,通過這些工具我們可以將中間語言轉換成原始的源代碼。

如我們在上面的截圖中看到的,當我們打開EXE和Telerik JustDecompile,我們能夠看到原始的源代碼,這可能致使軟體被盜版,最終會對你造成損失。

如何防止EXE和DLL被反編譯?

保護EXE和DLL不被反編譯到原始源代碼的方法稱為混淆。有很多付費和免費的軟體可以提供混淆代碼的功能,讓.Net程序集代碼變得模糊,不易理解。Dotfucator是一個流行的混淆工具,這工具的社區版是免費的,並且包含在Visual Studio中。如果您有興趣購買其他版本,請查看此比較。Dofuscator社區版的功能有限,專業版非常昂貴。因此,一般我們不會通過使用他們而獲得利潤,相反,我們會在混淆問題上花很多錢。

混淆的最好的替代工具之一是ConfuserEx——它是一個完全免費的開源軟體。你可以去網上下載。

下載後,將zip解壓到一個文件夾中,然後運行ConfuserEx.exe。

將您想要保護的EXE拖放到ConfuserEx中,或者您可以手動選擇基礎目錄、輸出目錄並添加DDL或EXE。

一旦您完成了設置目錄並添加DLL或EXE,請到ConfuserEx的Settings選項卡。您可以向Gobal設置添加規則,也可以為每個DLL或EXE設置單獨的規則。

點擊「+」按鈕,你會看到規則下的「True」。現在點編輯規則(下面的按鈕「-」)。

單擊編輯規則,將出現一個新窗口,如下所示。點擊「+」按鈕。

您可以選擇不同的方法來增加保護級別。

只選擇「Anti - IL Dasm」和「Anti - Tamper」,這足以使它足夠強大,阻止反編譯。

點擊Done後,點擊「Protect 」Tab頁,然後點擊「保護」按鈕。

您可以在選擇的輸出目錄中找到受保護的DLL或EXE。

測試運行一下ConfusedEx生成的EXE或DLL,並檢查它是否工作正常。現在嘗試用反編工具反編譯。

正如我們所看到的,由ConfuserEx生成的混亂的DLL或EXE不能再被反編譯。

原文地址:

https://www.codeproject.com/Articles/1245244/Protect-your-Source-Code-from-Decompiling-or-Rev?

www.codeproject.com

weixin.qq.com/r/o0NTS7- (二維碼自動識別)


推薦閱讀:

由閱讀源碼想到
Socket.io源碼分析
開發團隊的代碼管理
閱讀源代碼,真酸爽

TAG:源代碼 | 反編譯 |