さっきJailBreakについて調べていたらこんな記事を発見しました。
今日はその紹介をしたいと思います。
■サイト名
Thank IT様 URL:http://www.thinkit.co.jp/free/article/0711/9/1/
以下の記事の内容はThank IT様の文です。当サイトの文ではありません。
より詳しく見たい場合はこちらへ
iPod touchになぜアプリケーションがインストールできるのか
本連載では4回に渡ってiPod touchで動作するアプリケーションの作り方を解説します。
iPod touchは、2007年9月28日に発売されたiPodシリーズの最新版です。今までのiPodシリーズのようにホイールを使ったユーザインターフェースではなく、全面にタッチパネル搭載をした液晶を搭載しています。このインターフェースは、2007年6月末にアメリカで発売された携帯電話「iPhone」と同じ物であり、「iPod touchはiPhoneをベースに電話機能の除いた物」といわれています。
特集記事「アレで使われている言語って何?」の「第1回:iPod touchはハンドヘルドMac!?」で紹介していますが、iPod touchではMacと同じ「OS X」というOSが稼働しています。iPod touchはその名の通りiPod、携帯音楽プレイヤーとしてリリースされていますが、中身はほとんどパソコンと同じ作りになっています。
iPod touchは音楽プレイヤーとして販売されているため、パソコンのようにアプリケーションをインストールすることができません。実際、アップル社は「アプリケーションをインストールすることはできない」とアナウンスしていました。
さらに「iPod touchでアプリケーションを動かしたい場合は、Webアプリケーションとして提供してSafariで動かすように」とし、Webアプリケーション向けのユーザインターフェースガイドラインもリリースしています。
しかし、Webアプリケーションではできることが限定されており、速度や表現力に限界があります。最大の問題となるのが「ネットワークに繋がっていない時には使うことができない」という点です。
そこで、Webアプリケーションに満足できない一部の人たちが自力でアプリケーションを作成し、インストールする手段をみつけ出すことにした、というのが現在の状況なのです。
図1:JailBreak後のiPod touch
JailBreakはなぜ実現できたのか
ここで、iPod touchにアプリケーションをインストール可能とするため、今もっとも広く利用されている「JailBreak」について解説しておきます。 JailBreakでは、iPod touchに用意されているWebブラウザ「Safari」で特定のURL、具体的にはTIFF画像を表示させることで、予期されていないコードを実行させています。
iPod touch上のOS Xには、多くのオープンソースライブラリが使われています。TIFF形式の画像を表示する「libtiff」ライブラリもその1つです。実はiPod touchに搭載されているlibtiffにはバグが存在していたのです。
オープンソースのライブラリの中にはバグが存在するものもあります。ほとんどのバグは発見されるとすぐに修正されたバージョンがリリースされますが、iPod touchの場合は古いバージョンがそのまま含まれていたのです。
ではいったい、このバグはどのような物だったのでしょうか。
libtiffのバグを利用したJailBreak
iPod touchにインストールされているlibtiffのバグとは、本来のフォーマットとは違う値が埋め込まれたTIFF画像を表示すると、その値によって意図しない動作を行わせることができるというものです。このようなプログラムを「exploit code」と呼びます。JailBreakではexploit codeを利用し、iPod touch上のディスク領域の読み書きとアプリケーションインストーラの導入を行っています。
「なぜSafariで JailBreakするのか」という理由は、JailBreak前のiPod touchでは外部から直接libtiffに画像を読み込ませることができないためです。exploit codeの入ったTIFF画像を読み込ませるには、そのTIFF画像が公開されているURLにlibtiffを使っているSafariを介して接続することが、近道だったということです。
この方法ならば、外部から好きなプログラムを実行させることが可能で、ファイルを書き換えるといった操作を容易に行うことができます。
このように画像処理ライブラリのバグを利用して画像にプログラムを埋め込む手法は、Windowsなどで出回ってるWebブラウザで感染するタイプのウイルスとまったく同じ仕組みなのです。「ウイルスを送るか、Appleの制限を外すJailBreakを行うか」、それだけの違いしかないのです。
JailBreakをするTIFF画像だと思って、まったく別のexploit codeが含まれた画像を表示することのないように注意してください。
なお、現在最新のJailBreak用のexploit codeの含まれた画像の中には、Jail Break後にlibtiffのバグ修正を行い、危険なtiff exploitを回避できるものまで登場しています。
図2:JailBreakの流れ
iPhoneはどのようにしてJailBreakされたのか
iPod touchがJailBreakされる前段階として、iPhoneの存在を忘れてはいけないでしょう。
通常、Windowsではアプリのインストールにはインストーラなどの専用アプリを使います。しかし、Mac OS Xでは、アプリケーションファイルをコピーするだけでインストールが完了します(もちろん例外もありますが)。
同じOS Xを搭載したiPhoneでも、特別なインストーラを使わずファイルのコピーだけでアプリケーションのインストールができる可能性が非常に高いといえます。しかし、PCとiPhoneをUSB接続した際にPC側からアクセスできる領域は、曲や写真といったiTunesで扱うデータだけでした。
この方法ではアプリケーションを保存するための領域にアクセスできません。そこで、この領域以外にもアクセスできる方法探しが開始され、なんとiPhone が発売された1週間後には発見されてしまいました。このときは、iPhoneとパソコンを繋ぐUSBの通信内容を解析し、内部ファイルシステムにアクセスできるようになったとのことです。
iPhoneのメディア領域以外にもアクセスができるようになったことで、その行為が「JailBreak=監獄破り」と呼ばれるようになったのです。
iPhoneの解析からアプリケーション開発がはじまった
iPhone上のファイルへアクセスできるようになると、各種ファイルの解析がはじまりました。
iPhoneのディレクトリ/フォルダ構成は「第1回:iPod touchはハンドヘルドMac!?」で解説した通りMac OS Xとほぼ同じだったため、Macを使ったことのある開発者であれば、ほとんどのファイルの内容は容易に想像が付いたようです。
まずiPhoneには隠し機能として多くのネットワークサービスが組み込まれており、それらがオフになっていることが判明しました。そこで、起動後に読み込まれる設定ファイルを書き換えることでサービスを起動し、外部から容易にファイルの変更ができるようになりました。
図3:JailBreakの仕組み
さらに解析が進み、iPhoneにインストールされているiTunesやiPhoto、Safariは「/Applications」にアプリケーションごとに「アプリ名.app」という名称フォルダに格納されていることもわかりました。
さらにOS Xのフレームワークやライブラリを保存している「/Libraries」フォルダには、Mac OS Xで使われている「Cocoa」というフレームワークが採用されていることも判明しました。つまり開発手法も、Mac OS Xと同様であると推測できるわけです。
Mac OS Xの開発環境である「Xcode」はPowerPCとIntelに向けたバイナリを生成できるのですが、標準ではARMバイナリの生成には対応していません。実はXcodeでは、Linuxなどで広く採用されているオープンソースのコンパイラ「GCC(Gnu Compiler Collection)」が利用されており、GCC自体はARMにも対応しています。
そこでXcode内のGCCではなく、ARMのアプリケーションが生成できるように設定したGCCを別途導入することで、ARM向けのバイナリの作成が可能になるのです。
またGCCはOS Xの開発言語として採用されている「Objective-C」をサポートしています。実行バイナリ形式である「Mach-O」はサポートされていませんでしたが、iPhone用に新たにプロジェクトが立ち上げられMach-Oをサポートする「Toolchain」がリリースされました。
これらの成果から、iPhoneが発売されて4週間ほどで、iPhone上で動く「Hello World」を表示するはじめての非公式アプリケーションが登場したのです。
管理人はこれを読んで感動しました。
JailBreakの成り行きを知ることができたのでこのサイトには感謝しております。