天天看點

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

通常我們通過代碼混淆、加密的形式達到軟體保護的目的。在Web開發裡我們接觸過的可能就是JS代碼加密了,可以通過對JS代碼進行混淆、加密進而實作對核心JS代碼的保護。如果沒有接觸過的可以在 這裡

簡單了解一下,這次我們就不去細說了。

在以前Win32的軟體中,加殼脫殼的技術已經發展的非常成熟,國内有大名鼎鼎的

看雪 吾愛破解

等論壇,三四年前還在上學時,論壇裡的大牛一直都是自己的偶像。

而.NET程式因為編譯結果不是機器代碼語言,而是IL語言,是以加殼脫殼相關的軟體還不是很多,我搜尋到了一些,如VS自帶的DotFuscator、.NET Reactor、xeoncode等,這次我們就簡單介紹下手邊有的.NET Reactor

1.代碼混淆

代碼混淆主要通過一些名稱替換、移位、流程混淆的方式來實作。

先來看一個測試的DEMO程式,很簡單的一個Winform程式,執行個體化窗體時執行個體化一個User類,點選按鈕顯示使用者名,這樣也可以測試加密、加殼後程式是否能夠繼續運作。

 1 using System;

 2 using System.Windows.Forms;

 3 

 4 namespace CodeObfuscator

 5 {

 6     public partial class Form1 : Form

 7     {

 8         private readonly User _currentUser;

 9         public Form1()

10         {

11             InitializeComponent();

12             _currentUser = new User

13             {

14                 UserID = 1,

15                 UserName = "Parry@cnblogs"

16             };

17         }

18 

19         private void ButtonAlertClick(object sender, EventArgs e)

20         {

21             MessageBox.Show(_currentUser.UserName);

22         }

23     }

24 

25     public class User

26     {

27         public int UserID { get; set; }

28         public string UserName { get; set; }

29     }

30 }

我們使用最常用的反編譯工具Reflector對生成的exe反編譯檢視源碼。

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

下面我們打開.NET Reactor進行代碼混淆,載入exe後,在一般設定裡可以設定壓縮選項,不過設定後程式初始化速度會變慢,是因為需要将代碼解壓縮後再加載到記憶體中。

在混淆選項裡将Enable設定為啟用,混淆公共類型,字元串加密等常用的也設定成啟用。其他的選項Tips裡都有詳細的解釋,就不一一講解。

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

當我們再使用Reflector反編譯檢視時,發現沒有看到混淆後的代碼,而是看到了這個結果。

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

猜想應該是.NET Reactor程式對exe進行處理後打了個包,我們使用查殼工具檢視後發現果然是這樣,外面套了一層Delphi的東西,這個還不是殼,隻是一些額外資料。

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

關于Overlay相關内容可以檢視

2.加殼與脫殼

加殼實際上就是一種加密方式,被加殼的程式在運作前要先運作一段附加指令,這段附加的指令完成相關操作後會啟動主程式,程式就像被包在一個殼裡一樣,加殼的技術在病毒編寫的時候也被大量使用。

我們使用北鬥加殼程式對上面的exe加殼後,再來反編譯看一看。

反編譯後我們已經找不到之前程式任何相關名稱、代碼,完全被一個“殼子”包裹了起來,在程式運作時,程式将先運作我們反編譯看到的main函數進行一系列的解壓、解密動作後将代碼加載到記憶體中運作原始的程式,這樣就實作了對程式的保護功能。

.NET程式的代碼混淆、加殼與脫殼1.代碼混淆2.加殼與脫殼

脫殼就是對程式進行解壓縮、解密,将外面的一層殼脫去後,繼續進行逆向工程進行破解。 

而關于脫殼,本人也是略知皮毛,不敢胡亂賣弄,感興趣的可以去論壇裡學習相關知識。

這裡介紹的混淆、加殼的方法也隻是為了在需要對自己的程式進行保護時的一種方法。

覺得文章還行的話就推薦下吧,哈哈。

作者:

Parry

出處:

http://www.cnblogs.com/parry/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀