大多数混淆工具可以做的事情都有局限性,这就是其中之一。设置值不存储为字符串文字或支持字段,而是作为属性值:
Global.System.Configuration.DefaultSettingValueAttribute("bar")> _
Public Property Foo() As String
Get
Return CType(Me("Foo"), String)
End Get
Set(value As String)
Me("Foo") = value
End Set
End Property
VB/VS 生成属性 getter/setter,但正如您所见,它使用属性来存储初始值,而不是:
Private _foo As String = "bar"
在大多数情况下,没有理由隐藏 Attributes 中使用的字符串内容,因为它们通常是编译器关于类或属性的指令:
<Description("Bar String")>
<DefaultValue("bar")>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
Property BarString As String
这些属性文字都不需要隐藏,因为大多数属性既不包含运行时数据也不包含敏感信息。因此,My.Settings
它是一个边缘案例,是其实施方式的结果。请注意,这仅适用于您在 IDE 中输入的默认初始值。如果在运行时更新它们,它们不会写回属性,而是保存到文件中。
由于那里的设置很少,只需编写一个小类来自己管理它们并保存到 Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)