文档彩票走势图>>Eziriz中文文档>>代码虚拟化
代码虚拟化
作为开发人员,自己辛苦在.net框架下写的dll或者exe文件,不想被别人通过反编译工具轻松查看。那么我们就需要对自己写的代码进行保护。在笔者经过大量的搜索与尝试后,发现一款不错的程序保护工具.NET Reactor。如其名字所示,这是一款针对.net程序进行保护的专门工具,因为专业,所以强大。
通用中间语言 (CIL) 是由特定语言编译器(C#、VB.NET...)从源代码生成的一组独立于平台的指令。CIL 与平台无关,可以在任何公共语言基础结构支持的环境(例如 .NET 运行时或 Mono)上执行。CIL 和其他元数据的存储方式必须遵循特定标准 (ECMA-335)。这样,.NET Reflector 或 ILSpy 等工具就可以读取 CIL 指令并将代码翻译回其源语言(C#、VB.NET...)。代码虚拟化将 CIL 代码转换为一组随机指令,这些指令在运行时由我们的虚拟机解释。由于没有正确解释新指令集的标准化程序,因此无法重构原始 CIL 指令。因此,虚拟化代码无法翻译回其源语言。由于虚拟化方法的性能显着下降,因此代码虚拟化应仅应用于选定的方法。要启用代码虚拟化,您需要使用以下属性来装饰相应的方法:
[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(); }
保护后(用ILSpy反编译):
剩余的存根代码执行虚拟机。