Win32
GetTickCount関数とtimeGetTime関数がどうやって実装されているか確認し、分解能の違いが実現できている理由を読み解きます。[NTKRNL]のタグがついている時点でアレなわけですが「どっちを使うべき」的な情報がほしい方は回れ右。特に明示しない場合、x86 XP…
CryptBinaryToString というAPIを使うと、バイナリ列を文字列に変換できる。 BOOL WINAPI CryptBinaryToString( __in const BYTE *pbBinary, // バイナリ列 __in DWORD cbBinary, // バイナリ列のサイズ __in DWORD dwFlags, // 変換書式のフラグ __out_opt …
しばらくカーネル空間で例外ハンドラをいじって遊んでいたのだけど、ユーザー空間でも似たような遊びができる気がしたので下調べのメモ。常に以下のフローをたどるわけではなく、あくまで発生した例外がユーザー空間に伝播するときのフロー。x86はWindows XP…
勘違いだったので削除しました。すみません。 ここで書いていたジャンクションを利用したケースではファイルを開けないので、論点としたかった問題は起こりません。 名無しさんありがとうございます。 以下内容。 低い権限のユーザーが作成したジャンクショ…
プログラムのエントリーポイントは、main関数ではなく、PE内に定義されたアドレスであることはよく知られているが、それより以前にコード実行できるTLS Callbacksという仕組みはあまり知られていない。TLS CallbacksはPE内に適切にセクションとディレクトリ…
64bitプロセスがSetThreadContextをCONTEXT_CONTROLフラグなしで行うと、対象になったスレッドのCSがなぜか勝手に0x23になる場合がある。64bitプロセスのCSは本来0x33で、0x23はWOW64(32bitプロセス)のための値である。この異常な変更が行われると、そのス…
コードを実際に書いたことがなかったので書いてみた。デバッグレジスタは本来特権レベルでなければ操作できないが、Windowsの場合はSetThreadContext系APIを使って設定することができる。 ハードウェアブレークポイントはソフトウェアブレーク(int 3)ほど…
Windows Vista および Windows Server 2008 アプリケーション互換性解説書 以前のバージョンの Windows では、IsBadReadPtr および IsBadWritePtr 関数を使用してパラメータを検証していました。Windows Vista および Windows Server 2008 では、これらの関…
Collaborative RCE Tool Library!というサイトを見つけた。 ここにあるツール、結構面白いものが多く、たとえばDream of every reverserは Engine used to perfrom stealth memory trace of a target. なツールでソースコードが付いている。ソースもPoCのよ…
AppInit_DLLsとはHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\以下にあるレジストリーキー群で、 AppInit_DLLs インフラストラクチャにより、アプリケーションは任意の DLL をすべてのユーザー モード プロセスに読み込むこと…
Instead of using the x86 system-service call sequence, 32-bit binaries that make system calls are rebuilt to use a custom calling sequence. This calling sequence is inexpensive for WOW64 to intercept because it remains entirely in user mod…
WOW64サービステーブルというのは、wow64.dllのなかに実装された関数テーブル。WOW64プロセスがシステムコールを発行したときに、x64システムコールへの変換を行うため透過的に呼び出される。前回までの調査でこいつのシンボル名はwow64!ServiceTablesである…
もうちょっと実装よりに、Win7(RC)x64 で以下のコードを用いて違いを確認する。 int _tmain() { __debugbreak(); FlushProcessWriteBuffers(); return 0; } FlushProcessWriteBuffersは、引数なし戻り値なしのとても単純なAPIなので、処理の概要を理解するの…
要点をコードで。Win7(RC)x64でのみ動くので、あくまで例示ということで。 まとめ1:eaxにシステムコール番号、ecxにディスパッチ関数番号を入れて、call dword ptr fs:[0C0h] するとWOW64からシステムコールを発行できる このプログラムは、自分でWOW64のN…
WOW64 Implementation Details Best Practices for WOW64 Registry Reflection in Windows あたりを読んでめぼしい情報をメモ。さすがに全部和訳するのはだるい。 (追記)日本語のドキュメントが公開されました! 64 ビット Windows プログラミング ガイド
なぜか変換できる@Ubuntu 9.04。 ここ1ヶ月ぐらいで技術書だけでもかなり溜まってきた。あと2冊ぐらい増える雰囲気なのでどう考えても赤字;) それにしてもこの冷やし中華、ノリノリである。
Microsoft Partoner Program - Windows 7にある「Windows 7 アプリケーション品質(互換性 信頼性 パフォーマンス)を高めるための開発者ガイド」には、Windows 7へ移行するにあたっての開発者向け変更点が記述されている。Windowsプラットフォームの開発者は…
The Old New ThingからDllMainとデッドロックに関するクイズA process shutdown puzzleで和訳の練習。やっぱり口語的な文は訳しづらい。
DllMainでCreateThreadは動作するでコメントをいただいたAnother reason not to do anything scary in your DllMain: Inadvertent deadlockを使って和訳の練習。 DllMainでおこり得るデッドロックの例について。訳はのっけから怪しい感じだ。その辺の論文よ…
Trojan.Ascessoのテクニカルレポートに初めて見るドライバのロード技法が使われていた。 Trojan.Ascesso は、実行されると、最初にカーネルメモリー内に自身のドライバをロードしようと試みます。 (中略) スタートアップ時に実行され、また現在カーネルメ…
金額に比して内容がないような。と批判的に書く前に、自力でデッドロックのひとつも調査してから言ってやろうと、NtQueryObjectがデッドロックする問題をWinDbgで調査した。が、よくわからんかった^^; 著者にはぜひ、WinDbgのコマンドや出力の詳細について掘…
UNICODE_STRING型のポインタを渡すことで構造体内部に持つ文字列を出力することができる。UNICODE_STRINGのバッファはNULL終端ではないため、正しく処理するにはこの%wZ書式指定子を使用すべきである。%wZ書式指定子はWin32のprintf系APIに渡すと、Windowsの…
ドキュメントを参照する(たとえばNtOpenSymbolicLinkObject) ドキュメントに従って使用する ドキュメントに指示がないのでハンドルはCloseしない ここまでは正しい姿勢だ。 ただし追加で注意も必要。上記例は、明らかにハンドルリークする。Closeする方法…
任意のプロセスが使用している名前付きカーネルオブジェクトの一覧を取得したいのですが。 それ、Win32でできるよ! ということで書いてみた*1。よければどうぞー(named_kernel_object.cab)。 動作確認は 2008x64 のみだけど、適当に修正すれば大抵の環境…
ジャン☆ と思ったので書いてみた(sdt_dump2.cab)。2000以降のx86/x64両方で動作する見込み。コマンドラインにシンボルを参照するパスを指定することができる。以下のように指定すればカレントディレクトリにシンボルをダウンロードしてくれる。コマンドラ…
以前にDllMainでCreateThreadを呼び出すことはWindowsのマナーに反する、という指摘をもらったことについて、その理屈がわからんという趣旨の記事を書いた。今日知ったのだがBest Practices for Creating DLLsに拠れば、これは条件付きで正しく動作する。こ…
ブルースクリーン(Blue Screen Of Death = BSOD)の色を変更するGUIツールです。よければどうぞー(BSOD_Properties_NT.cab / Readme)。
Windowsのネットワーク関連のメモリキャッシュに関連して、いくつか気づいたところをひとまずメモ。やりたいことが一杯あって、このネタで掘り下げられそうも無いのが残念。 種類 >arp -a MACアドレスとIPアドレスの対応表 >route print ルーティングテーブ…
x64に対応したTrayExpandです。今回の更新はバグ取り。よければどうぞー(TrayExpand.cab - Readme)。 あと、Win2000でte.exe終了時にexplorer.exeが死ぬ問題をいくらか改善。何が原因か簡単にメモすると、
別セッションにCreateProcessする、psexecもどきを実装したところまではよかったのだけど、はて、サービスとして起動されたプロセスの標準出力を、既存のCUIプロセスのコンソールウィンドウに出力させるにはどうすればいいんだろう。 サービスプロセス内での…