Do!Refresh

Do!Refreshというソフトが社内導入されました。(http://www.learningsite21.com/dorefresh/
このソフトはPCに常駐し、社員の入社時間と退社時間を記録します。目的は生産情報との時間乖離、許可の無い勤務などを監視することにあるらしいです。社内の決まりとしてこのソフトは常時起動しておかなくてはなりません。起動しておかないと「なぜ起動しないのか」と上司からトレースを受ける運用になっていますし、終了させると「なぜ終了したのか」とトレースされます。また生産情報上勤務していない時間帯にPCにログインすれば、やはり記録に残りますので「なぜ・・・・」ということになります。私的にはたいして脅威とはならないソフトだったのですが、このソフトの影響で気軽に勤務時間外にPCにログインすることができなくなりました。いや、ほとんどの場合問題ないのですが。。。
しかし、周りにはどうしても困るという方もちらほら居たので、なんとかこのソフトを騙してやることはできないかと考えました。このソフトはローカルPCにはログ(出社、および退社)は残しませんのでこれらを改ざんすることはできません。まあ、出社・退社などを記録するよりは、どちらかと言えばPCにログインしていた時間を記録するというソフトです。ログはすべてリモートのサーバに格納されており、もちろんこれらリモートのサーバにはセキュリティがかけられていますのでアクセスできません。よってどうやらログを改ざんする手法は難しいようです。いろいろ挙動を観察した結果、PCをシャットダウンした時はログに[退社]と記されることがわかりました。ということは、ソフトに対してPCがシャットダウンしたと認識させれば、PCを落とさなくてもログに[退社]と記すことが可能では?と思い以下のようなプログラムを組んでみました。

#include <windows.h>
static char szCaption[] = "Do!Refresh 設定画面";
static char szClass[] = "WindowsForms10.Window.8.app.0.33c0d9d";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                     LPSTR lpszCmdLine, int nCmdShow)
{
    HWND hwnd;
	
	hwnd = FindWindow(szClass, szCaption);
	if( hwnd != NULL ){
		PostMessage(hwnd, WM_ENDSESSION, 0, 0);
	}

	return 0;
}

szCaptionやszClassの値は、WMSenderを利用させて頂きました。上のソースをBCC(Borland C++ Compiler 5.5)でコンパイル&リンクし実行形式を作成しました。これを起動してみたところタスクトレイに常駐していたDo!Refreshは修了し、サーバのログには[退社]と記録されました。めでたしめでたし。