4

只是一个关于 SmartAssembly 和 .NET 应用程序的快速问题。- 我目前正在试用该软件,它似乎是混淆代码,但 My.Settings 仍然以纯文本形式显示?

所以在混淆我的代码(使用 .NET 反射器)之前,我几乎可以看到所有内容。包括包含大量信息的 My.Settings 类,例如密码、ip、MySQL 连接字符串等。

所以我使用 RedGate 的 SmartAssembly 混淆了代码,果然所有的类/函数等都出现了随机符号,但是有几个项目(再次包括 My.Settings)保持不变?

SmartAssembly 屏幕截图 在此处输入图像描述

.NET 反射器中的混淆结果 在此处输入图像描述

4

1 回答 1

3

大多数混淆工具可以做的事情都有局限性,这就是其中之一。设置不存储为字符串文字或支持字段,而是作为属性值:

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)

于 2014-07-02T12:56:44.547 回答