【PowerShell】自作の.exeファイルを自己署名を入れる方法

プログラム
スポンサーリンク

はじめに

今回は自作の.exeファイルを自己署名を入れる方法を紹介します。
なにかしらの「.exe」ファイルがあることを前提に進めます。

.exeファイルの作り方はこちらなどをご覧ください。

RUSTは実行プログラムを作った時点で.exeに変換されます。
便利。

署名とはなにか

.exeファイルの信頼性を上げるモノです。
他の人の手で改ざんされてないことの証明などに使われます。

【署名の種類】

・認定局による署名(DigiCert, Sectigo)
 → 年数万円ぐらいかかる
 → 企業向け

・自己署名
 → 自分が行った署名データ
 → 信頼性は低いがないよりはマシ
 → フリーソフトや個人開発ソフト向け

この「署名」があることでWindows OSなどで「ウイルス」と誤判定されるリスクを減らせれます。

署名の確認方法

.exeファイルを選択。
→ Alt+Enterキーを入力。

デジタル署名を確認。
署名があれば「埋め込み署名」の所に情報が出ます。

自己署名する手順

自己署名する手順は下記。

・署名データを作成しパソコン内に格納
・パソコン内から署名を引き出せるようにする
・.exeに署名データを入力。

この操作を全て「PowerShell」上で行います。

こちらを解説していきます。

署名データを作成しパソコンに格納

Windowsキー → sheと検索で入力。
Windows PowerShellを起動。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Your Name" -CertStoreLocation "Cert:\CurrentUser\My"

要素分解すると下記の4つです。

New-SelfSignedCertificate
 → 署名情報を作ります

 -Type CodeSigningCert
 → 署名の種類を選択
 → CodeSigningCertは実行ファイル用(.exe)

 -Subject "CN=Your Name"
 → 署名に表示する名前
 → 名前の最初に署名者の属性を入れる形式が使われる(X.500 DN)
 → CN=名前, O=組織名, C=国 + 名前形式で入力

 -CertStoreLocation "Cert:\CurrentUser\My"
 → 署名の保存先
 → Cert:\CurrentUser\Myは「現在ログインしてるWindowsユーザーに保存」
 → Cert:\LocalMachine\Myで「PC全体でも使えるようにできる」
 → どっちでもいい、何かしら決めることが重要

Typeは実行ファイル以外にも文章やサーバー用のモノがあったりします。
細かいことはChat GPTあたりに聞きましょう。

先ほどの文章を入れてエンターキー。
すると署名のIDのようなものと署名に表示される名前が出てきます。

これで署名データを作成しパソコン内に格納することができました。

署名データを引き出す

次は保存した署名データを引き出して使えるようにします。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)

$cert = Get-ChildItem Cert:\CurrentUser\My | Where-Object {$_.Thumbprint -eq "----生成されたID---- "}

要素分解すると下記の4つです。

$cert = 
 → 変数に情報を格納
 → ただの変数宣言なので$aaaaのような適当な名前でも動く

Get-ChildItem Cert:\CurrentUser\My
 → 署名がどこに保存されてるかを伝える

 | Where-Object {$_.Thumbprint -eq "----生成されたID---- "}
 → 署名の保存先からIDで今回使う署名情報を確定する

$cret = で署名情報が入力されることで…
「$cert」が署名の情報に変換されます。

先ほどの処理から下図の2か所が対応してればOKです。

こちらを入れたらEnterキー。
これで署名が使える状態になります。

これで「パソコン内から署名を引き出す」工程が完了です。

署名データを使う(.exeに署名)

次はパソコンから引き出した署名データを.exeに割り当てていきます。

条件に合わせて下記の一文を改造して入力。
(黄色いところに注意)

Set-AuthenticodeSignature -FilePath .exeファイルがある場所のパスと.extの名前 -Certificate $cert -HashAlgorithm SHA256

要素分解すると下記の4つです。

Set-AuthenticodeSignature
 → 署名処理を実行

 -FilePath .exeファイルがある場所のパスと.extの名前
 → どのファイルに処理を割り当てるか指定

 -Certificate $cert -HashAlgorithm SHA256
 → 署名の形式を指定(基本はSHA256でok)

-FilePathの指定はしっかり「.exe」の実行ファイル名まで含めてください。

これを実行。
これで.exeに署名ができます。

あとは再度.exeファイルを選択 → Alt+Enterキー。

デジタル署名を確認・
すると設定した名前の署名が入ってます。

以上が自作の.exeファイルを自己署名を入れる方法です。

まとめ

今回は自作の.exeファイルを自己署名を入れる方法を紹介しました。

・署名とはファイルの信頼性を上げるための情報
・署名が無いとウイルスと誤判定されるリスクが上がる
・自己署名はPowerShellを操作すれば行える
・署名情報はプロパティ → デジタル署名の所で確認

また他にもプログラムやパソコンについて解説してます。

GitHubの使い方/自作プログラムと.exeファイルの公開方法
Git Hubはリポジトリーを作ってそこにプログラムを入れる流れで使います。READ ME.mdはリポジトリーのトップに表示されます。.exeは「Releases」に入れないとウイルス判定を受けてDLできなくなるので注意。
LibreHardwareMonitorでPC情報をJSON出力する方法
LibreHardwareMonitorはPC情報取得できる高性能ソフトでJSON形式のデータをローカルネットワークで出力する機能があります。一部のパラメーターは同じ名前で出力されるのでセンサー名などを変更して使ってください。

ぜひこちらもご覧ください。

コメント

タイトルとURLをコピーしました