UltraVNCの小技(5) — cad.exe の自作

UltraVNC で「Ctrl-Alt-Del」を可能にするための「cad.exe」ですが、残念ながらソースコードが付いていません(大人の事情で)。

「cad.exe」は簡単に自作する事が出来ます(動作環境にやや制約がでますが)。
これで、オープンソースになります。

《参考リンク》http://blogs.msdn.com/b/itasupport/archive/2009/09/16/sendsas-step-by-step.aspx

ここに出てくる SAS は「secure attention sequence 」の略で、デフォルトは「Ctrl-Alt-Del」キーの同時押しです。Windows 7(2008 R2も) では、SAS をシミュレートするための SendSAS という API と、これを実現する sas.dll を最初から内蔵しており、追加ソフトウェア無しで API を利用できます( この記事 を参照)。

自作の cad.exe のソースコードは、実質1行です。

// (my)cadexe.cpp

#include "stdafx.h"
#include <windows.h>

#include<sas.h>

int _tmain(int argc, _TCHAR* argv[])
{
SendSAS(false); // サービスから呼び出す場合は、false を渡す。
return 0;
}

更に、SendSAS API を適切に実行するためには、UAC に関して適切な設定でビルドした上に、出来たバイナリに対して署名をしなければなりません。

所謂「オレオレ証明書」を使ってお手軽に作る手順は、下記のようになります。

  1. ソリューションを用意し、上記のソースコードをビルドする準備を整えます。
  2. マニフェストの設定を行います。
    1. 「UACの実行レベル」を「requireAdministrator」に設定します。
    2. 「UACによるUI保護のバイパス」を「True」に設定します。
  3. ビルドし、EXEファイルを作成します。
  4. 「オレオレ証明書」ファイル(.cer)を作成します。Visual Studio コマンドプロンプトを起動し、下記を実行します。
     >makecert -r -pe -n "CN=Test Certificate - For SendSAS Use Only" -ss MY testcert.cer
  5. 「オレオレ証明書」ファイルを、開発用マシンにインストールします。
    >certmgr.exe -add testcert.cer -s -r localMachine root
    
  6. 実行ファイルに署名します
    >SignTool sign /v /s MY /n "Test Certificate - For SendSAS Use Only" /t http://timestamp.verisign.com/scripts/timestamp.dll "cad.exe"
    
  7. UltraVNC(サーバ)を実行するマシンの「信頼されたルート証明機関」証明書ストアにも、先ほど作成した「オレオレ証明書」をインストールします。
  8. 自作した cad.exe を、オリジナルのそれと入れ替えます。

「Ctrl-Alt-Del」を試しましょう。期待した動作になりましたでしょうか。

《再度、参考リンク》http://blogs.msdn.com/b/itasupport/archive/2009/09/16/sendsas-step-by-step.aspx

上記サイトの内容を、全面的に参照させて頂きました(そのままとも言う…)。

Comments are closed.