UAC の確認ボタンをキーボードエミュレーターで自動的に押す

UAC(ユーザーアカウント制御)を有効にしていると、たとえ管理者ユーザーでログオンしていても、管理者権限を要求するプログラムの起動時に次のような UAC 確認画面が表示されます。 この[はい]ボタンをキーボードエミュレーター(ハードウェア)で自動的に押す実験をします。 動作確認環境 Windows 11 Home 22H2 Visual Studio Community 2022 (Visual C++) PowerShell 5.1 Windows API で[はい]ボタンが押せない UAC […]

WinDbg: プロセス起動直後、DLL がロードされ、エントリーポイントや main() に入るまでの動作を確認する

Windows のプロセスが起動し、DLL の暗黙的ロードが行われ、exe のエントリーポイントが呼び出され、main (WinMain) に入るまでの動作を観察してみます。 動作確認環境 Windows 11 Home 22H2 WinDbg 10.0 通常の手段では手遅れ 調査対象のプログラム(今回は MyMain.exe)を実行してから WinDbg でアタッチしても、 当然ながら、暗黙的ロードの DLL はすでに読み込まれてしまっています。 WinDbg の引数に調査対象のプログラムを指 […]

キーボードエミュレータを使った自動キーボード入力でファイルを他端末にコピーする

PC から別の PC に、キーボードエミュレータを使ってファイルをコピーしてみます。ウィルス感染対策などで USB メモリや LAN の使用が禁止されている場合に役立つ、かもしれません。 動作確認環境 Windows 11 Home 22H2 みんラボのキーボード/マウスエミュレータ 自動キーボード入力を行うため、みんなのラボの「キーボード/マウス エミュレータ(USB 接続版)」を利用します [1]。私は秋葉原の Shigezone にて 1650 円で購入しました。 青い USB メモリのよ […]

WinDbg: ダンプファイルから基本的な情報を抜き出す一連のコマンド

Windows のダンプファイルから基本的な情報、たとえば「コンピューター名」「ユーザー名」「OS のバージョン」「PC起動日時」「モジュールの一覧」を抜き出す方法について書き留めておきます。本格的な故障解析に入る前に把握しておきたい情報になります。扱うのはカーネルダンプではなくユーザーダンプです。 動作確認環境 Windows 11 Home 22H2 WinDbg 10.0 dumpchk 10.0 ダンプファイルの準備 まずはテスト用のダンプファイルを取得します。メモ帳を起動し、タスクマネ […]

WinDbg のカーネルデバッグで使える USB 3.0 ケーブルを作る

WinDbg のカーネルデバッグで使える USB 3.0 ケーブルを買おうと思ったのですが高すぎたので自作した話です。2 台の PC を直接接続する、両端が USB Type-A オス端子のデバッグ用クロスケーブルです。 Web でデバッグケーブルを探したものの 最初に Web で USB 3.0 デバッグケーブルを探したのですが、ニーズが少ないのか、日本のサイトでは売っていないようでした。 仕方がないので、米国 DataPro 社のサイト [1] からの購入を試みます。 「3ft $14.95 […]

Visual C++ での同一ソース同一バイナリの実現方法を探る

Visual C++ で C/C++ のプログラムをコンパイル(ビルド)すると、ビルドのたびに微妙に異なるバイナリが生成されてしまいます。そのため、バイナリからソースを特定するのが面倒です。この問題を回避する方法を探ります。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 課題 1. ビルド日時が埋め込まれる Visual C++ はバイナリにビルド日時を埋め込みます。次のプログラムで確認してみましょう。 ビルドします。 生成され […]

DLL_PROCESS_ATTACH やコンストラクタの実行タイミングを調査する

次の処理の実行タイミングを調査します。 EXE のロード DLL のロード DLL_PROCESS_ATTACH DLL_PROCESS_DETACH グローバル変数のコンストラクタ グローバル変数のデストラクタ メインルーチン mainCRTStartup _DllMainCRTStartup 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 結論 結論から書きます。 下図の青丸が起動時の処理順になります。 下図の赤丸が終了時の処 […]

api-ms-win-crt-runtime-l1-1-0.dll といった長い名前の DLL の実体は何か

「api-ms-win-crt-runtime-l1-1-0.dll」だとか「api-ms-win-crt-stdio-l1-1-0.dll」だとか、やたら長い名前の DLL が実行可能ファイルにリンクされていることがありますが、これは何なのでしょうか。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 やたら長い名前の DLL メモ帳がリンクしている DLL を見てみます。 「api-ms-」から始まる長い名前の DLL がたくさ […]

Windows システムファイルのビルド日時が表示されない謎を探る

EXE ファイルや DLL ファイルにはビルド日時が埋め込まれており、dumpbin コマンドで表示できます。しかし、Windows のシステムファイルの多くは、ビルド日時が表示されません。OS のファイルなので特別扱いされているのでしょうか。調査します。 動作確認環境 Windows 11 Home 21H2 Visual Studio Community 2019 WORD のビルド日時を確認する 実行可能ファイル(ここでは EXE, DLL, SYS などを含む)のビルド日時は、Visua […]

何もしない長い命令、マルチバイト NOP (x86/x64)

x86/x64 CPU には、何もしないマシン語「90」(16進数)が存在します。アセンブリ言語でいうと「NOP」です。 では 2 バイト以上を何もしない命令でふさぎたい場合は「90」を繰り返せばいいのかというと、それでも構いませんが、 2 バイトの何もしないマシン語「66 90」 3 バイトの何もしないマシン語「0F 1F 00」 4 バイトの何もしないマシン語「0F 1F 40 00」 …… といった専用の命令が存在します。 こうした何もしない長い命令「マルチバイト NOP」について調べてみ […]