概要 OllyBonEはページテーブルを操作してメモリの属性を変更することで、ヒューリスティックにアンパックを行うプログラムです。ページテーブル操作によるアンパッキング技法の先駆けとして有名です。ソースは以下からダウンロードできます。 http://www.jo…
今回は、仮想化技術で隠されたプロセスを検出する、という研究のお話をします。また、これについて試験的にWindows 7(x86)で動くものを実装してみましたので、その実装詳細と評価も交えていきます。実装はこちら。
期待に応えたいと考えたからだと思う。ただ自分の生活の中にこいつがどうやって食いこんで行くのかは、正直見えてない。自分の中での価値をほとんど失ってしまっているので。
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…
勘違いだったので削除しました。すみません。 ここで書いていたジャンクションを利用したケースではファイルを開けないので、論点としたかった問題は起こりません。 名無しさんありがとうございます。 以下内容。 低い権限のユーザーが作成したジャンクショ…
EXE、TMP、SYS、BAT ——— 何でも一緒だ。マルウェア解析では、どんなものからも目を離してはいけない。 ファイルが削除されようとしたタイミングで、そのファイルをバックアップコピーするフィルタドライバを書いてみました(ScavengerFolk.cab)。よければど…
デバイスドライバがカーネルにロードされたタイミングで、そのファイルをバックアップコピーするデバイスドライバを書いてみました(drvcopy.cab)。よければどうぞー。
ドライバ開発の際には従来広くASSERTマクロが使われているが、最近のWDKではASSERT定義周辺に、NT_ASSERTというマクロが追加されている。このマクロは現時点では文書化されていないものの、ASSERT Yourself - The New NT_ASSERT Macro in the WDKにおいて、…
この辺眺めながら。個人的には大好きなVT技術なのだけど、ここではハイパーバイザーの存在はそんなに重要でない。ハイパーバイザーを使ったほうが楽に、良いものができるのは間違いないが、同じアーキテクチャにするにしても、drvcopyのようにAPIを使ってド…
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ 細部にとことんこだわろうぜ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ / という衝動との葛藤なわけです。…
x64 Windowsではデジタル署名されていないドライバはロードすることができないので、自分でビルドしたりその辺から拾ってきたドライバを読ませるときは適当な(オレオレの)署名をする必要がある。 んだけど、よくコマンドを忘れるのでドライバに署名を埋め…
XPのタスクマネージャーで表示される「メモリ使用量」の意味を理解している。そのうえで、これを減らすためだけの技巧を凝らす。メモリ使用量が少なく見えれば、ユーザーの満足度は上がるさ! DLLインジェクション+APIフックが便利だ。フックする際は、IAT…
プログラムのエントリーポイントは、main関数ではなく、PE内に定義されたアドレスであることはよく知られているが、それより以前にコード実行できるTLS Callbacksという仕組みはあまり知られていない。TLS CallbacksはPE内に適切にセクションとディレクトリ…
(12/05)追記したら記事の方向性がわかりやすくなったのでタイトルも変えた(笑 UserDebuggerHotKey GUIアプリケーションに対してデバッガがアタッチしているとき、このレジストリキーで設定されたキーを押すと、ブレークが発生しデバッグすることができよ…
!chkimgコマンドを使うと、コードパッチを簡単に検出することができる。以下の実行例では、ntカーネル(ntoskrnl.exe)に10byteの改ざんがあること、それらが5byteの改ざん2つ(そして関数フック)であることを確認している。 C:\>livekd ... 0: kd> .exepath …
64bitプロセスがSetThreadContextをCONTEXT_CONTROLフラグなしで行うと、対象になったスレッドのCSがなぜか勝手に0x23になる場合がある。64bitプロセスのCSは本来0x33で、0x23はWOW64(32bitプロセス)のための値である。この異常な変更が行われると、そのス…
コードを実際に書いたことがなかったので書いてみた。デバッグレジスタは本来特権レベルでなければ操作できないが、Windowsの場合はSetThreadContext系APIを使って設定することができる。 ハードウェアブレークポイントはソフトウェアブレーク(int 3)ほど…
x64ではインラインアセンブラが使えないので生のMASMを書く必要がある。 asmファイルをプロジェクト内に追加する 追加したasmファイルのプロパティを開き、「カスタム ビルド ステップ」>「全般」の 「コマンドライン」に ml64 /c /Cx /W0 /Fo$(IntDir)\$(I…
何をもってしてコードセクションとするか、を会社の昼休み中に調べていたら、なんだかいつの間にかDEPという深淵を覗き込んでいたので、そのままDEPについて調べてみた。まずコードセクション(実行可能セクション)はIMAGE_SCN_MEM_EXECUTEが設定してあるセ…
私のように数字に弱い人でも、状況によってはスムーズにコミュニケーションをとるために理解しておかないといけないことがある。そういうときは、とりあえず、感覚だけでもこの辺を覚えておけば概ね困らない。 困らない、と思う(笑)。たぶん。
1.私の一生はだいたい15年くらいしかありませんが、たまに20年以上生きてしっぽが裂けます。 ほんのわずかな時間でも貴方が離れていると腹が立ちます。 私が家族になってやるから、そのことを覚悟しなさい。 2.あなたが私に望むことを理解するつもりはあり…
VMwareが、MMUの仮想化をSW実装した場合と、ここ1年ぐらいのプロセッサのHW支援により実装した場合との性能比較レポートを出していました。これらのレポートから、最近のプロセッサの仮想化アシストは非常に高速であることが見て取れます。 Performance Eval…
x64で追加された命令のひとつにswapgs(Swap GS Base Register)がある。この命令は、 現在の GS ベースレジスタ値を、MSR アドレス C0000102H(MSR_KERNELGSbase)に格納された値と交換する。 ――インテル® エクステンデッド・メモリ 64 テクノロジ・ソフトウ…
ある命令をバイト表現でハンドアセンブルしたいとき、Intelのオペコード表の見方を理解していないと非常に苦労する。しかし、Intelのマニュアルはとっつきづらい*1ところがあり、理解するのに時間がかかるので、ヒントとしてまとめていく。ちなみに、小数点…
Win32デバッグ(9)・・・逆アセンブラにまとめてありました。逆アセンブラは特にシステムコールを使うようなものではないので、カーネルモードのコードにも簡単に組み込めます。 個人的にはBSD相当のライセンスかつ軽量なHacker Disassembler Engineで十分だ…
VMware Workstation 6.5 管理者マニュアルによると、ゲストデフラグ、VMwareとしてのデフラグ、ホストデフラグの順で行うのが良いらしい。内側からということ。メモ。 仮想ディスクを最適化するには、次の手順に従ってください。 1 ゲスト OS 内でディスク最…
罠は時を刻みしもの この先には進まぬが得策。 さもなくば… 石の中にいる! ふと思い出したので、書いてみたくなっただけ。