January 28, 2007
[雑記] コープスパーティー
なんと,あのコープスパーティーがリメイクされているではありませんか.いつの間に!? 2006 年の 12 月 12 日10 月 3 日にスタートして,iモード携帯でプレイできるとのこと.いいなぁー.DoCoMoの人が羨ましい.
MNP も始まったことだし,いっそ携帯会社変更... とか半分本気で考えてしまう自分.
トップページの画像にはこんなキャッチコピーが書いてあります:
10年経ってもコイツは凶悪だ.
とてもいいです.そそります.
登場人物を見ると,原作でおなじみのメンバーに続いて... メンバーが1人増えてます.NPC も追加されています.ということは,どうやら全く同じストーリーではない様子.
January 12, 2007
[雑記] Administrators グループのユーザであるフリをするには (2)
Administrators グループのユーザであるフリをするにはの続きです.
あるインストーラの実行ファイル(msiexec.exe ではなく,単独の実行ファイル)を OllyDbg で調べていると,Shell32.dll 内にある IsUserAnAdmin() という API の存在を発見しました.
「あれ? こんな関数呼んでたっけ? さっき見たときは無かったはず...」とか思いつつ dumpbin で当該実行ファイルのインポートテーブルを見直すと,序数 680 の非公開 API でした.
非公開 API なのになんで MSDN に載ってるんだろう,などと思いつつ見ていると,どうやらユーザが Administrators グループのメンバであれば TRUE を返すだけの関数のようです.
これでフックすべき関数を何とか 1 個見つけられたのですが... これが非公開ということは,世の中にある数多くのインストーラの中には,この API を使ってないものもあるかも知れません.そうなると置き換える API も多くなるわけで... 考えただけでも背筋が凍りつく思いです.
面倒なのでとりあえず IsUserAnAdmin() だけを置き換えてみることにします.もちろん常に TRUE を返す関数に...
さて,Windows において,自作した関数を呼ばせるには,インストーラの実行ファイルに手を加えずにやろうとするならば,以下の方法があります.
- 置き換える DLL が持っている全ての関数をエクスポートした同名のラッパー DLL を作成し,EXE と同じディレクトリに置く.
- EXE のロード後にメモリ上にあるインポートテーブルを書き換える.
1. は,Windows のローダが,指定した関数だけを置き換えることができないために,仕方なく全ての関数を含む DLL を作成する,というものです.何もしないラッパー DLL を作るツールがあるので,これでラッパーの雛形を作ってから,置き換えたい関数の実装部分を変更すれば問題ないでしょう.
ただし,1. で作成したラッパー DLL を本来の DLL より先にロードするためには,実行ファイルと同じディレクトリに配置する必要があります.というのも,Windows が DLL の検索する順序が以下の通りであるためです.
- アプリケーションのあるディレクトリ
- カレントディレクトリ
- システムディレクトリ (通常は C:\Windows\system32)
- 16 ビットシステムディレクトリ (通常は C:\Windows\system)
- Windows ディレクトリ (通常は C:\Windows)
- 環境変数 PATH の指すディレクトリ
インストーラ自身が実行可能ファイルであれば,ラッパーを置くのは簡単なのですが,最近良く見かける Windows Installer の場合は C:\Windows\system32\msiexec.exe が実際のインストーラであるため,上記 1. のルールに則って,真っ先に C:\Windows\system32 にある Windows 本来の DLL がロードされてしまうことになります.
そこで今回は,自分自身のスキル向上のためもあって,ロード直後にインポートテーブルを書き換える手段を使ってみようかと思います.
インポートテーブルを書き換えるといっても,ここでは起動中の別プロセスのものを書き換えるわけではなく,あくまでロード直後に書き換えられればよいので,愛甲さんのローダー(Loader)とパッカー(Packer)とカスタムリソースの話
にあるサンプルプログラムのように,まずは適当な実行ファイルに対し,CREATE_SUSPENDED を指定して CreateProcess() を実行し,割り当てられたメモリイメージを本来実行したいファイルのものに差し替えて(ついでにインポートテーブルも変更して),実行を開始すればよさそうです.
というわけで早速実装開始です.
話は変わりますが,このサンプルプログラムのソースコードを見ていると,これってまるで execve(2) システムコールの Windows 版なんじゃないかと思いました.
January 11, 2007
[雑記] Administrators グループのユーザであるフリをするには
世の中にはインストーラ付きのアプリケーションがたくさんあります.インストーラは,もちろん利用者にとっての利便性向上のためのものであり,それを享受する人は大勢いることでしょう.
しかしながら,それらのインストーラの中には,インストール処理中,あるいはインストールしたアプリケーションの実行中に何ら管理者権限を必要としないにも関わらず,インストーラ自身が管理者権限で起動しているかどうかをチェックし,管理者権限でないとインストールできないようになっているものがあります.
インストーラがファイルの関連付け(あるいは HKEY_LOCAL_MACHINE)を変更するために管理者権限を行使する場合もありますが,そういうわけでもなく,ただ単にファイルをインストールディレクトリにコピーしているだけのインストーラであれば,インストーラを管理者権限で起動する必要はないはずです.
私は,普段 Users グループのユーザでシステムにログインしているので,これは何とかして一般ユーザで済ませられないものかと考えてしまいます.
そこで思いついたのが Debian の fakeroot と同じように,現在のユーザに関するの情報を返す Win32 API と同じシグネチャを持ち,「管理者で動作しています」と,偽の情報を返すラッパー DLL を作って,インストーラにそれを使わせる,という方法です.
ラッパー DLL を作るにあたって,まずは,インストーラが管理者権限で起動されたかどうかを判断するために呼び出す API がどれかを最初に調べる必要があります.現在調査中... 続きはまた次回,ということで.
January 9, 2007
[雑記] ホスティングサービス導入
January 8, 2007
[雑記] jp ドメインは国内で取得するのが吉
January 6, 2007
[雑記] TSUTAYA 様々
January 5, 2007
[雑記] プリズン・ブレイク (2)
借りようと考えてから 1 ヶ月以上経っていますが,やっと借りてきました.
この正月に実家で 1 〜 5 話を再放送していたので,それを観ていると,あまりに面白いんで実家からの帰り道に Vol. 3 から即刻借りて来たというわけです.
というわけで再放送の続きを観てきます.
[雑記] 充電完了?
January 4, 2007
[雑記] 剛掌波で大ダメージ
CCOちゃに友人 2 人と訪れたとき,その友人の 1 人がネタで「剛掌波」なるソフトドリンクを注文しました.もちろん私に飲ませるために.
店員(メイド)ですら「不味い」と言っているのだから相当のものだろうと思っているうちに,メイドが自身の決めセリフと共に持ってきたのは紫色の液体.パッと見はブドウジュース.しかし飲んでみると... 水にたっぷりタバスコを入れたような味.確かにマズいです.
その友人も一口飲んで曰く,以前飲んだという「北斗神拳」の方が微妙だった,とのこと.北斗神拳... 気になりますが,剛掌波で大ダメージを受けた状態でさらに注文する気は起きませんでした.
アレの材料は一体何なんでしょう.何を混ぜたらあのような味になるのでしょう.
January 1, 2007
[雑記] 大阪市営地下鉄今里筋線
年末に帰省してみると,大阪市営地下鉄今里筋線が 2006 年 12 月 24 日に開業していました.
そういえば実家の近くで地下鉄の工事をしてたっけ... などと思ったりもしつつ,忘年会 兼 初詣の帰りにせっかくなので乗ってみることに.
さすがに駅構内はまだまだ綺麗でした.ホームに下りてみると... 何と市営地下鉄初の可動式ホーム柵が設置されているではありませんか.天井にも目新しいパネルが設置されております.最近できただけのことはあるようで何よりです.
車両は大阪市営地下鉄長堀鶴見緑地線の 70 系に似た 80 系.こちらもリニアモータ駆動です.
設備は他線と比べて金が掛かっているように見受けられます.唯一残念なのは,自分が乗る機会があまり無い... ということでしょうか.