.NET混淆 [SmartAssembly]

4

关于SmartAssembly和.NET应用程序的问题。- 我目前正在尝试该软件,它似乎在混淆代码,但My.Settings仍然以明文形式可见?

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

因此,我使用RedGate的SmartAssembly混淆了代码,确实所有的类/函数等都出现了随机符号,但是有几个项目(包括My.Settings)仍然没有改变?

SmartAssembly截图 enter image description here

.NET反编译器中的混淆结果 enter image description here

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"

在大多数情况下,没有必要隐藏用于属性的字符串内容,因为它们通常是向编译器提供有关类或属性的指令:

<Description("Bar String")>
<DefaultValue("bar")>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
Property BarString As String

这些属性文字没有必要隐藏,因为大多数属性既不包含运行时数据也不包含敏感信息。因此,My.Settings是一个边缘情况,这是它实现的结果。请注意,这仅适用于您在IDE中输入的默认初始值。如果您在运行时更新它们,则不会写回到属性中,而是保存到文件中。

由于你只有很少的设置,所以可以编写一个小类来自己管理并保存到Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)中的文件中。


1
这可能听起来很蠢,但我不希望别人能够读取包含所有设置的文件... - Samuel Nicholson
2
“自行管理它们”中的隐含意思是要做任何你想隐藏内容的事情。选项包括a)在设置字符串值时对其进行加密,b)简单的字符串混淆,c)使用二进制序列化器序列化文件,d)将其保存为文本但加密该文件。 - Ňɏssa Pøngjǣrdenlarp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接