我们通过混淆器(至少启用字符串混淆)运行我们的 .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 代码后,纯文本中的唯一值是 .il 代码const string
。这适用于两种不同的混淆工具:
.field private static literal string a = "MyConstString" // using Dotfuscator
.field private static literal string '[SOH]' = "MyConstString" // using RedGate SmartAssembly