.NET 產品版權保護方案 (.NET源碼加密保護)

一.   中間語言的缺點

中間語言如此容易被反編譯,有許多可怕之處。

1.       自己產品的註冊機滿天飛

做個共享軟件吧,賺點錢改善一下生活吧,產品剛上市,還沒幾天註冊機每個網站都有。影響了銷售還影響心情,以後不做產品了,還是做服務靠得住,至少盜版不了啊, 呵呵,不過做服務,還沒那麼多資金,真是做什麼都難啊。

4.         強名稱

強名稱是MS提供的保護機制。

它需要使用 sn 這個命令。

強名稱是什麼意思呢?在這裏稍作解釋。強名稱的作用就是防止程序集被非法修改,當對程序集修改後,必須重新用您的私鑰再對程序集加一次強名稱,這也是如果含有強名稱的程序集在混淆或加密後必須要重新加強名稱的原因。

Sn / ? 可以看到它的使用方法,如果你安裝的 Framework是中文的,那麼參數的解釋也是中文的,我就不多講了。

那麼強名稱有用嗎?網上輕鬆破解強名稱的方法很多,Ildasm反編譯加過強名稱的程序集後,在IL文件中將強名稱的相關信息去掉,再利用Ilasm編譯,就可以解除強名稱的限制了。這個我已經過測試過,您的強名稱的PublcKey不管是加在程序集中,還是加在Class中,都可以被去掉,所以強名稱不是一個完善的保護方式。不過在這裏要說一下,如果有一個好的方案能和強名稱一起使用,那麼將建立一個非常好的機制,防修改,防濫用。

說到濫用,這是強名稱的一個特殊用途,它可以使您的dll不被第三方調用,如果您的dll能保護自己的話。

關於強命稱講到這裏,他的使用方式有必要的情況下,我們以後再深入的講解。

 

b)       隱藏程序集

剛剛談到了Reflector,它就是使用這種方式來隱藏自己的核心程序集的。相信我,Reflector並不是您看到的那一個可執行程序,它的可執行程序只是一個殼而以,裏面是一個定義和接口,沒有實例的方法。如果你想得到他是怎樣反編譯的核心,恐怕你會在它這個迷宮中迷失方向。

它是怎樣做的呢?讓我來告訴你,它的核心程序集事實上就是它的一個資源。而這個資源是一個加密的資源。如果我沒記錯,他應該是在雙擊第一個需要反編譯的Method的時候開始釋放這個資源,並對資源解密然後動態的加載。這樣做的優點核心程序集是不會在硬盤上留下任何痕跡的,它只解在內存中解密並被加載,你基本上無法得到這個程序集。而且Dotnet是不允許內存 Dump的。

大家是不是覺得這種保護方法不錯呢?你可以把你的核心代碼加密後做成資源包在程序裏,在使用的時候再解密出來,這只需要你自己去實現就可以了。

不過我還得說句負責任的話,如果你有精力,並且很有耐心和技術,相信你還是可以在幾天時間內找出它的核心程序集解密算法的位置。併成功的解出它的資源程序集。

如果是高手又非常有經驗,這種方式的加密手段應該是秒殺。

 

3.         產品 :MaxtoCode ,種類 :加密、混淆

2.       Remotesoft

a)       XenoCode

a)       混淆 ?

這是目前最流行的方式吧。今天我們就來做個剖析。讓大家去衡量一下混淆的強度如何。

混淆軟件一般都有三個功能

1.         流程混淆

目前流行的混淆軟件有

       XenoCode、Dotfuscator、Remotesoft,MaxtoCode裏也集成了少許混淆功能。

利用幻燈片講解流程混淆原理

利用程序當場演示如何反流程混淆

 

1.目標程序

2.被混淆的程序使用 Reflector 查看
 
3.使用Ildasm反編譯出 IL 文件

       ildasm XenoCodeTest.exe /out=XenoCodeTest.il

4.將IL 文件中的某個方法抽出

5.使用 Deflow 進行反混淆

6.回填,並使用 Ilasm 進行編譯

Ilasm XenoCodeTest.il /resource=XenoCodeTest.res /output=XenoCodeTestNew.exe

7.再回到 Reflector 中進行查看

2.<span style="font-family:;" times="" new="" roman';="" 7pt;="" normal;="" none;="" normal;"="">       打包 ?

ThInstall 是一個打包工具,他可以打包幾乎所有的應用程序,也包括

Dotnet。

他將多個Dotnet程序集包在一個大程序裏,達到無法反編譯的目地。不過想想也知道,即然是打包,在需要運行時肯定會釋放,如果找到了釋放出來的文件,就跟沒保護一樣了,所以,這算是一個最爛的保護手段。當然,本來我沒想把它列進來的,是因爲看到論壇上經常有人用這個Thinstall回覆別人說可以保護Dotnet程序集,所以我才特別忠告大家,別信。

 

3.<span style="font-family:;" times="" new="" roman';="" 7pt;="" normal;="" none;="" normal;"="">       加密 ?

加密保護並不同於混淆,它是目前最好的保護方式,也是保護能力最強的。

他把Dotnet的先天不足在一定程度上大幅提高,爲Dotnet引來更多的開發者。加密保護的軟件都有一個共同點,即把Dotnet的反編譯引深到Win32的反彙編中了,可惜的是,也限制了Dotnet跨平臺的優勢。

此類的代表軟件有

MaxtoCode  、Remotesoft protect ,其它的一些國外的,我就不說了,實在讓人用不下去。

由於Remotesoft公司過於小氣,Protect連試用版都不提供,所以我只能找到他的一個加密過的產品 WebGrid3.5,但WebGrid4.0就未用Protect了,不知道爲什麼,幾千美金就這麼廢了?分析WebGrid3.5以後,發現他和MaxtoCode一樣,產生的結果就是看不到IL代碼了,而且也會生成一個本機代碼的DLL作爲運行環境。

由於對Remotesoft Protect無法深入研究,只知道效果和MaxtoCode一樣,那麼我們就來講講MaxtoCode的實現原理吧。

MaxtoCode是爲了迷補Dotnet的先天性不足而出世的。它是中國第一款高強度的Dotnet保護軟件,在世界的Dotnet保護水平線上也處於優勢性的領先。

其實MaxtoCode的原理很簡單,它是將程序集中所有的IL進行加密,所以使用反編譯器無法看到IL,從而不能進行反編譯。基於Framework提取Method的IL作爲基礎原理,當JIT需要IL時,我就將加過密的IL解密給JIT去編譯,這樣就形成了MaxtoCode的基本原理。

 

       下面是MaxtoCode 加密的過程及結果:

1.選擇程序集

2.選擇高級加密的選項

3.選擇混淆的選項

4.加密

5.結果

加密後的程序運行結果:

使用 Reflector 反編譯的結果

使用 MS 自帶的工具 Ildasm 進行反編譯

使用 Ildasm 查看代碼區內容

源代碼都爲空了,完全不可以反編譯.杜絕了反編譯的問題.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章