資源描述:
《NET程序的代碼混淆、加殼與脫殼》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、.NET程序的代碼混淆、加殼與脫殼通常我們通過代碼混淆、加密的形式達(dá)到軟件保護(hù)的目的。在Web開發(fā)里我們接觸過的可能就是JS代碼加密了,可以通過對(duì)JS代碼進(jìn)行混淆、加密從而實(shí)現(xiàn)對(duì)核心JS代碼的保護(hù)。如果沒有接觸過的可以在這里簡單了解一下,這次我們就不去細(xì)說了。在以前Win32的軟件中,加殼脫殼的技術(shù)已經(jīng)發(fā)展的非常成熟,國內(nèi)有大名鼎鼎的看雪、吾愛破解等論壇,三四年前還在上學(xué)時(shí),論壇里的大牛一直都是自己的偶像。而.NET程序因?yàn)榫幾g結(jié)果不是機(jī)器代碼語言,而是IL語言,所以加殼脫殼相關(guān)的軟件還不是很多,我搜索到了一些,如VS自帶的DotFuscator、.NETReactor
2、、xeoncode等,這次我們就簡單介紹下手邊有的.NETReactor。1.代碼混淆代碼混淆主要通過一些名稱替換、移位、流程混淆的方式來實(shí)現(xiàn)。先來看一個(gè)測(cè)試的DEMO程序,很簡單的一個(gè)Winform程序,實(shí)例化窗體時(shí)實(shí)例化一個(gè)User類,點(diǎn)擊按鈕顯示用戶名,這樣也可以測(cè)試加密、加殼后程序是否能夠繼續(xù)運(yùn)行。?1?using?System;?2?using?System.Windows.Forms;?3??4?namespace?CodeObfuscator?5?{?6?????public?partial?class?Form1?:?Form?7?????{?8????
3、?????private?readonly?User?_currentUser;?9?????????public?Form1()10?????????{11?????????????InitializeComponent();12?????????????_currentUser?=?new?User13?????????????{14?????????????????UserID?=?1,15?????????????????UserName?=?"Parry@cnblogs"16?????????????};17?????????}18?19?????????pr
4、ivate?void?ButtonAlertClick(object?sender,?EventArgs?e)20?????????{21?????????????MessageBox.Show(_currentUser.UserName);22?????????}23?????}24?25?????public?class?User26?????{27?????????public?int?UserID?{?get;?set;?}28?????????public?string?UserName?{?get;?set;?}29?????}30?}我們使用最常用的反編譯
5、工具Reflector對(duì)生成的exe反編譯查看源碼。下面我們打開.NETReactor進(jìn)行代碼混淆,載入exe后,在一般設(shè)置里可以設(shè)置壓縮選項(xiàng),不過設(shè)置后程序初始化速度會(huì)變慢,是因?yàn)樾枰獙⒋a解壓縮后再加載到內(nèi)存中。在混淆選項(xiàng)里將Enable設(shè)置為啟用,混淆公共類型,字符串加密等常用的也設(shè)置成啟用。其他的選項(xiàng)Tips里都有詳細(xì)的解釋,就不一一講解。?當(dāng)我們?cè)偈褂肦eflector反編譯查看時(shí),發(fā)現(xiàn)沒有看到混淆后的代碼,而是看到了這個(gè)結(jié)果。猜想應(yīng)該是.NETReactor程序?qū)xe進(jìn)行處理后打了個(gè)包,我們使用查殼工具查看后發(fā)現(xiàn)果然是這樣,外面套了一層Delphi的東西,
6、這個(gè)還不是殼,只是一些額外數(shù)據(jù)。關(guān)于Overlay相關(guān)內(nèi)容可以查看這里。2.加殼與脫殼加殼實(shí)際上就是一種加密方式,被加殼的程序在運(yùn)行前要先運(yùn)行一段附加指令,這段附加的指令完成相關(guān)操作后會(huì)啟動(dòng)主程序,程序就像被包在一個(gè)殼里一樣,加殼的技術(shù)在病毒編寫的時(shí)候也被大量使用。我們使用北斗加殼程序?qū)ι厦娴膃xe加殼后,再來反編譯看一看。反編譯后我們已經(jīng)找不到之前程序任何相關(guān)名稱、代碼,完全被一個(gè)“殼子”包裹了起來,在程序運(yùn)行時(shí),程序?qū)⑾冗\(yùn)行我們反編譯看到的main函數(shù)進(jìn)行一系列的解壓、解密動(dòng)作后將代碼加載到內(nèi)存中運(yùn)行原始的程序,這樣就實(shí)現(xiàn)了對(duì)程序的保護(hù)功能。脫殼就是對(duì)程序進(jìn)行解壓縮
7、、解密,將外面的一層殼脫去后,繼續(xù)進(jìn)行逆向工程進(jìn)行破解。?而關(guān)于脫殼,本人也是略知皮毛,不敢胡亂賣弄,感興趣的可以去論壇里學(xué)習(xí)相關(guān)知識(shí)。這里介紹的混淆、加殼的方法也只是為了在需要對(duì)自己的程序進(jìn)行保護(hù)時(shí)的一種方法。覺得文章還行的話就推薦下吧,哈哈。作者:Parry?出處:http://www.cnblogs.com/parry/?本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。分類:?03.Sugars,?04..NET標(biāo)簽:?.NET,?安全綠色通道:?好