Windowsバッチ(.bat)ファイルに署名する方法


8

Windows 7を実行していますが、バッチファイルを実行しようとすると、「発行元を確認できませんでした。このソフトウェアを実行してもよろしいですか?」と表示されます。

そのため、コード署名証明書で署名しようとすると、「SignTool Error:このファイル形式は認識されないため、署名できません」と表示されます。

だから私は岩と難しい場所の間に立ち往生しています。どちらかのメッセージを排除する方法はありますか?

スクリーンショット


1
PowerShellスクリプトとして書き直して、署名しますか?私自身、署名付きバッチファイルについて聞いたことがありません。
Iszi

バッチファイルには署名しません。バッチファイルが署名する必要のある何かを呼び出しているようです。
Mark Allen

1
プロンプトのソースは何ですか?つまり、タイトルバーとアイコンとは何ですか?それは実際にはWindowsプロンプトですか、それともサードパーティのセキュリティプログラムからのプロンプトですか?それのスクリーンショットを撮って、それを質問に追加してください。
Synetech 2012


@SeanCheshire、その場合、techturtleは正しいです。ネットワーク上のすべてのものはWindowsによって疑わしい目で見られるため、ローカルにコピーするか、その場所を信頼済みゾーンに追加する必要があります。
Synetech 2012

回答:


4

ネットワークの場所からバッチファイル(または他の実行可能ファイル)を実行すると、同様のメッセージが表示されます。この場合は、ローカルドライブに移動することを検討してください。もう1つの方法は、ローカルドライブの個別のバッチファイルを使用して、ネットワーク上のものを起動することです。起動するバッチファイルに必要なのは1行だけです。

@call \\network\folder\batch.bat

Windowsはローカルファイルを処理しません。そのファイルが実行されると、問題なくネットワークバージョンを呼び出すことができます。


@Sosukodo、E:ネットワークマップドライブですか?
Synetech 2012

ソート;-) MacホストでVirtualBox Windows 7ゲストを実行しています。E:はVirtualBox共有フォルダーです。共有フォルダがネットワークドライブと見なされることを知りませんでしたが、あなたがそれを言ったとき、それは理にかなっています。

4

バッチファイルには署名しません。バッチファイルが署名する必要のある何かを呼び出しているようです。

編集:バッチファイルを投稿したので、ネットワークの場所が原因であることがわかります。または、単にネットワーク上の場所からファイルをコピーしただけの場合にも発生します。後者の場合、Windowsが代替データストリームを介してファイルを他のインターネットゾーンにあるようにタグ付けしているためです。これを回避するには、次の2つの方法があります。

  1. Internet Explorerのイントラネットゾーンのセキュリティゾーンを変更します。
  2. typeコマンドを使用して、ファイルの代替データストリームを破棄します。(それを実行できるSysinternalsのstreams.exeもあります。) type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat

3

表示されているのは、ダウンロードされたファイルをいつでも開こうとしたときにWindowsから表示される一般的なプロンプトです。何が起こるかというと、ファイルをダウンロードすると、ファイルがインターネットからのものであることを示すフラグが付けられているため、潜在的に危険であるということです。このようなファイルを実行しようとすると、Windowsは、信頼できるかどうかを判断するために、有効な署名があるかどうかを確認します。

あなたができることは、ファイルのプロパティの「ブロック解除」ボタンを使用してファイルからフラグを取り除くことです。その後、Windowsはそれを実行しようとするときはいつでもあなたを放っておいてくれます。

ここに画像の説明を入力してください


問題は、バッチファイルが実行可能なテキストファイルであることです。テキストファイルに署名することは可能ですが、ファイルにバイナリデータの束を追加することになります。これは、バッチファイルの場合、意味不明であり、コマンドインタープリターが実行しようとすると問題が発生するため、問題になります。署名が破損するため、署名をコメント化しても機能しません。

したがって、バッチファイルへの署名は機能しません。

あなたがする必要があるのは、それを実行しようとするとシステムがあなたにプロンプ​​トを出す理由を理解することです。デフォルトでは、Windowsはバッチファイルを実行する前に要求しないので、特別なポリシーまたはセキュリティプログラムでブロックする必要があります。セキュリティプログラムをチェックして、無効化または除外の追加が可能な検証設定があるかどうかを確認します。

また、バッチファイルの内容をチェックして、署名されていない実行可能ファイルが実行されているかどうかを確認します(ただし、デフォルトでは、Windowsはダウンロードまたは実行権限の昇格が必要でない限り、実行可能ファイルの入力を要求しません。設定を確認してください)。


実行がシグネチャに到達する前にスクリプトを終了できるはずです。
Sparr

@Sparr、はい、いいえ。goto :eof署名の前にを挿入することもできますが、その場合、ファイルのハッシュが変更されて署名が無効になり、ファイルが破損/安全ではなくなります。署名するにファイルの最後にその行を置くこともできますが、うまくいくはずです。試してみる興味深い実験…
Synetech 2012

2
typeコマンドを使用して-バイナリ上でも-ファイルのタグを解除できます。私はいつもそれをしています。oldfile> newfileと入力し、次にnewfile> oldfileと入力すると、ADSタグのないoldfileが生成されます。
Mark Allen

へへ、賢い。それは技術的にフラグを剥離していない(と私はよく分からないどのくらい速いか、それはよりも、より便利に[プロパティ ]ダイアログが、それは動作します。
Synetech

0

.batファイルをPowerShellスクリプトに変換することもできます。signtoolはこれらのファイルへの署名をサポートしています。


これは質問に対する答えを提供しません。批評したり、著者に説明を要求するには、投稿の下にコメントを残してください。- 口コミより
Burgi

@Burgiこれは議論の余地があります。誰かが専用のSIPを書かない限り、.batファイルは署名できません。現時点で最も近いソリューションは、署名されたPowerShellスクリプトです。
Emmanuel Bourg

ファイトクラブのルール#42は「回避策は答えです」です。これが答えです。(しかし、他の方が優れています。)
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.