根据我对 .NET 代码的理解,它首先被编译为 Microsoft 通用中间语言 (MSIL),然后在运行时被转换为机器代码。
而 C++ 代码直接编译为机器代码。
由于 MSIL 具有丰富的元数据,因此逆向工程 .NET DLL 比逆向工程 C++ DLL 容易得多。但是,如果我使用最好的 .NET 混淆工具混淆我的 .NET 代码,我可以获得 C++ DLL 提供的那种反编译保护吗?为什么?
根据我对 .NET 代码的理解,它首先被编译为 Microsoft 通用中间语言 (MSIL),然后在运行时被转换为机器代码。
而 C++ 代码直接编译为机器代码。
由于 MSIL 具有丰富的元数据,因此逆向工程 .NET DLL 比逆向工程 C++ DLL 容易得多。但是,如果我使用最好的 .NET 混淆工具混淆我的 .NET 代码,我可以获得 C++ DLL 提供的那种反编译保护吗?为什么?
C++ 代码最有可能被转换为汇编,然后被转换为机器代码
.net 代码编译成字节码,在虚拟环境中执行
维基百科很好地概述了当前的 .net 混淆器及其应用的技术:维基百科:.NET 混淆器列表所有这些技术都提供了极大的保密性,但不能指望达到打包/混淆二进制文件提供的安全性(查看最近的恶意软件打包/混淆)
另一方面,“标准”C++ 库没有被混淆,即它们没有反编译保护。逆向工程时出现的大多数问题都源于编译器优化技术。
.Net 二进制文件包含语义信息。除了 x 字节大小的字段之外,机器代码没有关于“字符串”或变量类型的概念。话虽如此,维基百科页面上的框架提供的混淆对于大多数场景来说应该绰绰有余。