ドライバをデジタル署名する方法

  • 概要

    SafeDiskなど、Windows10では、国内KOEIゲームを中心に利用されていたドライバが動作しなくなりました。
    これはセキュリティーの問題からマイクロソフト社が意図して外したものと公表済であり、
    再びサポートが復活する、といったことはまずないでしょう。

    このため、Windows10でこれらのゲームをプレイするためには、
    ・「仮想環境に古いOSを別途用意して、そこにゲームをインストールする」か、
    ・もしくは「ドライバのデジタル署名を書き換えて、Windows10のテストモードでプレイする」か
    どちらかしか手段がありません。

    ここでは、おそらく殆どの人が経験したことがないであろう、「ドライバのデジタル署名の書き換え」を説明します。

  • やり方は大きく分けて2つ存在する

    ドライバを署名する方法は大きく分けて2つあり

    • 正規の自己署名の方法(リスクはほぼない)

      1つはMicrosoftの開発ツールを使い、正規の手順で自己署名すること

    • ネット上の他者署名(明確にリスクがある)

      もうひとつはネット上の配布ツールを利用し、他者署名をしてお茶を濁す方法です。
      代表的なものとしてはdseoなどがそれに相当します。

      dseoはリスクを伴うので自己責任で dseoツールによる署名は、VS周辺ツールを使った自己署名とは異なり、
      Windowsにハッキリとした穴を開ける行為ですのでリスクを伴います。

    ここでは、応用が効き、リスクも特に無い知識を手に入れるという目的も兼ねて、正規の手順のみを紹介します。

  • 正規の手順

      正規の手順はMicrosoftの開発系ツールを使って、コマンドにてドライバを自分自身のアカウントにてデジタル署名してしまう、というものです。

      この方法は数年やそこらで変わるものではなく、長期に渡って有効な手順だと思われます。

      • 署名の手順

        • まずは、Visual Studio Community をインストールしたことがない人はインストールしてください。
          おそらく、Visual Studio 2008 以降ぐらいなら問題ないかと思いますが、ここではVisual Studio 2015を例にして話を進めます。
          すでに PCにVisual Studio がインストールされている場合、特に新規インストールは不要です。



          Visual Studio Community 2015は、上の赤丸のように、「日本語版」本体と「日本語版」言語パックを導入してください。

        • 又、「Windows10 SDK」もインストールしておきましょう。

        • インストールをし終わったら、スタートメニューから、「VS2015 x64 Native Tool コマンドプロンプト」を右クリックから管理者権限で実行してください。
          (「VS2015 x86 Native Tool コマンドプロンプト」等でも同じことです。)

          探すのが大変なら、スタートメニューのところに「Native」もしくは「VS2015」などと打つと、探しやすいです。


        • コマンドプロンプトで、適当に「ファイルを作っても良いディレクトリ」へと移動します。
          今回の例では、D:\usr\koei\taikou5\test フォルダ で作業を行います。
          ここに デジタル署名したいドライバとして secdrv.sysがあることと仮定します。


        • コマンドプロンプトで、適当に「ファイルを作っても良いディレクトリ」へと移動します。
          まずは、「個人署名」をPCへと登録します。
          makecert -r -pe -ss my -n "CN=%username%" %username%.cer
          certmgr.exe -add %username%.cer -s -r localMachine root
          certmgr.exe -add %username%.cer -s -r localMachine trustedpublisher
              
          以上で、署名がPCへと登録されました。

          1度登録してしまえば、OSを再インストールでもしない限り、2度と登録する必要はありません。
          何度も実行すると、どんどん重複した証明書が登録され、
          後で証明書を掃除するハメになりますので、1度限り実行するつもりでいきましょう。

          この%username%で登録した、署名を使って、ドライバにデジタル署名します。
          signtool sign -v -s my -n %username% secdrv.sys
              
      • 最後のドライバ署名で重複系の警告エラーが出た場合

        • 一番最後のドライバに署名をするコマンドで「複数の同じドライバ署名がかぶってるので選べ」といった趣旨のメッセージが出た場合、
          ドライバの署名が重複していますのでカットしましょう。


        • スタートメニューのところに
          certmgr.msc
              
          と入力します。



        • 下図では、「個人」=>「証明書」の所の今しがた登録した個人署名(例ではadmin)が1つだけですが、
          「複数の同じドライバ署名がかぶってるので選べ」といった選択の趣旨のメッセージが出た人は2つ以上同じ名前で並んでいるはずです。

        • 個人署名(例ではadmin)を1つだけを残し、他重複している同じ名前のものは削除しましょう。



        • この状態で、再び
          signtool sign -v -s my -n %username% secdrv.sys
              
          とすると、成功するはずです。
      • 重複した署名を削除したくない場合

        本筋は上述のように「重複している」署名を整理するべきなのですが、
        何かに別目的で利用している、状況が不明、といった事情等で整理がどうしてもためらわれる場合は、

        signtool sign -a -v -s my -n %username% secdrv.sys
        

        というように「-a」オプションを付け加えれば、適当に1つが自動で選択されるので、
        大抵はうまく通すことが出来ると思われます。

      正規手順は以上です。