無くしたメガネはついに見つからぬまま。とはいえ年末の旅行でロングドライブするから、このままメガネなしで居るのもまずい。というわけで西武百貨店のメガネ屋にニューめがねを作りに行きました。
当初は黒か銀のフレームにするつもりでした。展示品を見ていたら赤いメガネが目についたもので「赤いメガネがある、あれも赤い、これも赤い」って言って回っていました。そうしたら赤を探しているように見えたらしく、店員さんがやたら赤いメガネばかり持ってくる。そのうち目の前には赤がずらっと並び、どの赤にしますか?って雰囲気に…。
机の上に置いたときは派手な色ですが、かけてみると意外と赤も悪くないね。うん。結局、赤いメガネにしました。できあがるのは明後日だそうで。はやっ。
洗濯機の動画を張ったときの日記(2008年10月15日の日記参照)は HTML 4.0に非準拠(EMBEDタグ)です。わかっていますがあえて直しません。標準準拠は大事ですが、動画だけは例外にします。
いちいち保存して再生…より、ワンクリックで再生出来た方が動画の意味があると考えます。もちろんEMBEDタグを知らないブラウザのために、ファイルへのリンクを併記するつもりです。
今週はずっと来年の昇進(?)のための資料作り&発表練習です。研究のプレゼンとか、カイシャのプレゼンってのはどうも苦手だなあ。
いつの話かわからんけどWikiのネタ帳にあったので、使ってみる。
いつぞや新幹線に乗ったときに蒟蒻畑のイチゴ味を買って食べてたのですが、原材料表示を見ると「りんご、いちご、アロニア果汁」とあります。
せっかくのイチゴ味なのにリンゴ果汁の方が多い(※)のか?という疑問もさることながら、アロニアって何!?という疑問で頭がいっぱいです。イチゴと関係ない変な植物?いや、そもそも植物?なんてことを想像しつつ、帰路を急ぎました。
家で調べてみるとなんてことはなくて、食用の果実でした。別名チョークベリー、味は渋みが強い(Wikipedia - アロニア属より)とのことです。生でみかけることはなさそうな果物です。
蒟蒻畑に入っているのもおそらく少量で、味に奥行きを出すために加えているのでしょうね。
(※)原材料表示では通常、製品のより多くを占める材料から順に書かれる。
再来週に控えたぷち昇進(?)のための資料作りとか、発表練習のおかげで、普段使わない頭の部分を使っている気がします。おかげでどっと疲れました。
というわけで今週末はのんびり…というかダラダラ。
だいぶ前の話です。店内放送で聞いたことある曲がかかっていたけれど、どうも曲名が思い出せない。NHKのふっるいシルクロード紹介番組で使っていたことも思い出せるのになあ。
なんて曲だっけなあ?と、もやもやしたまま家に着いてしまいました。気になって仕方なくて調べたら、喜多郎の「シルクロード」という曲でした。そのまんまじゃねーか…思い出すもくそもないね。
ラテールのゲームプロセスが見えるようになりました。解き方は書いたらまずそうなので書きません。スマートな方法でもないし…。
以前書き散らした通り、Gamepotプロテクトは比較的単純なrootkitです。具体的には以下のようにしてプロセスを隠蔽しています。
Gamepot rootkit(以降GR)は簡単に言うと、プロセス一覧を取得するサービスコール(システムコール?)をフックし、ゲームプロセスが見えないように書き換えてしまう方法です。
カギとなるのはNtQuerySystemInformationです。NtQuerySystemInformationは様々な機能を持ちますが、その内の一つにプロセスの一覧を取得する機能があります。
プロセス一覧を取得する際、NtQuerySystemInformationは以下の構造体の配列を返します。
先頭のNextEntryOffsetはプロセス情報のサイズをバイト単位で表します。現在のプロセス情報のポインタにNextEntryOffsetだけ足せば、次のプロセス情報の先頭を指す、という寸法です。
最後のプロセス情報のNextEntryOffsetには0が入っているので、区別できます。
SYSTEM_QUERY_INFORMATION *pinfo;
while (pinfo) {
//何かしらの処理をする
...
if (pinfo->NextEntryOffset) {
pinfo = (SYSTEM_QUERY_INFORMATION *)((unsigned char *)pinfo + pinfo->NextEntryOffset);
} else {
pinfo = NULL;
}
}
なぜこんな面倒な方法をとるかというと、プロセス情報のサイズが不定だからです。プロセス情報はスレッド情報を含んでおり、スレッド情報の要素数はプロセスが持つスレッド数によって増減するためです。
GRはシステムコールテーブル(※)を書き換え、NtQuerySystemInformationをフックします。
NtQuerySystemInformationが呼ばれてプロセス一覧が取得されるときに、ゲームプロセスの前に位置している要素を書き換えることで、ゲームプロセスを隠蔽します。下図を参照ください。
NtSystemQueryInformationのフックと書き換え
オレンジ色のNextEntryOffsetを、プロセス情報2つ分(書き換え対象のプロセス情報と、GRが隠したいプロセス情報)のサイズに改竄します。
改竄された情報を用いて、プロセス情報を先頭から処理しようとすると、白抜きしたプロセス(ゲームプロセス)が飛ばされ、認識できなくなります。
つまりGRによってプロセスが隠蔽されてしまったのです。
(※)WindowsではSystem Service Descriptor Table(SSDT) と呼ばれています。
しかしカーネル内のプロセス構造体はそのままなので、プロセスIDを直撃ちして、OpenProcessすると成功してしまいます。とはいえ、ユーザ空間から隠されたプロセスIDを知る方法はないので、メモリを書き換えてくるようなプロセスから身を守るにはこのくらいの機能で十分かもしれません。
< | 2008 | > | ||||
<< | < | 12 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | - | - | - |
合計:
本日: