ClickOnceアプリケーションをBabelで難読化してからEVコードサイニング証明書で再署名する手順

タイトルの手順がようやく固まったので、備忘録として残しておきます。

環境は以下のとおり。
VisualStudio 2019
Comodo EVコードサイニング証明書(USBデバイス)
Babel 9.3

プロジェクトのプロパティの【署名】で、「ClickOnceマニフェストに署名する」にチェック、証明書を右側ボタン「ストアから選択(S)」で選択する。

【署名】設定画面

タイムスタンプサーバーのURLにはComodoが提供しているタイムスタンプサーバーを入力。これは後ほど再署名のときにも必要になる。

マイクロソフト署名ツール ( .NET 4以降のバージョン)及び RFC 3161 (タイムスタンププロトコル)準拠の他のアプリ (例:jarsigner等)
http://timestamp.comodoca.com/rfc3161

https://comodo.jp/support/codesign/dtl_50

続いて、発行されたアプリケーションのexeファイルをBabelで難読化する。

難読化するのは【[発行フォルダ]\Application Files\Application_X_X_X_X\Application.exe】

Babel起動後の画面

難読化されたexeファイルはデフォルトでは 【[発行フォルダ]\Application Files\Application_X_X_X_X\BabelOut\Application.exe】 に保存される。

続いて、難読化されたexeファイルをsigntoolで再署名する。signtoolを使うにはWindows 10 SDKが必要。

https://developer.microsoft.com/ja-jp/windows/downloads/windows-10-sdk/

インストール後、コマンドプロンプトでsigntool.exeがあるフォルダに移動し、再署名のためのコマンドを実行する。/trでタイムスタンプサーバを指定し、/tdでsha256で署名するのを忘れずに。特に、Comodoで購入したEVコードサイニング証明書はsha256を指定しないとエラーが出て署名できない、らしい。

コマンドプロンプトで行う操作

再署名したexeファイルを 【[発行フォルダ]\Application Files\Application_X_X_X_X\Application.exe】 に上書きする。

続いてmage.exeを使いアプリケーション マニフェストと配置マニフェストに再署名する。

VisualStudio 2019の[ツール]→[コマンドライン]→[開発者コマンドプロンプト]を開き、「mage.exe」と入力してエンターキーを押すと、mageUI.exeが起動する。mage.exeとmageUI.exeがあると思われるが、自動的にUI版が起動するところが良い。

mageUI.exe

mageUI.exeの[ファイル]→[ユーザー設定]を開き、「保存時に署名する(S)」にチェック、「ダイジェストのアルゴリズム(A)」を「sha256RSA」に変更し、OKボタンを押す。

ユーザー設定

アプリケーションマニフェストに署名する。【[発行フォルダ]\Application Files\Application_X_X_X_X\Application.exe.manifest】をmageUI.exeにドラッグアンドドロップする。

アプリケーションマニフェストファイルを開いたところ

開いたら、[ファイル]→[上書き保存]すると、「署名オプション」が開くので、「保存された証明書で署名する(S)」にチェックを入れ、タイムスタンプサーバーを入力し、OKボタンを押せば署名が完了する。

署名オプション画面

続いて、配置マニフェストに署名する。【[発行フォルダ]\Application.manifest】をmageUI.exeにドラッグアンドドロップし、左部メニュー[アプリケーション参照]の「マニフェストの選択」ボタンを押し、先ほど再署名したアプリケーションマニフェストを選択する。弊社の環境ではアプリケーションマニフェストの配置ディレクトリに「Application Files」という半角スペースが含まれる部分があるせいで、この作業をやらないとアプリケーションインストール時にハッシュが違うとエラーが出てしまう。

配置マニフェストファイルを開き、アプリケーションマニフェストを再設定したところ。再設定する前は「Application Files」だったのが「Application%20Files」となっている。

あとはアプリケーションマニフェストと同じように [ファイル]→[上書き保存]で再署名する。

これで再署名が完了したので、配布する場所に全てのファイルをアップロードすれば完了。SmartScreenが反応しなくなるはずである。

なお、発行フォルダ直下に配置される「Setup.exe」については再署名しなくてもよいと思われるが、まだ実験できていない。