LeopardでAppleScriptのplistが読めない理由は……

Leopard Betaの頃から「なんでplistのフォーマットを変えたんだ?」とサポートに噛み付いてさんざん文句を言っていた。自分がこだわっていたのは、AppleScript処理系自体の設定ファイル、com.apple.applescript.plistである。

Mac OS Xのアプリケーションの設定ファイル(plistファイル)はフツーに文字で書かれているうえに、読み出し用のシェルコマンド(defaultsコマンド)が用意されているので、アプリケーションの設定内容を自由に検出することができ、さまざまな処理をするうえで非常に具合がよかった。Classic Mac OSからMac OS Xへ移行するメリットのうちのひとつに数えられるぐらい、この仕組みにはメリットがあったのだ。

本来はアプリケーションの設定内容がすべてAppleScript側から分かるのがベストだが、設定項目についてはそうなっていないケースが多いため、plistを直接読み出すのがScripterの間では割とポピュラーな技になっていた。10.0、10.1、10.2、10.3、10.4……と、バージョンを重ねても利用できる、安全で実用性の高い方法ともいえた。

自分もその「アプリケーションの設定内容を検出できる」というメリットを十分に享受していた1人だが、冒頭に書いたようにLeopardになってからというもの、これが読めなくなってしまっていた。厳密にいえば読めないわけではない。読めるが、意味のないものに変わってしまっていたのだ。単にフォーマットが変わったにしてはおかしい。どうせやるなら全部をバイナリにしてスクランブルをかけるぐらいはするだろう(10.4でバイナリフォーマットのplistをサポートするようになったが、これは普通にPlist Editorで開けるので問題ない)。定数部分だけフォーマットが変わっているのだ。

その内容が今日の今日まで分からずにいた。途中までは同じような文字列が続く、Alphabet & Numericの文字列。末尾のフォーマットも割と同じ。ちょっとだけ違う部分がある。かなり冗長な文字列……

その内容をPlist Editorで開いてみて、はじめて納得した。どうも見たことのあるようなフォーマットだと思っていたら、これはOpenSSL(のようなもの)を使って暗号化した文字列ではないか。各エントリで途中まで同じ文字列が続いてしまうのは、それほど長くないデータを共通の暗号化鍵を使って暗号化しているからだ。

そういえば、Leopardの技術ブリーフィング資料でそんなものを見かけたことがあった。暗号化ストレージとかなんとかいうものだったはずだ。しかし、こんなセキュリティに関係なさそうな内容(AppleScriptの各構文要素にどんなフォントと色を指定しているか)まで暗号化ストレージを使わなくてもよさそうなものだが……(ーー;;

暗号化/復号化のシミュレーション用ツールは、自分でAppleScriptで作って愛用しているので、これに突っ込んで……とりあえず暗号化鍵にルートのパスワードを突っ込んでみた。

………復号化はできなかった。暗号化のフォーマットが違う可能性もある。SHA-1ではなく、いくつかのフォーマットを選択できたはずだ。暗号化文字列のターミネータが「==」になっているので、調べればすぐに分かりそうな雰囲気である。

場合によっては、読取専用のコマンドも用意されているかもしれない、などと思って/sbinの下もあさっているが、ちょっとこれは分からない。「なんだ、そんなことか」程度の話になるかもしれなければ、深い絶望感を伴うほどガチガチに固められている可能性もある。

Copyright By Piyomaru Software. All Rights Reserved