2017-07-19 35 views
2

ファイルパスに基づいてDLLが署名されているかどうかを確認しようとしています。私はWinVerifyTrustを使用してこのタイプの問題の既存の解決策があることを知っていますが、「C:\ Windows \ System32 \ kernel32.dll」に対してチェックしたところ、「C:\ Windows \ System32 \ kernel32.dll "は署名されていません。" kernel32は署名されたdllでなければなりません。私はWindows 7 fyiを使用しています。DLLが署名されているかどうか確認するC++

これは私が呼び出された関数のソースコードです:https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx

私は機能を解決することができますか?

+0

Windows 10でこのアプリケーションを実行したとき: 'ファイル" c:\ windows \ system32 \ kernel32.dll "が署名され、署名が検証されました。 ' – selbie

+0

fwiw、そのコードを32ビットVisual Studioのデフォルト)、64ビットOSで実行された場合、c:\ windows \ system32のファイルアクセスはc:\ windows \ syswow64にリダイレクトされます。 syswow64のkernel32.dllがコード署名されていることを手動で確認できますか?また、kernel32.dllは他の可能性のあるリダイレクトの対象となる非常に特殊なDLLなので、手動で他のディレクトリにコピーして名前を変更してください。次に、コピーしたファイルのコードを再度実行して、違いがあるかどうかを確認します。 – selbie

+0

"C:\ Windows \ SysWOW64 \ kernel32.dll"というファイルが "署名されていません"というsyswowのメッセージでkernel32.dllを試したときに32ビットとしてコンパイルする必要があります。私はC:\と同じメッセージでDLLを入れてみました。私はグローバルソリューションを探していますので、おそらくWindows 7では動作しませんが、過去のVistaではすべてのオペレーティングシステムで何かが必要です。 –

答えて

4

はいWinVerifyTrustは正しい機能ですが、2度呼び出す準備が必要です。

最初にWTD_CHOICE_FILEと呼びます。それが成功すると完了します。そうでない場合は、WTD_CHOICE_CATALOGCryptCATAdminCalcHashFromFileHandle + CryptCATAdminEnumCatalogFromHash + CryptCATCatalogInfoFromContext)で再度呼び出す必要があります。Windowsファイルには証明書情報(特にPE以外のファイル)が埋め込まれていないものがあるからです。 Sysinternalsのフォーラムでさまざまなスレッド(thisthis)があります

(またそれを2回呼び出しを避けるためにfind the catalog info firstに試すことができますが、私はこれが遅いと仮定)、おそらくこのに関する質問のための最適なリソースです。

0

投稿したコードを使用して、埋め込みデジタル署名を検証することができます。特にWindowsバイナリの場合は、カタログ署名されていることがよくあります。

カタログで署名された実行ファイルの場合、本質的には、署名がインストールされたカタログの一部として格納されるということです。

この参照コードfrom process hackerを使用することができます。 PhpVerifyFileFromCatalogを見てください。

+0

スタンドアロンコードを探していたので、ハッカーコードを処理するにはたくさんのものが必要です。誰も答えなければ、私はあなたの答えを受け入れるでしょう。 –

関連する問題