最近在写项目的时候正好涉及到Code,顺手整理了一下相关资料。
Found this helpful? Share it with your team and leave a comment below!
正文
通用中间语言(CIL)是由特定语言编译器(C #、VB.NET...)从源代码生成的一组与平台无关的指令。CIL与平台无关,可以在任何通用语言基础设施支持的环境(如.NET运行时或Mono )上执行。
CIL和其他元数据的存储方式必须遵循特定标准( ECMA-335 )。这样,像.NET Reflector或ILSpy这样的工具就可以读取CIL指令,并将代码翻译回其源语言( C #、VB.NET... )。
代码虚拟化将CIL代码转换为一组随机指令,这些指令在运行时由我们的虚拟机解释。由于没有标准化的程序来正确解释新指令集,因此无法重建原始CIL指令。因此,虚拟化代码无法翻译回其源语言。
由于虚拟化方法的性能显着降低,因此代码虚拟化应仅应用于选定的方法。
要启用代码虚拟化,您需要使用以下属性修饰相应的方法:
[System.Reflection.ObfuscationAttribute (Feature = "虚拟化", Exclude = false)]
[System.Reflection.Obfuscation (Feature = "虚拟化", Exclude = false)]
public void CreateFile (字符串文件名,字符串内容)
string directory = Path.GetDirectoryName (文件名);
StreamWriter streamWriter = new StreamWriter (File.Open (filename, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)); streamWriter .Write (内容);
剩余的存根代码执行虚拟机。压缩和加密资源
更多内容
除了上面提到的内容,还有几个点值得注意。首先是浏览器的兼容性,不同浏览器对Web Crypto API的支持程度有所不同。其次是性能问题,加密操作在大量数据时可能会影响用户体验。最后是密钥管理,如何安全地存储和传输密钥也是一个需要考虑的问题。
本文首发于JSVMP博客,转载注明出处。后续会持续更新更多相关内容。
Reference: Code Virtualization