它可以完美的與您的.NET程序結(jié)合在一起,拼盡全力的保護(hù)您的源代碼和知識(shí)產(chǎn)權(quán)。
MAXTOCODE 已經(jīng)完全超越了傳統(tǒng)的混淆手段來(lái)保護(hù)源代碼的方式,他將完全加密您的代碼,使您的代碼完全沒(méi)有辦法反編譯。保護(hù)強(qiáng)度已經(jīng)不是混淆器可以與之抗衡,是目前保護(hù)強(qiáng)度最大,最完美的.NET產(chǎn)品保護(hù)方案。
對(duì).Net程序代碼的加密過(guò)程如下:
1. 運(yùn)行 ildasm 將程序集反編譯成 il代碼文件.2. 對(duì)IL代碼文件進(jìn)行處理.(*)
3. 運(yùn)行 ilasm 將 IL代碼文件編譯成程序文件.
4. 直接對(duì)程序文件中的il字節(jié)碼加密.(**)
粗體表示的 2 , 4 是關(guān)鍵步驟.
我們先來(lái)看看第四步.這一步就是加密的關(guān)鍵步驟,這里就是使用MaxtoCode的加密算法對(duì)程序代碼進(jìn)行加密。顯然,對(duì)于破解來(lái)說(shuō)最直接直觀的方法就是對(duì)其第四步的逆向解密。
如果從這個(gè)方向去破解解密加密過(guò)的程序,那就像MaxtoCode號(hào)稱(chēng)的那樣MAXTOCODE的強(qiáng)度建立在加密算法之上。
理論上方法是可行的,但是工作量是非常大的。
那么我們還有其它的路可行呢?
現(xiàn)在來(lái)看看第二步MaxtoCode都做了什么。
用vs2003建一個(gè)最簡(jiǎn)單的winform程序,然后用MaxtoCode加密試試。我們將第三步之后,第四步之前的exe文件拿來(lái)研究。這個(gè)時(shí)候的exe程序代碼是還沒(méi)有被加密的?梢詒eflector。
看看 這個(gè)exe和我們直接的exe有什么區(qū)別:
1. 增加了一個(gè)類(lèi)InFaceMaxtoCode .2. 類(lèi)都被增加了一個(gè)靜態(tài)構(gòu)造函數(shù),在這個(gè)函數(shù)里面調(diào)用了InFaceMaxtoCode的一個(gè)靜態(tài)函數(shù)Startup。
3. 類(lèi)的原有構(gòu)造函數(shù)里面也增加了調(diào)用InFaceMaxtoCode.Startup的語(yǔ)句。
從這些來(lái)看,MaxtoCode的目的是要確保InFaceMaxtoCode.Startup 在程序中能夠最早的運(yùn)行。
這個(gè)行為和win32程序加殼很像,一般殼都是加密程序代碼,然后修改程序的啟動(dòng)入口,首先執(zhí)行殼的代碼,完成程序的解密,然后再執(zhí)行程序。一般殼有一個(gè)特點(diǎn):加密是對(duì)整個(gè)程序,啟動(dòng)時(shí)也是整個(gè)程序完全解密,然后再執(zhí)行。(我也見(jiàn)到過(guò)一個(gè)很特別的殼,程序是部分解密的,軟件注冊(cè)算法的那一塊, 是執(zhí)行一部分解密一部分,然后之前解密的又被垃圾信息填充了。)
對(duì)于殼只要我們找對(duì)了時(shí)間和地點(diǎn),就能從內(nèi)存中得到我們需要的東西。
那么 MaxtoCode加密后的。Net程序呢?
先來(lái)看看 MaxtoCode的加密方式。用ildasm反編譯 加密后的程序,會(huì)報(bào)很多錯(cuò)誤,這是正常的,從生產(chǎn)的IL文件看,各個(gè)類(lèi),函數(shù)都還在,只是函數(shù)體里面是只有ildasm的錯(cuò)誤信息。顯然是加密后的代碼無(wú)法反編譯。MaxtoCode對(duì)。Net程序的加密不是對(duì)程序整體的,而只是對(duì)函數(shù)體加密,程序類(lèi)結(jié)構(gòu)不變。有一點(diǎn)我們是很清楚的,加密后的程序要能夠正常運(yùn)行,在運(yùn)行時(shí)肯定是需要解密的。而解密的關(guān)鍵就在InFaceMaxtoCode.Startup 里面。