前言
前段時間分享了兩篇關於.NET反編譯相關的文章,然後文章留言區就有小夥伴提問:如何防止被反編譯?因此本篇文章我們就來講講.NET應用如何防止被反編譯。.NET反編譯相關的文章可以看如下文章:
.NET應用如何防止被反編譯
注意雖然我們無法完全防止我們的.NET應用被反編譯,但是我們可以採取以下一些措施來增加反編譯的難度。
-
混淆程式碼: 混淆程式碼是一種透過修改、變換、重組和隱藏原始碼的技術,使得程式碼在保持功能不變的同時,增加了閱讀和理解的難度,從而增強了程式碼的安全性。混淆程式碼可以使反編譯者難以理解程式碼邏輯和結構,從而降低他們進行逆向工程的效率(常用一些程式碼混淆工具對應用程式程式碼進行混淆,本文會重點介紹)。
-
加密敏感資料: 對於應用程式中的敏感資料(如資料庫連結、阿里雲連結金鑰等),可以使用加密演算法進行加密,確保即使被反編譯,也無法直接獲取到明文資料。
-
動態程式碼生成: 將關鍵程式碼在執行時動態生成,而不是在靜態的可執行檔案中儲存。這樣可以降低被靜態分析和反編譯的風險,但是動態程式碼生成還可能導致一些間接影響,例如頻繁的動態生成程式碼可能會增加記憶體壓力,影響垃圾回收的效率。
-
使用程式碼混合技術: 可以透過使用Native程式碼和P/Invoke呼叫等方式來增加程式碼的安全性,隱藏關鍵程式碼和演算法部分,提高反編譯的難度。
-
使用程式碼簽名: 透過為應用程式提供數字證書籤名,驗證應用程式的完整性和真實性,防止惡意篡改。
三款免費的.NET混淆工具推薦
ConfuserEx .NET混淆工具安裝
工具介紹
ConfuserEx是一個功能強大且廣泛使用的.NET程式碼混淆工具。它支援多種混淆技術,包括控制流混淆、字串加密、資源加密等。它具有靈活的配置選項,可以根據不同的需求進行定製(注意:不足的是目前只支援.NET Framework 2.0/3.0/3.5/4.0/4.5/4.6/4.7/4.8,不支援.NET Core程式碼混淆,本章.NET版本程式碼示例使用的是.NET Fx4.7.2)。
- GitHub開源地址:https://github.com/mkaring/ConfuserEx
- 下載地址:https://github.com/mkaring/ConfuserEx/releases
工具下載
ConfuserEx-GUI.zip包解壓即可使用:
使用ConfuserEx工具混淆.NET Fx .dll檔案
新增需要混淆的.dll檔案
將待混淆的.dll檔案拖拽進中間方框區域(Drag input modules here),如下圖所示:
設定混淆規則
選擇Settings項,新增混淆規則,如下圖所示:
設定混淆規則:Protections選擇anti ildasm,應該是防止IL反編譯。因為Ildasm.exe是微軟提供的.NET的IL反編譯器。
選擇Proect!選項開始混淆
點選【Protect!】,就開始混淆了,Finished代表混淆完成併成功。
混淆成功儲存的檔案目錄:
混淆前後程式碼對比
混淆之前
混淆之後
用ILSpy無法開啟:
用.NET Reflector反編譯結果:
使用ConfuserEx工具混淆.NET Fx 混淆.exe檔案
新增需要混淆的.exe檔案
選擇Settings選項卡,新增混淆規則
注意:這裡與.dll檔案設定混淆規則不一樣,需要要設定Packer,壓縮打包,且不需要編輯規則。
選擇Proect!選項開始混淆
點選【Protect!】,就開始混淆了,Finished代表混淆完成併成功。
ILSpy檢視混淆前後的.exe檔案對比
混淆前:
混淆後:
執行混淆後的.exe檔案
加入DotNetGuide技術交流群
1、提供.NET開發者分享自己優質文章的群組和獲取更多全面的C#/.NET/.NET Core學習資料、影片、文章、書籍,社群組織,工具和常見面試題資源,幫助大家更好地瞭解和使用 .NET技術。
2、在這個群裡,開發者們可以分享自己的專案經驗、遇到的問題以及解決方案,傾聽他人的意見和建議,共同成長與進步。
3、可以結識更多志同道合的開發者,甚至可能與其他開發者合作完成有趣的專案。透過這個群組,我們希望能夠搭建一個積極向上、和諧友善的.NET技術交流平臺,為廣大.NET開發者帶來更多的價值。