読者です 読者をやめる 読者になる 読者になる

アンタイ・フォレンジック伝道者の独り言

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

Windows 7のUserAssistデータ

Windows 7のUserAssistデータ(バイナリ値)の構造が変ったということで、具体的にどんなバイナリデータになっているのかを参加者の皆さんで調べてみました。
まず、従来は 不明 4バイト+実行回数 4バイト+日時 8バイトの合計16バイトの構造だったわけですが、Windows 7UserAsssit*1 UserAssist では以下のような 72バイトで構成されたバイナリデータになっています。

00 00 00 00 09 00 00 00 0B 00 00 00 60 5B 03 00
00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF
00 00 80 BF 00 00 80 BF 00 00 80 BF 00 00 80 BF
00 00 80 BF 00 00 80 BF FF FF FF FF 8B C7 73 D2
A7 1F CA 01 00 00 00 00

とりあえず、わかりやすい値からいくと、先頭不明 4バイトの次の4バイト(青色)が、従来と同じくプログラムの実行回数が保存されているようです。
逆に後から 4バイトは不明でその前にある 8バイト(赤色)は64bit Windows 時刻になっているので、EnCase のブックマークからデコードするなどすれば実行日時を確認することができます。

*1:sが一個多いのをスターで突っ込まれたー

最大化・最小化のカウント?

実行回数 4バイトの次にある 4バイトが何か?ですが、id:ghetto2199説によるとアプリケーションのウインドウを最小化・最大化することで変化するということらしく、実際に地道に電卓アプリケーションを起動して、最小化・最大化を試してみた結果が以下です。
このバイナリ値は、レジストリへのアクセスを監視するのに、Sysinternals Suite のプロセスモニタ(Process Monitor)でフィルタを行いつつ、該当レジストリ値へ設定された値を順次確認していたものです。*1
アプリケーションの最小化・最大化を行うことで 35 → 36 → 37 → 38 と値(赤色)がカウントされていきます。(実行回数の部分はカウントが変化しない)

00 00 00 00 0F 00 00 00 35 00 00 00 68 AF 04 00
00 00 00 00 0F 00 00 00 35 00 00 00 24 B5 04 00
00 00 00 00 0F 00 00 00 36 00 00 00 24 B5 04 00
00 00 00 00 0F 00 00 00 36 00 00 00 F6 B9 04 00
00 00 00 00 0F 00 00 00 37 00 00 00 F6 B9 04 00
00 00 00 00 0F 00 00 00 37 00 00 00 DC C0 04 00
00 00 00 00 0F 00 00 00 38 00 00 00 DC C0 04 00
00 00 00 00 0F 00 00 00 38 00 00 00 6A C6 04 00

ただし、残り 4バイトもカウントがアップしていくのですが、これが何なのかは色々と議論があったのですがとりあえず謎なままです。

*1:最初はレジストリを直接みていたのですが、さすがに効率が悪くて参加者からのプロセスモニタのほうが便利というアドバイスで格段に作業効率がアップしたわけです

キー名のデコード

UserAsssitでは値の名前が ROT-13 でエンコードされているので、電卓の場合には calc.exe が pnyp.rkr になるんですけど、テストに使った電卓アプリケーションを探すのにまずちょっと手こずりました。21decodeにぜひ ROT-13 も入れて欲しいと思ったりしたわけです。

そういえば、Windows 7では日本語文字列とか含むパス上で ROT-13 エンコードがどうなっているのか確認するの忘れてた。