この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 22989|答える: 1

[WinForm] .net/c#は自社のDLLが偽造されるのを防ぐために強力な署名を使用しています

[リンクをコピー]
掲載地 2017/10/19 17:31:40 | | | |
.net/c#アプリケーションは、呼び出されたdllが偽造に置き換えられないようにどうやって保証するのでしょうか?
https://www.itsvse.com/thread-4173-1-1.html
(出典:建築家)

前回、DLLが他人によって偽造されて実行されることをテストしましたが、どうやって防ぐのでしょうか?



署名紹介:
アセンブリ署名(ストロングネーム署名とも呼ばれる)は、アプリケーションやコンポーネントに一意のアイデンティティを与え、他のソフトウェアが明示的にアプリケーションやコンポーネントを識別し参照できるようにします。 強力な名前はアセンブリの単純なテキスト名、バージョン番号、地域情報(提供されている場合)、公開鍵/秘密鍵ペアで構成されます。

例えば、強力なネーミングにより、アプリケーションの作成者や管理者は共有コンポーネントで使用されるサービスの正確なバージョンを指定できます。 これにより、異なるアプリケーションが異なるバージョンを指定しても、他のアプリケーションに影響を与えません。 また、コンポーネントの強力な名前をセキュリティ証拠として用いて、2つのコンポーネント間で信頼関係を築くこともできます。

アセンブリに強く署名するには、購入したコードでデジタル証明書に署名する必要はありません。.NETが提供するSNツールでSNKファイルを生成でき、このファイルを保存することでアセンブリの署名を保証できます。

しかし、アセンブリの強力な署名は実行ファイルに対するデジタル署名とは異なります(たとえアセンブリがexeファイルであっても)。 MSDNには明確にexeファイルは強く署名すべきではないと書かれています(私は署名しましたが)。 ファイルのデジタル署名とは、実際にはファイルシステムレベルで任意のファイルに署名を付け、オペレーティングシステムにそのファイルの発行元を伝えることです。 ファイルのプロパティダイアログで「デジタル署名」タブを見ることができます。


dllに強く署名し、通常通り実行可能なプログラムで呼び出します。


もしDLLを偽造DLLに置き換えたらどうでしょうか? テストしてみると、実行がエラーであることが分かり、これにより呼び出しDLLの偽造を効果的に防げます(テストして署名済みのdllコードを修正し、再生成しましたが、プログラムが正しく署名されていれば通常通りアプリケーションを呼び出せるはずです!!

誤差は以下の通りです:

このダイアログの代わりにリアルタイム(JIT)デバッグを呼び出す方法についての詳細は、
このメッセージの最後をご覧ください。

珍しいテキスト**************
System.IO.FileLoadException: 未能加载文件或程序集“dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
ファイル名:「dllFrom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eb67821f2cf76b4e」
   TestDll.Form1.button1_Click_1(オブジェクトセンダー、EventArgs e)
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   At System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons buttons, Int32 clicks)
   In System.Windows.Forms.Control.WndProc(Message& m)
   In System.Windows.Forms.ButtonBase.WndProc(Message& m)
   In System.Windows.Forms.Button.WndProc(Message& m)
   In System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   In System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   In System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

警告:アセンブリバインディングのログはオフになっています。
アセンブリバインディング失敗ログを有効にするには、レジストリ値 [HKLM\Software\Microsoft\Fusion!" EnableLog(DWORD)は1に設定されています。
注:アセンブリバインディングの失敗ログにはパフォーマンスペナルティが発生します。
この機能をオフにするには、[HKLM\Software\Microsoft\Fusion!]のレジストリ値を削除してください。 EnableLog)。



ロードアセンブリ**************
MSCORLIB
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2098.0 開発元:NET47REL1LAST
    ベースコード:file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
TestDLL
    アセンブリバージョン:1.0.0.0
    Win32バージョン:1.0.0.0
    基本コード:file:///C:/Users/itsvse_pc/Desktop/dllForm/TestDll/bin/Debug/TestDll.exe
----------------------------------------
System.Windows.Forms
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2094.0 ビルド元:NET47REL1LAST
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
システム
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2093.0 ビルド:NET47REL1LAST
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
システム。図面
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2046.0 ビルド:NET47REL1
    ベースコード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration(システム・構成)
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2046.0 ビルド:NET47REL1
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2098.0 開発元:NET47REL1LAST
    ベースコード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2046.0 ビルド:NET47REL1
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources(システム.Windows.Forms.resources)
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2046.0 ビルド:NET47REL1
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
mscorlib.resources
    アセンブリバージョン:4.0.0.0
    Win32バージョン:4.7.2046.0 ビルド:NET47REL1
    基本コード:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------

JITデバッグ**************
リアルタイム(JIT)デバッグを可能にするために、
これはアプリケーションやコンピュータの.configファイル(machine.config)のsystem.windows.formsセクションで設定する必要があります
jitDebuggingの値。
アプリケーションをコンパイルする際にも有効化する必要があります
デバッグ。

例えば:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

JITデバッグ後の処理されていない例外は有効化されます
このマシンに登録されたJITデバッガに送信されます。
この対話で扱われるのではなく。







先の:.net/c#アプリケーションは、呼び出されたdllが偽造に置き換えられないようにどうやって保証するのでしょうか?
次に:FSADF{:1_2:}
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com