NET程序的代碼混淆、加殼與脫殼_第1頁
NET程序的代碼混淆、加殼與脫殼_第2頁
NET程序的代碼混淆、加殼與脫殼_第3頁
NET程序的代碼混淆、加殼與脫殼_第4頁
NET程序的代碼混淆、加殼與脫殼_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.NET程序的代碼混淆、加殼與脫殼通常我們通過代碼混淆、加密的形式達到軟件保護的目的。在Web開發(fā)里我們接觸過的可能就是JS代碼加密了,可以通過對JS代碼進行混淆、加密從而實現(xiàn)對核心JS代碼的保護。如果沒有接觸過的可以在這里簡單了解一下,這次我們就不去細說了。在以前Win32的軟件中,加殼脫殼的技術(shù)已經(jīng)發(fā)展的非常成熟,國內(nèi)有大名鼎鼎的看雪、吾愛破解等論壇,三四年前還在上學(xué)時,論壇里的大牛一直都是自己的偶像。而.NET程序因為編譯結(jié)果不是機器代碼語言,而是IL語言,所以加殼脫殼相關(guān)的軟件還不是很多,我搜索到了一些,如VS自帶的DotFuscator、.NETReactor、xeoncode等,這次我們就簡單介紹下手邊有的.NETReactor。1.代碼混淆代碼混淆主要通過一些名稱替換、移位、流程混淆的方式來實現(xiàn)。先來看一個測試的DEMO程序,很簡單的一個Winform程序,實例化窗體時實例化一個User類,點擊按鈕顯示用戶名,這樣也可以測試加密、加殼后程序是否能夠繼續(xù)運行。

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反編譯查看源碼。下面我們打開.NETReactor進行代碼混淆,載入exe后,在一般設(shè)置里可以設(shè)置壓縮選項,不過設(shè)置后程序初始化速度會變慢,是因為需要將代碼解壓縮后再加載到內(nèi)存中。在混淆選項里將Enable設(shè)置為啟用,混淆公共類型,字符串加密等常用的也設(shè)置成啟用。其他的選項Tips里都有詳細的解釋,就不一一講解。

當(dāng)我們再使用Reflector反編譯查看時,發(fā)現(xiàn)沒有看到混淆后的代碼,而是看到了這個結(jié)果。猜想應(yīng)該是.NETReactor程序?qū)xe進行處理后打了個包,我們使用查殼工具查看后發(fā)現(xiàn)果然是這樣,外面套了一層Delphi的東西,這個還不是殼,只是一些額外數(shù)據(jù)。關(guān)于Overlay相關(guān)內(nèi)容可以查看這里。2.加殼與脫殼加殼實際上就是一種加密方式,被加殼的程序在運行前要先運行一段附加指令,這段附加的指令完成相關(guān)操作后會啟動主程序,程序就像被包在一個殼里一樣,加殼的技術(shù)在病毒編寫的時候也被大量使用。我們使用北斗加殼程序?qū)ι厦娴膃xe加殼后,再來反編譯看一看。反編譯后我們已經(jīng)找不到之前程序任何相關(guān)名稱、代碼,完全被一個“殼子”包裹了起來,在程序運行時,程序?qū)⑾冗\行我們反編譯看到的main函數(shù)進行一系列的解壓、解密動作后將代碼加載到內(nèi)存中運行原始的程序,這樣就實現(xiàn)了對程序的保護功能。脫殼就是對程序進行解壓縮、解密,將外面的一層殼脫去后,繼續(xù)進行逆向工程進行破解。

而關(guān)于脫殼,本人也是略知皮毛,不敢胡亂賣弄,感興趣的可以去論壇里學(xué)習(xí)相關(guān)知識。這里介紹的混淆、加殼的方法也只是為了在需要對自己的程序進行保護時的一種方法。覺得文章還行的話就推薦下吧,哈哈。

作者:Parry

出處:/parry/

本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。分類:

03.Sugars,

04..NET標簽:

.NET,

安全綠色通道:

好文要頂

關(guān)注我

收藏該文與我聯(lián)系

Parry

關(guān)注-16

粉絲-171榮譽:推薦博客+加關(guān)注180(請您對文章做出評價)?

上一篇:\o"發(fā)布于2012-11-0917:10"ASP.NETWebAPI(二):安全驗證之使用HTTP基本認證

?

下一篇:\o"發(fā)布于2012-12-0418:37"小心DataContractJsonSerializer和JavaScriptSerializer的內(nèi)部實現(xiàn)差異posted@

2012-11-1417:18

Parry

閱讀(8765)評論(25)

編輯

收藏評論

#1樓

2012-11-1417:31

|

Quella

\o"發(fā)送站內(nèi)短消息"

如果混淆,那就沒辦法看到原來的代碼。。。支持(0)反對(0)

#2樓[樓主]

2012-11-1417:42

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@Quella

\o"查看引用原文"引用如果混淆,那就沒辦法看到原來的代碼。。。

是,只是進行了混淆而已,一些邏輯還是能看出來的。支持(0)反對(0)

#3樓

2012-11-1417:44

|

sunriseyuen

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@Parry

\o"查看引用原文"引用@Quella

引用引用如果混淆,那就沒辦法看到原來的代碼。。。

是,只是進行了混淆而已,一些邏輯還是能看出來的。

代碼多了,看到你不想看了.支持(0)反對(0)

#4樓[樓主]

2012-11-1417:50

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@sunriseyuen

\o"查看引用原文"引用@Parry

引用引用@Quella

引用引用如果混淆,那就沒辦法看到原來的代碼。。。

是,只是進行了混淆而已,一些邏輯還是能看出來的。

代碼多了,看到你不想看了.

但是如果價值很高的話,哈哈!支持(0)反對(0)

#5樓

2012-11-1419:34

|

James-yu

\o"發(fā)送站內(nèi)短消息"

DLL混淆后啥效果?支持(0)反對(0)

#6樓

2012-11-1420:17

|

幻元素

\o"發(fā)送站內(nèi)短消息"

使用了.NETReactor之后,序列化等用到元數(shù)據(jù)的功能就用不了了,不知有沒有什么解決方法.支持(0)反對(0)

#7樓[樓主]

2012-11-1420:41

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@James-yu

\o"查看引用原文"引用DLL混淆后啥效果?

效果是一樣的支持(0)反對(0)

#8樓[樓主]

2012-11-1420:44

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@幻元素

\o"查看引用原文"引用使用了.NETReactor之后,序列化等用到元數(shù)據(jù)的功能就用不了了,不知有沒有什么解決方法.

還真沒試過,我去看看:-)支持(0)反對(0)

#9樓

2012-11-1420:48

|

rsync

\o"發(fā)送站內(nèi)短消息"

這些混淆沒太大作用。人家直接到處IL,然后修改IL。之后重新build一份就解決問題了。支持(0)反對(0)

#10樓[樓主]

2012-11-1421:41

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@imfunny

\o"查看引用原文"引用這些混淆沒太大作用。人家直接到處IL,然后修改IL。之后重新build一份就解決問題了。

你用這種方法試試看能不能看到IL哦支持(0)反對(0)

#11樓

2012-11-1421:44

|

rsync

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@Parry

混淆的是可以看到的。我確定。。加殼的不能夠。但是加殼的不一定能夠運行,也不能夠被引用撒的。

用vs帶的ildasm看下就知道了。

至于代碼呢,誰愛看就誰誰拿去的,混淆沒什么意義。支持(0)反對(0)

#12樓

2012-11-1422:17

|

daconglee

\o"發(fā)送站內(nèi)短消息"

至于代碼呢,誰愛看就誰誰拿去的,混淆沒什么意義支持(1)反對(0)

#13樓

2012-11-1422:33

|

LineZero

\o"發(fā)送站內(nèi)短消息"

文章不錯,支持一下支持(0)反對(0)

#14樓

2012-11-1500:27

|

gongji

\o"發(fā)送站內(nèi)短消息"

aspack支持(0)反對(0)

#15樓

2012-11-1507:25

|

liuyilin888

\o"發(fā)送站內(nèi)短消息"

皮毛而已支持(0)反對(0)

#16樓[樓主]

2012-11-1509:45

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@liuyilin888

\o"查看引用原文"引用皮毛而已

恩水平一般脫殼的部分還等大牛們來寫

我再學(xué)習(xí)學(xué)習(xí)哈哈支持(0)反對(0)

#17樓[樓主]

2012-11-1512:09

|

Parry

\o"發(fā)送站內(nèi)短消息"

\o"查看所回復(fù)的評論"@imfunny

一般的混淆是可以的

但是使用上面的.NETReactor混淆后是看不到的,需要脫殼后才能看到。

至于混淆的意義主要看不同的需求了,就想js混淆一樣。支持(0)反對(0)

#18樓

2012-11-1514:07

|

eflay

\o"發(fā)送站內(nèi)短消息"

再保護也比c++的保護好破的多,所以一般最多加個變量名混淆,否則反倒破壞很多東西,降低執(zhí)行效率。。支持(0)反對(0)

#19樓

2012-11-1516:30

|

6572789

\o"發(fā)送站內(nèi)短消息"

混淆后,代碼慢不慢,并且會不會爆病毒錯誤支持(0)反對(0)

#20樓

2012-11-1518:56

|

為樂而來

\o"發(fā)送站內(nèi)短消息"

這個一定要學(xué)習(xí)。只有winform能這樣做嗎。webform行不行啊支持(0)反對(0)

#21樓

2012-11-1522:29

|

鵬程一鍵財務(wù)分析軟件Clojure+Logic+R+C#

\o"發(fā)送站內(nèi)短消息"

使用scala,clojure,等罕用的平臺語言,編譯后相當(dāng)于進行了一次流程混淆,再用混淆軟件混淆一下,效果應(yīng)還可以的。支持(0)反對(0)

HYPERLINK"/parry/archive/2012/11/14/Dot_NET_Co

溫馨提示

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

評論

0/150

提交評論