狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.NET 產(chǎn)品版權(quán)保護(hù)方案 (.NET源碼加密保護(hù))

admin
2015年1月31日 15:13 本文熱度 6350




文章簡(jiǎn)介:你希望自己用.net辛辛苦苦做出來(lái)的軟件被人輕易破解嗎?你希望自己花了大量人力物力用.net開(kāi)發(fā)出來(lái)的產(chǎn)品被競(jìng)爭(zhēng)對(duì)手輕易獲取核心代碼嗎?這是 一篇比較詳盡地介紹如何保護(hù)自己的.net源代碼的文章,如混淆、加密和強(qiáng)名稱等,出于保護(hù)原作者的角度,所以本人沒(méi)有掐頭去尾作為自己個(gè)人的文章,正因 為是全文轉(zhuǎn)載,所以并不代表本人完全贊同作者的全部觀點(diǎn),也不代表本人本人提作者提到的軟件做廣告,這一點(diǎn)請(qǐng)大家注意,不要認(rèn)為我為別人做廣告而罵我,其 實(shí)我根本不認(rèn)識(shí)作者。

一.前言


大家好,我是康杰,大家可以叫我Jason

我和大家一樣,都是搞技術(shù)出身,也未當(dāng)過(guò)講師,所以口材有限,如果講得不好之處,還希望大家多多海含,謝謝。

今天是我們第一次見(jiàn)面,能認(rèn)識(shí)你們,真的很高興。

下面我們不要耽誤大家的寶貴時(shí)間,讓我們馬上開(kāi)始上課吧。

DotNet ms開(kāi)發(fā)并推廣的企業(yè)解決方案,也是Ms以后幾年的核心發(fā)展戰(zhàn)略之一,所以我覺(jué)得 DotNet 是有前途的,他有一個(gè)優(yōu)秀的概念,還有一個(gè)強(qiáng)大的財(cái)團(tuán),想失敗都很難啊。DotNet 缺乏的是大型企業(yè)高層管理人員對(duì)它的信心,這還需要時(shí)間和事例去證明,世界上待開(kāi)發(fā)的大案件還很多,Java DotNet 最終誰(shuí)的市場(chǎng)比例多,現(xiàn)在還說(shuō)不清楚。

二.簡(jiǎn)介DOTNET 編譯原理

相信大家都使用過(guò) Dotnet ,可能還有不少高手。不過(guò)我還要講講Dotnet的基礎(chǔ)知識(shí),Dotnet的編譯原理。

Dotnet是一種建立在虛擬機(jī)上執(zhí)行的語(yǔ)言,它直接生成 MSIL 的中間語(yǔ)言,再由DotNet編譯器 JIT 解釋映象為本機(jī)代碼并交付CPU執(zhí)行。它和Java是一種機(jī)制的語(yǔ)言。這種語(yǔ)言的優(yōu)點(diǎn)就是您不需要去考慮您的程序在那里運(yùn)行,您只需要把功能做出來(lái),虛擬機(jī)會(huì)在任何地方實(shí)現(xiàn)您的功能。這是一個(gè)很好的趨勢(shì)和想法,但虛擬機(jī)的中間語(yǔ)言由于帶了大量的“元數(shù)據(jù)”信息,所以也極容易被反編譯。

MSIL 的代碼事實(shí)上和 C# VB 沒(méi)有多大的區(qū)別,只要您記住20來(lái)個(gè)指令,您應(yīng)該可以很容易的讀懂它。

保護(hù)代碼和開(kāi)源并不沖突,需要保護(hù)的一定有自己的理由,所以今天我也不是來(lái)反對(duì)開(kāi)源的。。呵呵

三.中間語(yǔ)言的缺點(diǎn)

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

1.我們最關(guān)心的知識(shí)產(chǎn)權(quán)

辛苦研究出來(lái)的算法,多少個(gè)不眠夜研究出來(lái)的成果。這本來(lái)是你賺錢的法寶,可是被公開(kāi)了,知識(shí)產(chǎn)權(quán)沒(méi)有了,那個(gè)時(shí)候恨誰(shuí)啊。

2.源代碼泄漏,被競(jìng)爭(zhēng)對(duì)手拿去和你競(jìng)爭(zhēng)(這種事很多)

就我知道的都有幾起,不過(guò)不方便說(shuō)出來(lái)。

他們從客戶那里想辦法copy回一份別的公司的產(chǎn)品,然后反編譯后,改改圖片,圖片以及版權(quán)信息和注冊(cè)信息,就拿出去賣了。

正規(guī)的公司一套賣二萬(wàn),它們一套才8千。功能基本上一樣,你說(shuō)你是客戶,你買誰(shuí)的?

3.自己產(chǎn)品的注冊(cè)機(jī)滿天飛

做個(gè)共享軟件吧,賺點(diǎn)錢改善一下生活吧,產(chǎn)品剛上市,還沒(méi)幾天注冊(cè)機(jī)每個(gè)網(wǎng)站都有。影響了銷售還影響心情,以后不做產(chǎn)品了,還是做服務(wù)靠得住,至少盜版不了啊, 呵呵,不過(guò)做服務(wù),還沒(méi)那么多資金,真是做什么都難啊。

4.被別人植入惡意程序,后果得由作者或開(kāi)發(fā)商承擔(dān)

以上說(shuō)的都只是被別人占便宜的事情,還好,只是讓能占占便宜,算了,虧也虧不了多少。可是,我再講一個(gè),那可就不是被人占便宜那么簡(jiǎn)單了。

比方說(shuō):貴公司出了套產(chǎn)品,放在網(wǎng)上給人下載試用,定好版本為1.0,某個(gè)惡意的公司不懷好意,把產(chǎn)品下載下來(lái),用萬(wàn)惡的Ildasm 反編譯一下,然后在里面加入一段按條件觸發(fā)的命令,命令的內(nèi)容是format c: or format d:. 然后再用萬(wàn)惡的ilasm 編譯一下,用貴公司的名義打個(gè)一模一樣的包,升級(jí)為1.2試用版,然后放到ftp shareware site 上供人試用下載。試想一下,不久您就會(huì)接到用戶的投訴,甚至是起訴。

再比方說(shuō):要離開(kāi)公司的員工,對(duì)公司的種種形為不滿,在離職交接以后,把公司Release好的項(xiàng)目的某個(gè)dll改一改,必定造成這個(gè)項(xiàng)目的重大損失。當(dāng)然,我可不是在教各位用這種方法對(duì)待自己不滿的公司。我只是告訴各位,Dotnet的程序集,不保護(hù)是不行的。


四.保護(hù)方案分類

下面,我開(kāi)始介紹一下.NET的各種保護(hù)方案。

我把Dotnet的保護(hù)分為三大類


  1. m$ 提供的非第三方保護(hù)方案

a)強(qiáng)名稱

強(qiáng)名稱是MS提供的保護(hù)機(jī)制。

它需要使用 sn 這個(gè)命令。

強(qiáng)名稱是什么意思呢?在這里稍作解釋。強(qiáng)名稱的作用就是防止程序集被非法修改,當(dāng)對(duì)程序集修改后,必須重新用您的私再對(duì)程序集加一次強(qiáng)名稱,這也是如果含有強(qiáng)名稱的程序集在混淆或加密后必須要重新加強(qiáng)名稱的原因。

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

那么強(qiáng)名稱有用嗎?網(wǎng)上輕松破解強(qiáng)名稱的方法很多,Ildasm反編譯加過(guò)強(qiáng)名稱的程序集后,在IL文件中將強(qiáng)名稱的相關(guān)信息去掉,再利用Ilasm編譯,就可以解除強(qiáng)名稱的限制了。這個(gè)我已經(jīng)過(guò)測(cè)試過(guò),您的強(qiáng)名稱的PublcKey不管是加在程序集中,還是加在Class中,都可以被去掉,所以強(qiáng)名稱不是一個(gè)完善的保護(hù)方式。不過(guò)在這里要說(shuō)一下,如果有一個(gè)好的方案能和強(qiáng)名稱一起使用,那么將建立一個(gè)非常好的機(jī)制,防修改,防濫用。

說(shuō)到濫用,這是強(qiáng)名稱的一個(gè)特殊用途,它可以使您的dll不被第三方調(diào)用,如果您的dll能保護(hù)自己的話。

關(guān)于強(qiáng)命稱講到這里,他的使用方式有必要的情況下,我們以后再深入的講解。


b)編譯MSIL為本機(jī)代碼 (誤區(qū)?)

關(guān)于這一點(diǎn),我經(jīng)常能在MS上的社區(qū)看到有MVP這樣面對(duì)問(wèn)題:

問(wèn):C#寫的程序能編譯成本機(jī)代碼嗎?

答:可以,使用 Ngen.exe 即可以 MSIL 代碼編譯為 本機(jī)代碼。

MVP這樣回答錯(cuò)了嗎?其實(shí),嚴(yán)格的說(shuō),MVP的回答是沒(méi)錯(cuò)的,Ngen.exe的確是可以將 MSIL 編譯為本機(jī)代碼,并可以使JIT不需要進(jìn)行再次編譯MSIL。這樣能加快程序的執(zhí)行效率。

但用戶這樣的問(wèn)題其實(shí),并不是對(duì)執(zhí)行效率不滿意,而是對(duì)中間語(yǔ)言不滿意,可惜 Ngen 并不能解決用戶的問(wèn)題。

讓我們來(lái)淺淺的分析一下 Ngen的工作吧。

NgenMS提供的 本機(jī)映象生成器,它可以將中間語(yǔ)言程序集編譯為本機(jī)代碼存放在緩存中。這里請(qǐng)大家注意,是存放在緩存中,Dotnet在內(nèi)存中建立了一個(gè)緩存,這個(gè)緩存中存放了許多常用的程序集編譯后的本機(jī)代碼,它們是常駐的,由此來(lái)加快Dotnet的執(zhí)行速度。

所謂一個(gè)本機(jī)代碼,因?yàn)楸緳C(jī)映射時(shí),會(huì)映射出一些 Framework 里需要的Method,編譯為匯編就是 Call 0x0200000這樣的樣子,而這些東西必須是事件編譯好的。那么理論上說(shuō) Ngen 必須要在當(dāng)前執(zhí)行的機(jī)器上運(yùn)行,而直接編譯成本機(jī)代碼的程序copy到另一個(gè)地方不一定可以用,而且我一直沒(méi)有找到能將緩存中的本機(jī)代碼 copy 出來(lái)的方法。

講到這里,不知道大家明白我的意思沒(méi)有,不管如何 Ngen.exe 只是一個(gè)提速的工具,因?yàn)橐獔?zhí)行編譯為本機(jī)代碼必須還是要原程序集,而原程序集中存在MSIL,所以讓程序無(wú)法脫離被反編譯的目地。

大家回家,如果有空,可以做做試驗(yàn)。

Ngen /show 就可以看到緩存中所有的已編譯好的程序集,所以Dotnet并不慢。
Ngen <assembly path or display name>
可以把指定程序集映象為本機(jī)代碼。

Ngen /? 可以看到其它參數(shù)


以上是ms提供的工具,下在講講,自己在編程的過(guò)程中,如何使用技巧來(lái)防止破解或反編譯。


  1. 編程技巧保護(hù)方案

在這里,我會(huì)給大家介紹兩種三種方式

1.人為混淆

在這里,我就要先簡(jiǎn)單的講講什么叫做混淆

混淆顧名思意,就是混亂,不明確的意思。MetaData中都有一個(gè)Rid,程序集運(yùn)行時(shí)就已經(jīng)和名稱沒(méi)什么關(guān)系了,都使用Rid來(lái)調(diào)用的,所以可以將名稱省去。

什么叫人為混淆呢,就是人為的制造混淆。

曾經(jīng)看過(guò)一個(gè)程序集,手工的將一個(gè)Method折成幾十個(gè)或上百個(gè),從而達(dá)到讓你看不懂的目的。不過(guò)可惜的說(shuō)一句:現(xiàn)在的Dotnet程序集的分析工具都很強(qiáng)大,正引用,反調(diào)用都可以用程序來(lái)實(shí)現(xiàn),所以即實(shí)這么做,了沒(méi)多大用處。著名的Reflector就有這些功能。

2.隱藏程序集

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

它是怎樣做的呢?讓我來(lái)告訴你,它的核心程序集事實(shí)上就是它的一個(gè)資源。而這個(gè)資源是一個(gè)加密的資源。如果我沒(méi)記錯(cuò),他應(yīng)該是在雙擊第一個(gè)需要反編譯的Method的時(shí)候開(kāi)始釋放這個(gè)資源,并對(duì)資源解密然后動(dòng)態(tài)的加載。這樣做的優(yōu)點(diǎn)核心程序集是不會(huì)在硬盤上留下任何痕跡的,它只解在內(nèi)存中解密并被加載,你基本上無(wú)法得到這個(gè)程序集。而且Dotnet是不允許內(nèi)存 Dump的。

大家是不是覺(jué)得這種保護(hù)方法不錯(cuò)呢?你可以把你的核心代碼加密后做成資源包在程序里,在使用的時(shí)候再解密出來(lái),這只需要你自己去實(shí)現(xiàn)就可以了。

不過(guò)我還得說(shuō)句負(fù)責(zé)任的話,如果你有精力,并且很有耐心和技術(shù),相信你還是可以在幾天時(shí)間內(nèi)找出它的核心程序集解密算法的位置。并成功的解出它的資源程序集。

如果是高手又非常有經(jīng)驗(yàn),這種方式的加密手段應(yīng)該是秒殺。


3.將程序集中的相關(guān)Method(方法)編譯成Unmanaged(非托管代碼)

下面介紹的內(nèi)容是不管你是菜鳥(niǎo),或是高手,都無(wú)法得到核心代碼的方

它可稱之為終極的保護(hù)手段,因?yàn)樗褪恰胺峭泄艽a”。

什么是托管代碼,什么是非托管代碼。

簡(jiǎn)單的說(shuō),托管代碼就是需要Jit去解釋的中間語(yǔ)言代碼,而非托管代碼

就是本機(jī)代碼。下面要介紹的方式就是教您如何在自己的程序集中即擁有托管代碼,又擁有非托管代碼。注意,非托管代碼是無(wú)法被現(xiàn)在的反編譯工具反編譯的。

特別注意一點(diǎn),我沒(méi)有自己試過(guò),但我看人做過(guò),并得到了證實(shí)。

Dotnet程序集中,允許托管代碼和非托管代碼共存,怎樣實(shí)現(xiàn)呢?這并不是無(wú)償?shù)模@是需要條件的。它的條件就是必須使用VC++.NET非托管方式來(lái)寫dll,再用VC++托管方式建立工程引入這個(gè)本機(jī)代碼的dll。最終生成一個(gè)Dotnet程序集的dll。那么這個(gè)程序集里面即有托管代碼,又有非托管代碼。托管代碼是可以反編譯的,而非托管代碼不可能被反編譯。

有人可能要問(wèn)了,這和自己用VC++寫個(gè)dll有什么區(qū)別?區(qū)別就是這樣的結(jié)合更緊密一些,而且也不能用常規(guī)的分析Asm的工具去分析這個(gè)dll

這里還要解釋一個(gè)誤解,有人說(shuō),利用Win32的本機(jī)代碼寫注冊(cè)算法,并生成dll供給Dotnet程序集調(diào)用,防止破解。其實(shí)這句話只說(shuō)對(duì)了一半,這只能增加破解注冊(cè)機(jī)的難度,并防止不了破解。為什么呢?因?yàn)樽?cè)對(duì)不對(duì)還是要在Dotnet程序集中進(jìn)行判斷,所以,只要改掉這個(gè)判斷,一樣達(dá)到了破解效果。但是如果要分析注冊(cè)算法,那可就是困難了一些了。


  1. 第三方保護(hù)工具

下面,我們講一講第三方的保護(hù)工具和概念

第三方保護(hù)工具較好的廠商有:

1.Aiasted.SOFT

a)產(chǎn)品 MaxtoCode ,種類 :加密、混淆

2.PerEmptive Solutions

a)產(chǎn)品 Dotfuscator Community ,種類 :混淆

3.Remotesoft

a)產(chǎn)品 Remotesoft Protect ,種類 :加密

b)產(chǎn)品 Remotesoft Dotfuscator ,種類 :混淆

4.XenoCode

a)產(chǎn)品 XenoCode ,種類:混淆

5.其它的一些公司,最近上海有一款公司出了國(guó)內(nèi)第一款混淆工具,如果大家要選擇混淆產(chǎn)品的話,支持一下國(guó)產(chǎn)也不錯(cuò)。


第三方工具的保護(hù)方式分類

1.混淆 ?

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

混淆軟件一般都有三個(gè)功能

1.字符串加密

2.名稱混淆

3.流程混淆

目前流行的混淆軟件有

XenoCodeDotfuscatorRemotesoftMaxtoCode里也集成了少許混淆功能。

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

利用程序當(dāng)場(chǎng)演示如何反流程混淆


1.目標(biāo)程序

2.被混淆的程序使用 Reflector 查看

3.使用Ildasm反編譯出 IL 文件

ildasm XenoCodeTest.exe /out=XenoCodeTest.il

4.IL 文件中的某個(gè)方法抽出

5.使用 Deflow 進(jìn)行反混淆

6.回填,并使用 Ilasm 進(jìn)行編譯

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

7.再回到 Reflector 中進(jìn)行查看


2.打包 ?

ThInstall 是一個(gè)打包工具,他可以打包幾乎所有的應(yīng)用程序,也包括

Dotnet

他將多個(gè)Dotnet程序集包在一個(gè)大程序里,達(dá)到無(wú)法反編譯的目地。不過(guò)想想也知道,即然是打包,在需要運(yùn)行時(shí)肯定會(huì)釋放,如果找到了釋放出來(lái)的文件,就跟沒(méi)保護(hù)一樣了,所以,這算是一個(gè)最爛的保護(hù)手段。當(dāng)然,本來(lái)我沒(méi)想把它列進(jìn)來(lái)的,是因?yàn)榭吹秸搲辖?jīng)常有人用這個(gè)Thinstall回復(fù)別人說(shuō)可以保護(hù)Dotnet程序集,所以我才特別忠告大家,別信。


3.加密 ?

加密保護(hù)并不同于混淆,它是目前最好的保護(hù)方式,也是保護(hù)能力最強(qiáng)的。

他把Dotnet的先天不足在一定程度上大幅提高,為Dotnet引來(lái)更多的開(kāi)發(fā)者。加密保護(hù)的軟件都有一個(gè)共同點(diǎn),即把Dotnet的反編譯引深Win32的反匯編中了,可惜的是,也限制了Dotnet跨平臺(tái)的優(yōu)勢(shì)。

此類的代表軟件有

MaxtoCode Remotesoft protect ,其它的一些國(guó)外的,我就不說(shuō)了,實(shí)在讓人用不下去。

由于Remotesoft公司過(guò)于小氣,Protect連試用版都不提供,所以我只能找到他的一個(gè)加密過(guò)的產(chǎn)品 WebGrid3.5,但WebGrid4.0就未用Protect了,不知道為什么,幾千美金就這么廢了?分析WebGrid3.5以后,發(fā)現(xiàn)他和MaxtoCode一樣,產(chǎn)生的結(jié)果就是看不到IL代碼了,而且也會(huì)生成一個(gè)本機(jī)代碼的DLL作為運(yùn)行環(huán)境。

由于對(duì)Remotesoft Protect無(wú)法深入研究,只知道效果和MaxtoCode一樣,那么我們就來(lái)講MaxtoCode的實(shí)現(xiàn)原理吧。

MaxtoCode為了迷補(bǔ)Dotnet的先天性不足而出世的。它是中國(guó)第一款高強(qiáng)度的Dotnet保護(hù)軟件,在世界的Dotnet保護(hù)水平線上也處于優(yōu)勢(shì)性的領(lǐng)先。

其實(shí)MaxtoCode的原理很簡(jiǎn)單,它是將程序集中所有的IL進(jìn)行加密,所以使用反編譯器無(wú)法看到IL,從而不能進(jìn)行反編譯。基于Framework提取MethodIL作為基礎(chǔ)原理,當(dāng)JIT需要IL時(shí),我就將加過(guò)密的IL解密給JIT去編譯,這樣就形成了MaxtoCode的基本原理。


下面是MaxtoCode 加密的過(guò)程及結(jié)果:

1.選擇程序集

2.選擇高級(jí)加密的選項(xiàng)

3.選擇混淆的選項(xiàng)

4.加密

5.結(jié)果

加密后的程序運(yùn)行結(jié)果:

使用 Reflector 反編譯的結(jié)果

使用 MS 自帶的工具 Ildasm 進(jìn)行反編譯

使用 Ildasm 查看代碼區(qū)內(nèi)容

源代碼都為空了,完全不可以反編譯.杜絕了反編譯的問(wèn)題.

該文章在 2015/1/31 15:13:34 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved