• <menu id="w2i4a"></menu>
  • logo Eziriz中文文檔

    代碼虛擬化


    作為開發(fā)人員,自己辛苦在.net框架下寫的dll或者exe文件,不想被別人通過反編譯工具輕松查看。那么我們就需要對自己寫的代碼進(jìn)行保護(hù)。在筆者經(jīng)過大量的搜索與嘗試后,發(fā)現(xiàn)一款不錯的程序保護(hù)工具.NET Reactor。如其名字所示,這是一款針對.net程序進(jìn)行保護(hù)的專門工具,因為專業(yè),所以強(qiáng)大。

    .NET Reactor 最新下載

    通用中間語言 (CIL) 是由特定語言編譯器(C#、VB.NET...)從源代碼生成的一組獨(dú)立于平臺的指令。CIL 與平臺無關(guān),可以在任何公共語言基礎(chǔ)結(jié)構(gòu)支持的環(huán)境(例如 .NET 運(yùn)行時或 Mono)上執(zhí)行。CIL 和其他元數(shù)據(jù)的存儲方式必須遵循特定標(biāo)準(zhǔn) (ECMA-335)。這樣,.NET Reflector 或 ILSpy 等工具就可以讀取 CIL 指令并將代碼翻譯回其源語言(C#、VB.NET...)。代碼虛擬化將 CIL 代碼轉(zhuǎn)換為一組隨機(jī)指令,這些指令在運(yùn)行時由我們的虛擬機(jī)解釋。由于沒有正確解釋新指令集的標(biāo)準(zhǔn)化程序,因此無法重構(gòu)原始 CIL 指令。因此,虛擬化代碼無法翻譯回其源語言。由于虛擬化方法的性能顯著下降,因此代碼虛擬化應(yīng)僅應(yīng)用于選定的方法。要啟用代碼虛擬化,您需要使用以下屬性來裝飾相應(yīng)的方法:

    [System.Reflection.ObfuscationAttribute(Feature = "Virtualization", Exclude = false)]
    用法示例

    前:

    [System.Reflection.Obfuscation(Feature = "Virtualization", Exclude = false)]
    public void CreateFile(string filename, string content)
    {
    string directory = Path.GetDirectoryName(filename) ;
    if (!Directory.Exists(directory))
    {
    Directory.CreateDirectory(directory);
    }
    StreamWriter streamWriter = new StreamWriter(File.Open(filename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite));
    streamWriter .Write(content);
    streamWriter.Flush();
    streamWriter.Close();
    }

    保護(hù)后(用ILSpy反編譯):

    DevExpress VCL圖表控件

    剩余的存根代碼執(zhí)行虛擬機(jī)。

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();