4

SmartAssembly と .NET アプリケーションに関する簡単な質問です。- 現在、このソフトウェアを試していますが、コードが難読化されているようですが、My.Settings はまだプレーン テキストで表示されていますか?

そのため、(.NET リフレクターを使用して) コードを難読化する前は、文字通りほとんどすべてを見ることができました。パスワード、IP、MySQL 接続文字列などの多くの情報を含む My.Settings クラスを含みます。

そこで、RedGate の SmartAssembly を使用してコードを難読化し、すべてのクラス/関数などがランダムなシンボルで表示されるようにしましたが、いくつかの項目 (ここでも My.Settings を含む) は変更されていませんか?

SmartAssembly スクリーンショット ここに画像の説明を入力

難読化された .NET リフレクターの結果 ここに画像の説明を入力

4

1 に答える 1

3

ほとんどの難読化ツールでできることには制限があり、これもその 1 つです。設定は、文字列リテラルやバッキング フィールドではなく、属性値として保存されます。

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 はプロパティ ゲッター/セッターを生成しますが、ご覧のとおり、属性を使用して初期値を格納します。

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)

于 2014-07-02T12:56:44.547 に答える