999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

實現.NET產品保護的混淆技術

2007-12-31 00:00:00王六平張偉林
計算機時代 2007年10期

摘 要:介紹了.NET環境下的一種軟件保護方法——混淆:通過對MSIL代碼進行字符串加密、名稱混淆、流程混淆等技術,以加大反編譯的難度,從而達到對.NET產品的保護;列舉了目前常用的混淆工具,并分析了它們的優劣。

關鍵詞:軟件保護;.NET;MSIL;混淆;加密

0 引言

作為一種編程平臺,Microsoft.NET比微軟公司先前推出的其他技術平臺更為復雜。.NET提供了對多種編程語言以及(在理論上說)多重平臺的支持,在傳統的兩個代碼層之間添加一個中間代碼層。這里,傳統的兩層分別是源代碼層和編譯后的本機代碼層。新加的代碼層給.NET平臺帶來了額外的靈活性,不過,反過來卻又增加了系統的復雜性。

在Microsoft.NET框架內,應用程序可以用好多種高級程序語言編寫、創建,例如VB.NET、C#乃至COBOL.NET等等,都可以編寫.NET應用程序。而通過每一種遵守.NET規范的編程語言所編寫的程序首先都得通過一種初始編譯步驟從源代碼變成.NET的公共標準語言:MSIL(Microsoft IntermediateLanguage,微軟中介語言),然后,在執行時臨時由JIT解釋成機器代碼執行(如圖1所示)。MSIL自身是一種完整的、和對象相關的語言,通過它才可能實現多種高級語言來編寫.NET應用程序。但使用ILDASM可以很容易地反匯編成一個文本文件,這個文本文件比較容易看懂,還可以修改后使用ILASM重新編譯成EXE文件。這就給軟件保護提出了新的難題。

1 保護軟件與常用做法

對上述問題,在不同場合可以采取不同的解決方案:

(1)Web service或者remote方式調用將核心代碼和數據放到服務器上。

(2)Jeffrey Richter認為:如果有非常重要的代碼,而且認可Native Code有100%的安全,則可以考慮使用Native Code的DLL+Interop。

(3)在程序里加上簽名,即在Assembly里加上數字證書。這樣,當.NET應用被加載時,它的安全體系會檢查這個簽名的,這個簽名可以保證代碼不被改動。改變過的代碼是不能執行的,它保證了“這個程序一定是由某某公司開發的,且未被篡改”,但是無法保證這個程序是安全的,是否接受程序取決于對該公司的信任。這種方法仍然無法實現軟件保護,可以將程序COPY到其它機器上運行。

(4)使用混淆器,混淆是目前最流行的方式。混淆工具一般都有三個功能:字符串加密、名稱混淆、流程混淆等。目前流行的混淆軟件有:XenoCode、Dotfuscator、Remotesoft、ILDog,MaxtoCode里也集成了少許混淆功能。

(5)可以自行設計一個加密方法。

本文主要討論第4種方法,也就是混淆技術。關于.NET源代碼的安全性,關于如何保護您的知識產權,關于市場上流動的混淆工具以及最新的混淆加密工具,本文將集中展示一下,全新的保護手段,以便能讓同行們能使用.NET開發共享程序并保護自己的知識產權。

2 混淆的原理

混淆,顧名思義就是混雜,使界限不分明。這個詞相當妙,特別是用在計算機界。我們知道.NET程序集中有一個重要的概念叫做MetaData(元數據),它記錄了相關程序集的一切信息,因此,NET程序集才有了跨平臺的可能,才可以在網上傳送運行,才不會出現DLL HELL。但同時,由于它記錄了所有的信息,程序集中的信息可以完全還原至初始狀態,使得編譯過后的程序集,依然擁有良好的“可讀性”。在某些特殊的情況下,這是一件很糟的事情,針對這些情況,出現了混淆器,它對MetaData的某些相關信息進行了處理,達到了混淆的作用。

(1)字符串加密

首先,最簡單的混淆是字符串加密,也就是將程序集中所存在的字符串加密,防止字符串信息泄漏,使攻擊者無法讀懂程序中出現的字符串。這種方法在每一個混淆工具軟件中都會用到。

(2)名稱混淆

名稱混淆也就是將命名空間名、類名、方法名、字段名等統統換成特殊符號或其它無意義的符號(如圖2)。

由于.NET代碼經過編譯后,名稱完全被保留。這樣,如果Cracker想破解這個程序,當看到Register的時候,就差不多找到破解的入口了。但經過名稱混淆后,它將變成毫無意義的名稱,增加了破解的難度。

然而,名稱混淆有一個非常致命的缺點:當修改了類名之后可能出現程序不能執行的問題。一般來說,這種情況在DLL中發生得更多,但在EXE中也經常發生。因為DLL的某些Public方法是對外的接口,在程序開發和調試的時候使用的原名稱,當混淆以后,改成了別的名稱,所以對它的調用(特別是通過反射調用)肯定報錯。處理辦法:不混淆對外提供的Public方法。EXE和DLL還有一個共同的容易出錯的地方就是資源,混淆器也可以混淆資源名稱,這樣,就存在同樣的問題——“無法找到資源而報錯(動態Load資源的時候)”:處理方法:不混淆程序內部調用的東西。

另外,如果名稱混淆時,使用短名稱及不可見字符(如ILDog),將會縮小程序集的大小,但如果使用長名稱(如XenoCode),可能會增加程序集大小。

(3)流程混淆

流程混淆是較大強度的混淆,能較好地保護代碼不被反編譯。其基本原理是:給程序中增加某些形式的跳轉,以破壞原有可讀的流程但不改變執行流程(如圖3)。

3 常見.NET產品保護工具

目前代碼保護工具主要有以下幾種,下面介紹它們的性質及特點:

(1)Dotfuscator Community。性質:混淆。

這是微軟推薦的一種混淆工具,可以集成到NET開發環境中。Dotfuscator利用標識符重命名,流程修改,字符串加密等技術混淆MSIL,極大地增加了其被反匯編的難度,而對功能沒有絲毫的影響。同時,Dotfuscator對代碼進行全局掃描,移除不必要的關系數據,還對代碼進行優化壓縮,移除所有多余的方法,變量,和函數,可以將執行程序的大小最大壓縮至原來的30%,極大地提高了程序運行效益。Doffuscator可以和Visual Studio完全整合。大眾版已經是Visual Studio的一個標準部件。

(2)Remotesoft Dotfuscator。性質:混淆。

(3)XenoCode,可能是目前最常用的混淆工具。性質:混淆。

(4)MaxtoCode。性質:加密、混淆。

這是世界第一款利用Windows底層技術保護.NET源代碼的高技術產品。它可以完美地與.NET程序結合在一起,全力保護源代碼和知識產權。MaxtoCode已經完全超越了傳統的混淆手段,它加密后的代碼,完全無法被反編譯(由于篇幅有限,不在本文中討論)。是目前保護強度最大,最完美的.NET產品保護方案。2.0以上的版本已經加上混淆功能,并將混淆功能與加密功能疊加使用,以增加保護的強度。

4 結束語

從目前市場情況來看,雖然.NET2003已經推出近五年,了,但市面上用.NET開發的軟件產品并不多見。究其原因,筆者認為.NET產品保護較困難,對開發者的開發積極性可能起到了一定的負面影響。只有很好地解決了.NET產品的保護問題,才能充分地調動開發者的積極性。

主站蜘蛛池模板: 亚洲人成在线免费观看| 国产性猛交XXXX免费看| 国产国语一级毛片在线视频| 97视频精品全国免费观看| 全部免费毛片免费播放| 国产一区二区精品高清在线观看| 九九视频在线免费观看| 日韩东京热无码人妻| 亚洲精品国产精品乱码不卞 | 69国产精品视频免费| 欧美成人免费午夜全| 99视频只有精品| 美女免费黄网站| 欧美成人精品高清在线下载| 欧美黄网站免费观看| 亚洲一区二区三区香蕉| 久久久久久久久久国产精品| 国产情侣一区二区三区| 亚洲伊人天堂| 国产黄色爱视频| 一本大道香蕉久中文在线播放| 亚洲熟女中文字幕男人总站| 日韩第九页| 久久99国产视频| 亚洲精品少妇熟女| 青草娱乐极品免费视频| 欧美成人综合在线| 99在线免费播放| 欧美在线三级| 日本欧美一二三区色视频| 99在线观看精品视频| 热99re99首页精品亚洲五月天| 91激情视频| 麻豆精品国产自产在线| 嫩草在线视频| 欧洲免费精品视频在线| 亚洲成人免费在线| 亚洲黄网视频| 久久精品视频亚洲| 日本不卡在线视频| 亚洲AV无码精品无码久久蜜桃| 欧美国产精品不卡在线观看| 玖玖免费视频在线观看| 久久久久亚洲精品成人网| 青草视频在线观看国产| 久久精品丝袜| 成人午夜免费视频| 国产AV毛片| 91视频首页| www.日韩三级| 亚洲人人视频| 亚洲成a人片77777在线播放| 亚洲乱伦视频| 国产精品第一区| 国产欧美在线| 在线精品自拍| 日本三级精品| 毛片一区二区在线看| 欧美激情福利| 欧美日韩精品一区二区在线线| 国产精品刺激对白在线| 国产aaaaa一级毛片| 亚洲综合日韩精品| 精品一区国产精品| 国产人免费人成免费视频| 99999久久久久久亚洲| 国产在线精品人成导航| 91欧美在线| 国产伦精品一区二区三区视频优播| 亚洲成a∧人片在线观看无码| 国产成人午夜福利免费无码r| 亚洲高清中文字幕在线看不卡| 91人人妻人人做人人爽男同| 91小视频在线播放| 8090成人午夜精品| 国产区精品高清在线观看| 97精品国产高清久久久久蜜芽| 色综合天天操| 国产成人久久777777| 日本一本正道综合久久dvd| 婷婷亚洲天堂| 日本一本在线视频|