NET 產(chǎn)品版權保護方案_第1頁
NET 產(chǎn)品版權保護方案_第2頁
NET 產(chǎn)品版權保護方案_第3頁
NET 產(chǎn)品版權保護方案_第4頁
NET 產(chǎn)品版權保護方案_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、武漢.NET俱樂部 , 培訓講議.NET 產(chǎn)品版權保護方案 (.NET源碼加密保護)一. 前言大家好,我是康世杰,大家可以叫我Jason。我和大家一樣,都是搞技術出身,也未當過講師,所以口材有限,如果講得不好之處,還希望大家多多海含,謝謝。今天是我們第一次見面,能認識你們,真的很高興。下面我們不要耽誤大家的寶貴時間,讓我們馬上開始上課吧。DotNet 是 ms開發(fā)并推廣的企業(yè)解決方案,也是Ms以后幾年的核心發(fā)展戰(zhàn)略之一,所以我覺得 DotNet 是有前途的,他有一個優(yōu)秀的概念,還有一個強大的財團,想失敗都很難啊。DotNet 缺乏的是大型企業(yè)高層管理人員對它的信心,這還需要時間和事例去證明,世

2、界上待開發(fā)的大案件還很多,Java 和 DotNet 最終誰的市場比例多,現(xiàn)在還說不清楚。二. 簡介DOTNET 編譯原理相信大家都使用過 Dotnet ,可能還有不少高手。不過我還要講講Dotnet的基礎知識,Dotnet的編譯原理。Dotnet是一種建立在虛擬機上執(zhí)行的語言,它直接生成 MSIL 的中間語言,再由DotNet編譯器 JIT 解釋映象為本機代碼并交付CPU執(zhí)行。它和Java是一種機制的語言。這種語言的優(yōu)點就是您不需要去考慮您的程序在那里運行,您只需要把功能做出來,虛擬機會在任何地方實現(xiàn)您的功能。這是一個很好的趨勢和想法,但虛擬機的中間語言由于帶了大量的“元數(shù)據(jù)”信息,所以也極

3、容易被反編譯。MSIL 的代碼事實上和 C# 或 VB 沒有多大的區(qū)別,只要您記住20來個指令,您應該可以很容易的讀懂它。保護代碼和開源并不沖突,需要保護的一定有自己的理由,所以今天我也不是來反對開源的。呵呵三. 中間語言的缺點中間語言如此容易被反編譯,有許多可怕之處。1. 我們最關心的知識產(chǎn)權辛苦研究出來的算法,多少個不眠夜研究出來的成果。這本來是你賺錢的法寶,可是被公開了,知識產(chǎn)權沒有了,那個時候恨誰啊。2. 源代碼泄漏,被競爭對手拿去和你競爭(這種事很多)就我知道的都有幾起,不過不方便說出來。他們從客戶那里想辦法copy回一份別的公司的產(chǎn)品,然后反編譯后,改改圖片,圖片以及版權信息和注冊

4、信息,就拿出去賣了。正規(guī)的公司一套賣二萬,它們一套才8千。功能基本上一樣,你說你是客戶,你買誰的?3. 自己產(chǎn)品的注冊機滿天飛做個共享軟件吧,賺點錢改善一下生活吧,產(chǎn)品剛上市,還沒幾天注冊機每個網(wǎng)站都有。影響了銷售還影響心情,以后不做產(chǎn)品了,還是做服務靠得住,至少盜版不了啊, 呵呵,不過做服務,還沒那么多資金,真是做什么都難啊。4. 被別人植入惡意程序,后果得由作者或開發(fā)商承擔以上說的都只是被別人占便宜的事情,還好,只是讓能占占便宜,算了,虧也虧不了多少??墒牵以僦v一個,那可就不是被人占便宜那么簡單了。比方說:貴公司出了套產(chǎn)品,放在網(wǎng)上給人下載試用,定好版本為1.0,某個惡意的公司不懷好意,

5、把產(chǎn)品下載下來,用萬惡的Ildasm 反編譯一下,然后在里面加入一段按條件觸發(fā)的命令,命令的內(nèi)容是format c: or format d:. 然后再用萬惡的ilasm 編譯一下,用貴公司的名義打個一模一樣的包,升級為1.2試用版,然后放到ftp 或 shareware site 上供人試用下載。試想一下,不久您就會接到用戶的投訴,甚至是起訴。再比方說:要離開公司的員工,對公司的種種形為不滿,在離職交接以后,把公司Release好的項目的某個dll改一改,必定造成這個項目的重大損失。當然,我可不是在教各位用這種方法對待自己不滿的公司。我只是告訴各位,Dotnet的程序集,不保護是不行的。四.

6、 保護方案分類下面,我開始介紹一下.NET的各種保護方案。我把Dotnet的保護分為三大類1. 由m$ 提供的非第三方保護方案a) 強名稱強名稱是MS提供的保護機制。它需要使用 sn 這個命令。強名稱是什么意思呢?在這里稍作解釋。強名稱的作用就是防止程序集被非法修改,當對程序集修改后,必須重新用您的私鑰再對程序集加一次強名稱,這也是如果含有強名稱的程序集在混淆或加密后必須要重新加強名稱的原因。Sn / ? 可以看到它的使用方法,如果你安裝的 Framework是中文的,那么參數(shù)的解釋也是中文的,我就不多講了。那么強名稱有用嗎?網(wǎng)上輕松破解強名稱的方法很多,Ildasm反編譯加過強名稱的程序集后

7、,在IL文件中將強名稱的相關信息去掉,再利用Ilasm編譯,就可以解除強名稱的限制了。這個我已經(jīng)過測試過,您的強名稱的PublcKey不管是加在程序集中,還是加在Class中,都可以被去掉,所以強名稱不是一個完善的保護方式。不過在這里要說一下,如果有一個好的方案能和強名稱一起使用,那么將建立一個非常好的機制,防修改,防濫用。說到濫用,這是強名稱的一個特殊用途,它可以使您的dll不被第三方調(diào)用,如果您的dll能保護自己的話。關于強命稱講到這里,他的使用方式有必要的情況下,我們以后再深入的講解。b) 編譯MSIL為本機代碼 (誤區(qū)?)關于這一點,我經(jīng)常能在MS上的社區(qū)看到有MVP這樣面對問題:問:

8、C#寫的程序能編譯成本機代碼嗎?答:可以,使用 Ngen.exe 即可以 MSIL 代碼編譯為 本機代碼。MVP這樣回答錯了嗎?其實,嚴格的說,MVP的回答是沒錯的,Ngen.exe的確是可以將 MSIL 編譯為本機代碼,并可以使JIT不需要進行再次編譯MSIL。這樣能加快程序的執(zhí)行效率。但用戶這樣的問題其實,并不是對執(zhí)行效率不滿意,而是對中間語言不滿意,可惜 Ngen 并不能解決用戶的問題。讓我們來淺淺的分析一下 Ngen的工作吧。Ngen是MS提供的 本機映象生成器,它可以將中間語言程序集編譯為本機代碼存放在緩存中。這里請大家注意,是存放在緩存中,Dotnet在內(nèi)存中建立了一個緩存,這個緩

9、存中存放了許多常用的程序集編譯后的本機代碼,它們是常駐的,由此來加快Dotnet的執(zhí)行速度。所謂一個本機代碼,因為本機映射時,會映射出一些 Framework 里需要的Method,編譯為匯編就是 Call 0x0200000這樣的樣子,而這些東西必須是事件編譯好的。那么理論上說 Ngen 必須要在當前執(zhí)行的機器上運行,而直接編譯成本機代碼的程序copy到另一個地方不一定可以用,而且我一直沒有找到能將緩存中的本機代碼 copy 出來的方法。講到這里,不知道大家明白我的意思沒有,不管如何 Ngen.exe 只是一個提速的工具,因為要執(zhí)行編譯為本機代碼必須還是要原程序集,而原程序集中存在MSIL,

10、所以讓程序無法脫離被反編譯的目地。大家回家,如果有空,可以做做試驗。Ngen /show 就可以看到緩存中所有的已編譯好的程序集,所以Dotnet并不慢。Ngen <assembly path or display name> 可以把指定程序集映象為本機代碼。Ngen /? 可以看到其它參數(shù)以上是ms提供的工具,下在講講,自己在編程的過程中,如何使用技巧來防止破解或反編譯。2. 編程技巧保護方案在這里,我會給大家介紹兩種三種方式1. 人為混淆在這里,我就要先簡單的講講什么叫做混淆混淆顧名思意,就是混亂,不明確的意思。MetaData中都有一個Rid,程序集運行時就已經(jīng)和名稱沒什么關

11、系了,都使用Rid來調(diào)用的,所以可以將名稱省去。什么叫人為混淆呢,就是人為的制造混淆。曾經(jīng)看過一個程序集,手工的將一個Method折成幾十個或上百個,從而達到讓你看不懂的目的。不過可惜的說一句:現(xiàn)在的Dotnet程序集的分析工具都很強大,正引用,反調(diào)用都可以用程序來實現(xiàn),所以即實這么做,了沒多大用處。著名的Reflector就有這些功能。2. 隱藏程序集剛剛談到了Reflector,它就是使用這種方式來隱藏自己的核心程序集的。相信我,Reflector并不是您看到的那一個可執(zhí)行程序,它的可執(zhí)行程序只是一個殼而以,里面是一個定義和接口,沒有實例的方法。如果你想得到他是怎樣反編譯的核心,恐怕你會在

12、它這個迷宮中迷失方向。它是怎樣做的呢?讓我來告訴你,它的核心程序集事實上就是它的一個資源。而這個資源是一個加密的資源。如果我沒記錯,他應該是在雙擊第一個需要反編譯的Method的時候開始釋放這個資源,并對資源解密然后動態(tài)的加載。這樣做的優(yōu)點核心程序集是不會在硬盤上留下任何痕跡的,它只解在內(nèi)存中解密并被加載,你基本上無法得到這個程序集。而且Dotnet是不允許內(nèi)存 Dump的。大家是不是覺得這種保護方法不錯呢?你可以把你的核心代碼加密后做成資源包在程序里,在使用的時候再解密出來,這只需要你自己去實現(xiàn)就可以了。不過我還得說句負責任的話,如果你有精力,并且很有耐心和技術,相信你還是可以在幾天時間內(nèi)找

13、出它的核心程序集解密算法的位置。并成功的解出它的資源程序集。如果是高手又非常有經(jīng)驗,這種方式的加密手段應該是秒殺。3. 將程序集中的相關Method(方法)編譯成Unmanaged(非托管代碼)下面介紹的內(nèi)容是不管你是菜鳥,或是高手,都無法得到核心代碼的方它可稱之為終極的保護手段,因為它就是“非托管代碼”。什么是托管代碼,什么是非托管代碼。簡單的說,托管代碼就是需要Jit去解釋的中間語言代碼,而非托管代碼就是本機代碼。下面要介紹的方式就是教您如何在自己的程序集中即擁有托管代碼,又擁有非托管代碼。注意,非托管代碼是無法被現(xiàn)在的反編譯工具反編譯的。特別注意一點,我沒有自己試過,但我看人做過,并得到

14、了證實。在Dotnet程序集中,允許托管代碼和非托管代碼共存,怎樣實現(xiàn)呢?這并不是無償?shù)?,這是需要條件的。它的條件就是必須使用VC+.NET非托管方式來寫dll,再用VC+托管方式建立工程引入這個本機代碼的dll。最終生成一個Dotnet程序集的dll。那么這個程序集里面即有托管代碼,又有非托管代碼。托管代碼是可以反編譯的,而非托管代碼不可能被反編譯。有人可能要問了,這和自己用VC+寫個dll有什么區(qū)別?區(qū)別就是這樣的結合更緊密一些,而且也不能用常規(guī)的分析Asm的工具去分析這個dll。這里還要解釋一個誤解,有人說,利用Win32的本機代碼寫注冊算法,并生成dll供給Dotnet程序集調(diào)用,防止

15、破解。其實這句話只說對了一半,這只能增加破解注冊機的難度,并防止不了破解。為什么呢?因為注冊對不對還是要在Dotnet程序集中進行判斷,所以,只要改掉這個判斷,一樣達到了破解效果。但是如果要分析注冊算法,那可就是困難了一些了。3. 第三方保護工具下面,我們講一講第三方的保護工具和概念第三方保護工具較好的廠商有:1. Aiasted.SOFT a) 產(chǎn)品 :MaxtoCode ,種類 :加密、混淆2. PerEmptive Solutionsa) 產(chǎn)品 :Dotfuscator Community ,種類 :混淆3. Remotesofta) 產(chǎn)品 :Remotesoft Protect ,種類

16、 :加密b) 產(chǎn)品 :Remotesoft Dotfuscator ,種類 :混淆4. XenoCodea) 產(chǎn)品 :XenoCode ,種類:混淆5. 其它的一些公司,最近上海有一款公司出了國內(nèi)第一款混淆工具,如果大家要選擇混淆產(chǎn)品的話,支持一下國產(chǎn)也不錯。第三方工具的保護方式分類1. 混淆 ?這是目前最流行的方式吧。今天我們就來做個剖析。讓大家去衡量一下混淆的強度如何?;煜浖话愣加腥齻€功能1. 字符串加密2. 名稱混淆3. 流程混淆目前流行的混淆軟件有XenoCode、Dotfuscator、Remotesoft,MaxtoCode里也集成了少許混淆功能。利用幻燈片講解流程混淆原理利用

17、程序當場演示如何反流程混淆1.目標程序2.被混淆的程序使用 Reflector 查看3.使用Ildasm反編譯出 IL 文件ildasm XenoCodeTest.exe /out=XenoCodeTest.il4.將IL 文件中的某個方法抽出5.使用 Deflow 進行反混淆6.回填,并使用 Ilasm 進行編譯Ilasm XenoCodeTest.il /resource=XenoCodeTest.res /output=XenoCodeTestNew.exe7.再回到 Reflector 中進行查看2. 打包 ?ThInstall 是一個打包工具,他可以打包幾乎所有的應用程序,也包括Do

18、tnet。他將多個Dotnet程序集包在一個大程序里,達到無法反編譯的目地。不過想想也知道,即然是打包,在需要運行時肯定會釋放,如果找到了釋放出來的文件,就跟沒保護一樣了,所以,這算是一個最爛的保護手段。當然,本來我沒想把它列進來的,是因為看到論壇上經(jīng)常有人用這個Thinstall回復別人說可以保護Dotnet程序集,所以我才特別忠告大家,別信。3. 加密 ?加密保護并不同于混淆,它是目前最好的保護方式,也是保護能力最強的。他把Dotnet的先天不足在一定程度上大幅提高,為Dotnet引來更多的開發(fā)者。加密保護的軟件都有一個共同點,即把Dotnet的反編譯引深到Win32的反匯編中了,可惜的是,也限制了Dotnet跨平臺的優(yōu)勢。此類的代表軟件有MaxtoCode 、Remotesoft protect ,其它的一些國外的,我就不說了,實在讓人用不下去。由于Remote

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論