由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)
新一代NET代碼保護工具 MaxtoCode 的原理簡介
?
MaxtoCode作為新一代保護工具,他有絕對優于目前所有NET代碼保護工具的強度,是目前最保護強度最高的解決方案。但它也有缺點,最大的缺點即是:被加密后的程序集只能在WINDOWS平臺下運行,而不能跨平臺。但,MS的戰略影響,幾乎不可能出現官方非WINDOWS平臺的NET運行環境,所以,此缺點先忽略不計,也許隨著版本的升級,MaxtoCode可能會考慮跨平臺的應用。
?
MaxtoCode為什么說是目前最強壯的NET代碼保護方案呢?
?
如果大家是老程序員,應該知道Win32中的殼保護方案。這是一個非常好的方案,不過可惜,殼的最終較量變成了Anti debug的較量。因為殼有一個致命的弱點,即在會在內存中完全解開被加殼的程序代碼,并將執行指針指向被加殼的程序代碼第一行。所以,只要找到被加殼的程序代碼第一行,即可以得到原來的程序。這種方式被業界叫做脫殼。
?
MaxtoCode 的原身不是NET語言編寫,它借用了Win32的殼概念,并更優于Win32的殼概念(這也是因為NET的特點才能達到這樣的程度)。MaxtoCode借助門檻更高的ASM語言,對NET代碼進行加密,從而得到了更強壯的NET代碼保護方案。
?
MaxtoCode可以理解成NET的殼,但是它是一個不容易被脫掉的殼,如果說Win32的殼是件外套,那么MaxtoCode就是皮膚。殼的特點是在內存中釋放所有的代碼,而MaxtoCode不會這樣做。它比Win32的殼更加安全,它的安全性處決于MaxtoCode的加密算法。這正是MaxtoCode要達到的目地。因為理論上不可能有無法破解的程序,我們要的是無限提高破解成本的保護方案,來迫使破解者放棄對程序的破解。如果MaxtoCode能把破解強度建立在加密算法上,那么,MaxtoCode將能大幅度的提高保護強度。要知道,一,二種算法可能很好破解,可當有一,二十種算法、而且其中還有大量的高強度算法的變種算法,那么,想要完全解出這些算法是一件頭痛的事情。最重要的是MaxtoCode還在不停的增加算法,來增加MaxtoCode的安全性。
?
講了那么多廢話,下面,我們來講述一下MaxtoCode的原理:
首先先說一下CLI的解釋原理:
CLI接到程序集需要解釋的請求后,動態的從內存中取出一段代碼(IL)然后交由CLI解釋,CLI解釋成機器語言,然后提交給CPU執行,在此中間,還產生大量的靜態緩存。特別需要注意的是,CLI是按Method進行解釋的。
正因為這樣的原理,MaxtoCode則有空間將ASM引入到Method中去。
MaxtoCode的大致工作原理如下:
?
當CLI提取Method的IL代碼時,MaxtoCode提供的解釋環境將Method的IL代碼解密回去。
當CLI提取完畢后,MaxtoCode將Method的IL代碼再進行破壞,達到加密的目地
原理表:
?
CLI > MaxtoCode > IL > CLI > MaxtoCode > 加密
?
從而保證不會象原始的Win32殼一樣留下代碼在內存中。也保證了將NET的保護安全建立在眾多的加密算法之上。
?
同時,由于在未被MaxtoCode解密的情況下是亂碼,根本無法被靜態反編譯,所以不管是高級的反編譯,還是低級的反編譯,都無法得到一個可讀或可看的程序集。
?
動態加、解密成本相對來說提高,所以MaxtoCode在處理結構上做了更多的優化,已經把結構處理得相當的優化,所以,在某些特寫的程序上幾乎感覺不到MaxtoCode的存在,而且MaxtoCode強制了NET的緩存機制,“一般加密方法”還可以提高運行速度1%~5%。重要的方法使用“高級加密方法”可以得到非常穩定的保護(這里要負責任的說一句,高級加密方法會降低運行效率,根據不同的程序產生不同的影響,最好的效果是完全感覺不到。但我們希望不要全部使用高級加密方法進行加密,而是酌情考慮使用和先測試再使用)。
?
―――――――――――――――我是無敵分隔線―――――――――――――――――
其它保護方法
?
還有一些方法,是無法使用工具去實現的,只有手工去做。
如:類折分,方法折分
一個類,寫完后,手工折成上百個類
一個大方法,折成上百個子方法
別覺得這不可能哦,我可親眼見過這樣的程序,不過,從安全性來說……沒多大意義,因為Reflector的功能真的太強大,只要你是能夠看得見的結構,都逃不了被Reflector分析得一個透徹。
???????? 還有一著名的保護方法:Reflector的保護方法,把自己的核心程序做成一個資源包,然后加密,當需要的時候動態加載,只要你在載入的時候夠復雜,還是有一定的保護作用的。其實,這種方法的破解有更好的方法,可以只需要幾分鐘就可以解破。但今天它不是我們需要講解的范圍,故不詳細解說了。免得某些用此方法的同志圍摳我。呵呵。
?
好,至此,從淺到深,談談NET混淆原理已經講完了,由于時間很忙,無法給出更多的例子和實戰經驗,所以希望大家能夠舉一反三,自己多演練,多研究。如果那天有那位大俠要發布反流程混淆的工具,記得給小弟我留一份,非常感謝。轉載于:https://www.cnblogs.com/Aiasted/archive/2005/07/11/190447.html
總結
以上是生活随笔為你收集整理的由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google ToolBar 3.0 B
- 下一篇: 推荐一个读书的网站