0

内部目的で vb.net を使用してプロジェクトを開発し、それを難読化しました。以下のようにエラーを投げています。

「タイプ 'e' のパブリック メンバー 'Var1' が見つかりません。」</p>

コード:

Public Sub get_constants_from_DbList(ByRef frm As Object, ByRef sDbname As String)

    For Each Row As DataRow In CommonObj.DSCommonProc.Tables("dblist").Rows 
            If StrComp(Row("DbName").ToString, sDbname, CompareMethod.Text) = 0 Then
             prg_id = Row("PrgId").ToString
             frm.Var1= Row("ChangesDbName").ToString
             frm.Var2 = Row("LoadTableName").ToString
             frm.Var3 = Row("ServerName").ToString
             Exit Sub
        End If
    Next

End Sub

フォーム (FrmMain という名前) は、呼び出し元のプロシージャからこのサブルーチンへのパラメーター 'frm' に渡されます。Var1 などは、その形式のパブリック変数です。

私たちが試した難読化ツールは –

  1. スマートアセンブリ 6

  2. PreEmptive Dotfuscator および Analytics CE (Visual Studio 2012 に付属)

難読化なしでexeは正常に動作しています。

サブルーチンで変数 'Var1' を割り当てているときにエラーがスローされます。コード行を次のように変更すると、難読化された exe が正常に動作します。

FrmMain.Var1= Row("ChangesDbName").ToString

難読化には遅延バインディングが欠けていると考え、小さなサンプル プロジェクトで同様のタイプのコードを試しました。しかし、それにはエラーはありませんでした。この小さなコードを添付しました。しかし、その大きさのため、オリジナルのプロジェクトをアップロードすることはできません。

どうすればエラーを追跡できますか?

私のサンプル アプリケーションのソース コードは、ここにあります。

4

2 に答える 2

1

リフレクション/遅延バインディング/動的で難読化を使用しないでください。このようなトラブルに巻き込まれるだけです。

難読化ツールは、すべてのプライベート ID と内部 ID を難読化しますが、実行時に名前でバインドしていることを認識できません。

エラーをオンにOption Strictして解決します (つまり、引数 frm の型を実際の型に変更します)。

于 2013-04-04T07:18:51.400 に答える