【コラム】
今回は、ハックの話をしよう。Objective-Cの動的な機構と、Cocoaアプリケーションの仕組みを利用する事で、簡単に強力なハックを行える。
本連載の第12回で、Objective-Cのポージング機能を紹介した。新しく作ったクラスで、既存のクラスを「乗っ取る」ことができる仕組みだ。乗っ取りは、自分で作成したオブジェクトだけでなく、システムが作ったものに対しても行えるので、非常に強力である。過去の記事では、例として、アプリケーションで使うすべてのウィンドウを半透明化する方法を紹介した。
だが、この機能を実際に使ってみると、すぐに次の疑問が浮かぶだろう。自分で作成したアプリケーションだけではなく、既にあるアプリケーションでもこの半透明化を行えないだろうか?
これを実現するには、作成したポージングを行うクラスを、目的のアプリケーションランタイムに読み込ませる必要がある。クラスをランタイムに侵入させる事にさえ成功すれば、あとはこちらのもの。Objective-Cランタイムが動的に提供してくれる、豊富なクラス情報のおかげで、ハックし放題だ。
果たして、このような侵入口はあるのか? 実は、ある。昔から良く知られている入り口がある。それは、インプットマネージャだ。
インプットマネージャは、我々日本人がコンピュータを扱うにあたって誰もが意識する、文字入力システムを管理するものだ。日本語や、その他の文字を入力するための、インプットサーバを作成し、それをアプリケーションから利用できるようにする。また、複数のインプットサーバを切り替える事もできる。
だが実のところ、文字入力に関する事はどうでもいい。ハックという観点から見て、インプットマネージャの重要な特質は、次の点である。Cocoaのランタイムは、利用可能なインプットマネージャを調べるために、アプリケーションを起動する際、~/Library/InputManagersの下にあるバイナリを読み込む。この読み込みは、そのバイナリが文字入力に関係あろうが無かろうが、すべてのファイルに対して行われる。
アプリケーションが自動的にクラスの読み込みを行うフォルダ。そう。ここが絶好の侵入口になっているのだ。
では、実際にここから読み込ませてみよう。2つのファイルを用意する必要がある。
まず、アプリケーションに動的に読み込んでもらうバイナリ。これを、必要なリソースとともにパッケージした、バンドルというファイルタイプで用意する。そして、そのバンドルの情報を記したファイル。これは、Mac OS Xで使われている、プロパティリストフォーマットで記述する。
今回はサンプルとして、第12回でも実験した、ウィンドウの半透明化をそのまま使おう。ウィンドウを表すNSWindowクラスのサブクラスを作り、ポージングをして元々のNSWindowを乗っ取るのだ。ソースコードは前回紹介したものを、そのまま利用する事にする。
ただし、今回は最終的にバンドルの形に仕上げなくてはいけない。そこで、開発環境であるXcodeで「Cocoa Bundle」のプロジェクトを作成し、上記のソースコードを含めてビルドする。これで、アプリケーションに読み込ませる、侵入ファイルの出来上がりだ。
次に、このバンドルの情報を記述したファイルを作成する。テキストエディタか、プロパティリストフォーマットを編集するProperty List Editorを使って、次のように書く。
BundleNameに対する値のところに、作成したバンドルファイルの名前を指定する。ここでは、TransparentWindow.bundleという名前にしている。このファイルを、Infoという名前で保存する。よく使われる、Info.plistという名前とは違うので、注意して欲しい。
この、バンドルファイルとInfoファイルを、1つのフォルダに入れる。そして、~/Libraryの下にある、InputManagersフォルダにコピーする。このフォルダがない場合は、自分で作成しよう。
これで完了だ。この状態でCocoaアプリケーションを起動すると、InputManagersの下にある、TransparentWindow.bundleを自身のランタイムに読み込む。このバンドルが含むTransparentWindowクラスは、NSWindowをポージングして、すべてのウィンドウを半透明にしてしまう。
上の図のように、Safariも、QuickTime Playerも、iPhotoも、すべて半透明になる。Cocoaを利用しているアプリケーションならば、すべて半透明になる。もちろん、大変使いにくい。だが、ハックによって引き起こされた結果は強力に実感できるだろう。
バンドルは、次のリンクからダウンロードできる。InputManagersフォルダにインストールすれば有効になり、取り出せば無効になる。取り扱いには、十分に注意してほしい。
TransparentWindow.zip
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
[9nine]制服姿見納め? セーラー服で登場も川島海荷「4人はコスプレ」 [19:15 5/27] エンタメ |
|
「NO.6」4巻は書き下ろしドラマCD付、木乃のサイン会も [18:49 5/27] ホビー |
|
[今週の新刊]マンガ大賞3回ノミネート「アイアムアヒーロー」 カープ愛「球場ラヴァーズ」も [18:33 5/27] ホビー |
|
「ゆりてつ」サイン会は作者と都電に揺られるツアー仕立て [17:45 5/27] ホビー |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。