none
アセンブリ署名のチェックについて教えてください。 RRS feed

  • 質問

  • アセンブリ署名のチェックについて教えてください。

    現象1:
     署名の付いたアセンブリ(exe)をバイナリエディタで内部を
     修正しても、実行できてしまうことがある。

    ・開発マシン(XP-SP2 + Visual Studio 2008 SP1)で、簡単な
     フォーム(ボタン1つのみで、ボタンを押すとメッセージボ
     ックスを出す)をC#にて、署名付きで作成しました。
     ビルドしたものは、GACには登録していません。
    ・出来上がったファイルは当然実行できます。
     sn.exeで署名チェック(-vf)も有効ですと判定されます。
    ・出来上がったファイルをバイナリエディタで開き、ボタンの
     キャプション文字列を探して、変更して保存しました。
    ・改変したので、sn.exeで署名チェック(-vf)では、無効と判定
     されます。
    ・ところが、エクスプローラ等から改変したファイルが実行出
     来てしまいます。
    ・別マシンにコピーして実行したところ、署名チェックでひっ
     かかり、実行出来ませんでした。
     (別マシンにも、VS2008SP1はインストールされています)

    その他やってみた事。
     「sn.exe -Pb n」を実行してやるとビルドしたマシン上でも
     署名チェックに引っかかりました。
     ビルドしたマシン以外で、「sn.exe -Pb y」を実行しても、
     署名チェックに引っかかりました。
     Microsoft .NET Framework 2.0 Configurationで、完全信頼ア
     センブリのリスト等を見ても、ビルドしたexeは入っていな
     いようです。


    まず、最初に知りたいことは以下の通りです。
    ・何故、ビルドしたマシン上では、改変しても実行できてしま
     うのでしょうか?
    ・ビルドしたマシン以外に持っていって、そのマシンで、同様
     に署名チェックを回避することが可能なのでしょうか ?

    sn.exe -?
    でのヘルプの中に

    -Pb [y|n]
        CLR ポリシーを有効化 (y)、無効化 (n)、またはチェック (パラメータなし) します。
        この CLR ポリシーは、信頼されたアプリケーションがアセンブリの厳密な名前の署名確認を
        バイパスできるようにします。

    とありますが、実際に「アセンブリの厳密な名前の署名確認をバイパス」
    する時は、どんな時なのでしょうか ?

    よろしくお願いします。
    Sorry, I am not good at English.
    2009年2月6日 2:56