我们会通过混淆器来运行我们的.NET二进制文件(至少启用字符串混淆),然后在构建过程中进行一些基本检查以验证此操作。我惊讶地发现,将字符串从
关于字符串混淆,
static readonly string
更改为const string
后,当查看反汇编代码(通过ildasm
输出)时,更改后的字符串现在以明文形式可见。关于字符串混淆,
const string
和static readonly string
之间有什么区别?
编辑:
为了举例说明,这里是一个小程序:class Program
{
private const string MyConstString = "MyConstString";
private static readonly string MyStaticReadonlyString = "MyStaticReadonlyString";
static void Main(string[] args)
{
string myLocalString = "myLocalString";
Console.WriteLine(MyConstString);
Console.WriteLine(MyStaticReadonlyString);
Console.WriteLine(myLocalString);
Console.WriteLine("Hit <ENTER> to exit");
Console.ReadLine();
}
}
在查看.il代码后,唯一以明文形式呈现的值是const string
。这对于两个不同的混淆工具都是正确的:
.field private static literal string a = "MyConstString" // using Dotfuscator
.field private static literal string '[SOH]' = "MyConstString" // using RedGate SmartAssembly
Console.WriteLine("Foo");
- Daniel Hilgarth