攻撃は最大の防御なり

50代おやじの適当なブログです。

rootedなHTC Sensationに公式RUUやOTAを当てる手順

2011-08-11 18:56:58 | HTC Sensation
rootedなHTC Sensationに公式RUUやOTAを当てる手順です。
この方法では最終的にS-ONに戻りますので、Revolutionaryで再S-OFFするなりして下さい。
RUUとOTAはそれぞれ利点、欠点がありますので場合により使い分けて下さい。

・RUUを当てる場合

手順は簡単ですが、systemディレクトリが完全に工場出荷時に戻ります。
つまり、それまで行ってきた変更が全てやり直しになるということです。
挙動が怪しくなって来た場合等に有効です。

まず、superCIDを設定します。
HTC SensationにClockworkMod Recoveryを適用する手順 」を参考にしてfastbootが使える状態にし、Sensationをfastboot接続します。
そして、下記のコマンドを実行


fastboot oem writecid 11111111
fastboot reboot-bootloader

ここでbootloaderが再起動しますので下記のコマンドを実行。

fastboot getvar cid

Sensationから「 11111111 」の応答があれば成功です。
後は通常起動しここから取ってきた任意のRUUを当てます。
リージョンロックが外れていますので、多分どのRUUでも当てられるのではないかと思います。

RUUが終了した時点ではS-OFFのオフィシャルbootloaderが入った状態となります。
このままRevolutionaryが当てられるかどうかは試した事がないので分かりません。
S-ONに戻すには上記superCIDの設定をもう一度行い、fastbootから下記のコマンドを実行します。

fastboot oem writesecureflag 3


・OTAを当てる場合

今の状態を保ったままアップデートがかかります。
但し、過去のカスタマイズでアップデート対象リソースを入れ換えていた場合は作業が煩雑になります。

まずはSensationのソフトウェアアップデートを確認して、OTAパッケージをダウンロードします。
ダウンロードが完了すると、今すぐインストするか?と聞かれますので後程インストするを選びます。
この状態で一回バックアップを取っておいて下さい。

ダウンロードされたOTAパッケージが/sdcard/downloadに保存されていますので、PCにコピーしてきます。
OTAを解凍すると中にfirmware.zipがあると思うのでそれも解凍しrecovery.imgを取得します。
HTC SensationにClockworkMod Recoveryを適用する手順 」を参考にしてrecovery.imgを適用します。
発行するコマンドは

fastboot flash recovery recovery.img

これでリカバリー領域がオフィシャルリカバリーに戻りました。
後は「RUUを当てる場合」に記載してあるsuperCIDの設定を行っておきます。
Sensationを通常起動し、ステータスバーの通知からアップデートを開始します。
問題が無ければ数回再起動を繰り返した後、通常起動した状態に戻ります。

この状態ではRUUを適用した場合と同じでS-OFFのオフィシャルbootloaderが入っています。
fastbootから下記のコマンドでS-ONに戻ります。

fastboot oem writesecureflag 3

ここまですんなり終わればいいのですが、もしアップデート中にビックリマークが出てしまった場合はリソースの入れ替えが行われている場合です。
電源が落ちませんので電池はずしで切って下さい。この段階ではまだアップデートが走っていないので実行前と同じ状態です。
この後も頑張れば当てられる状態に持っていけますが、作業がかなり煩雑なので出来ればRUUを当てた所にOTAを当てる方法をおすすめします。

一応この後の手順も続けて記載しますが、それなりに知識のある人向けとさせてもらいます。

まず、入れ替えたリソースを自分で把握している場合です。
先程解凍したOTA内のMETA-INF\com\google\android\updater-scriptをテキストで開き
apply_patch_checkを行っているリソースで該当のものを探します。
見つかったら書き戻してアップデートを実行。
入れ替え時に上書きしてしまって物が無い場合については後記します。

次に、入れ替えたリソースを把握していない場合。
オフィシャルのリカバリーは画面出力も無いし、adb接続も出来ない様になっています。
もし可能であるならrecovery.imgをadb接続可能に修正しlogcatで突き止めるのが楽だと思います。
もしくはS-OFFされたSensationにオフィシャルOTAを当てたいを参考にしてClockworkMod RecoveryでOTAを実行し原因を突き止めてください。
続いて、上書いてしまったリソースの取得方法ですが
今使っているROMと同じバージョンのRUUを取得してきます。
エクスプローラーで「%TEMP%」を開き、出来るだけゴミを削除して綺麗にします。
RUUを実行します。%TEMP%直下にディレクトリが2つ出来ると思うのでその中からrom.zipを任意の場所にコピーします。
コピーが終わったらRUUは終了。rom.zipを解凍しsystem.imgを取得します。
ここからunyaffsを取得し「unyaffs.exe system.img」で展開されるので物を取得します。


何か後半が非常に分かりづらいですねw
PCが直ったら画像を追加しておきますが、余り改善されないかもしれない。

HTC Sensationでrootを取得する手順

2011-08-11 12:52:12 | HTC Sensation
さて、それではHTC Sensationでrootを取る手順に入ります。
これ自体は非常に簡単な作業ですが、S-OFFが行われている事が前提です。

まずはここからsuperuserのパッケージをダウンロードします。
それをSDカードの任意の場所に放り込みます。
入れ場所は好きな場所で良いのですが見つけやすい場所が良いですね。
わざわざPCを使うのが面倒な人はSensationで直接ダウンロードしてしまっても良いです。
その場合は/sdcard/download/に保存されます。

次にClockworkMod Recoveryを使った作業に入ります。
S-OFF時にインストしていなかった人は別記の方法でインストしてから以降の作業を進めて下さい。

まずbootloaderに再起動します。
音量下押しで電源ONですね。
一回電源キーを押してメニューを切り替えRecoveryを選択します。
再起動がかかってClockworkMod Recoveryが起動しましたか?




もしこんな画面になってしまった場合はClockworkMod Recoveryがインストされていません。



上記のClockworkMod Recoveryインストの手順を行ってください。
また、この状態になってしまうと電源が切れなくなるので、電池を外して強制的に切って下さいね。

それでは作業を始める前に一回バックアップを取って置きましょう。
ここでの操作は音量キーがメニュー上下、電源キーが決定、戻るキーが戻るです。

「backup and restore 」→「Backup」





だいたいROM単体で700MB位食います。
/sdcard/clockworkmod/backupの日付フォルダーに保存されます。





バックアップが終わりました。
画像の例だとsd-extが正常終了していますが、sd-extは作らないと存在しないのでエラーになっていても構いません。
では、先程突っ込んだsuperuserのインストをしましょう。

「install zip from sdcard」→「choose zip from sdcard 」





ここでSDカード内の一覧が表示されますので、su-2.3.6.3-efgh-signed.zipを選択します。



全然関係無い話ですが画像に只今絶賛デバッグ中のSensation用CyanogenMod7.1.0のOTAパッケージが写っています。
中々上手いこと動いてくれないんですよねw

zipを選んだら下の方のyesを選ぶとインストが始まります。





この例だと一発でインスト出来ていますが、確か初回は必ずインスト失敗して再度行うと成功だったような気がします。
表示されるメッセージを注意して見てください。

これで作業は終了です。
「reboot system now」で戻りましょう。



作業前とは特に変わった様に感じないと思いますが、superuserってアプリが追加されていると思います。

バックアップが取れたのでbootloaderが起動する限り復旧が出来るようになりました。
今後Sensationに何らかの変更を行うときには
バックアップ→変更作業→動作確認
のステップを行えば確実です。
うちではSDに5世代位のバックアップを取って置いて、バックアップ取得時に最古のバージョンを消していく運用をしています。

HTC SensationにClockworkMod Recoveryを適用する手順

2011-08-11 09:04:03 | HTC Sensation
※PCが壊れてしまったため画像無しの記事になります。復旧し次第 画像を掲載する予定です。

HTC SensationにClockworkMod Recoveryを適用する手順です。
S-OFF実施済みであることが前提です。

まず、ここからfastbootをダウンロードして任意の場所に解凍します。
次に ここ からClockworkMod Recoveryをダウンロードし、先程のfastbootと同じディレクトリに置きます。

PCとSensationをUSB接続し、bootloaderに再起動します。
ボリューム下を押しながら電源ONですね。
bootloaderが起動したらメニュー一番上の「FASTBOOT」が選択された状態で電源キーを一度押します。
メニューが書き変わって赤反転文字で「FASTBOOT USB」と表示されたと思います。

この状態でPCのコマンドプロンプトを起動し、先程ダウンロードしたfastbootのディレクトリまで移動します。
そして以下のコマンドを実行。

fastboot flash recovery recovery-clockwork-4.0.1.5-pyramid.img

コマンドの応答がOKであることを確認してください。
これで完了です。
REBOOTを選んで終了しましょう。

fastbootは今後頻繁に使用する事になりますので、PATHを通してやっておくと楽です

HTC Sensation用のClockworkMod Recoveryを修正した

2011-08-10 12:40:45 | HTC Sensation
いつもClockworkMod Recovery関連の記事を書く時はddms経由でスクショを撮っているんですが
Sensation用のClockworkMod Recoveryは例のqHD解像度に起因した問題で正常に撮れない不具合があります。
今後の記事でどうしても必要になってくるので修正しました。

RevolutionaryでS-OFF時にインストした人はこれですね。



RomManagerからインストした人はこれ。



今の所は、このどちらか2択じゃないでしょうかね。

HTC Sensationを日本語化する

2011-08-10 10:08:57 | HTC Sensation
定期的にHTC Sensationの日本語化に関する検索ワードで飛んでくる人がいるので手順を書いて置きますね。

通常Android端末では設定→言語とキーボード→言語設定から使いたい言語を選択しますが
日本で発売されていないSensationは日本語が選べません。
でも本当は内部的にはきちんと日本語表記も用意されているんだけど、蓋が閉まっていて使えないだけの事なのです。
その蓋をアプリを使って開けてあげます。

Androidマーケットから「MoreLocal 2」というアプリをインストします。
単純にこのアプリで日本語を選んでやればOK。



設定画面の言語選択も日本語になりましたね。



ちなみにこの画像ではiWnnがインストされていますが、ディフォルトで日本語IMEは入っていません。
Open Wnn辺りでも使ってください。

お盆休みかな?

2011-08-10 09:20:30 | 戯言
世間は今日辺りからお盆休みですか?
俺は毎年この時期には出勤することにしています。
電車が空いていて非常に快適なんでね。

また随分と暑くなってきましたが、遊んでいる人は熱中症に気を付けて。
働いている人は書き入れ時の所が多いのかな?お互い頑張って乗り切りましょう。

HTC SensationのS-OFF手順

2011-08-09 19:20:41 | HTC Sensation
S-OFFを行なう利点と必要性はそのうち書きますが、これを行なわないと何も出来ません。
という事でそんな難しい作業じゃないですけど、一応HTC SensationをS-OFFする手順を書いておきます。
本当ならここでお決まりの文鎮になる可能性もあるので自己責任で云々と書く所ですが
実はこれの説明のため俺のsensationを一旦S-ONの状態に戻しています。
S-OFFにするのもS-ONに戻すのも内部的に行われるのは同じ様なことで
HTCのRUUやOTAで普通に行われている処理内容です。(今回はOTA使ってS-ONに戻しました。)
それをリスクと捉えるかどうかはその人次第と言うことで。

さて、それでは先ずRevolutionaryのサイトから物をダウンロードしましょう。
俺の常用はLinuxですが、windows版の方が需要が高いと思われるのでそちらを説明します。

レジストキーを発行してもらうのにHBOOTのバージョンとシリアルナンバーが必要になります。

・HBOOTバージョンを調べる

bootloaderを起動します。
HTCデバイスお決まりの電源OFFでボリューム下キーを押しながら電源ONですが
高速ブートが有効になっているSensationだと普通の電源OFFからじゃ起動できません。
再起動を選んで立ち上がって来る所を見計らってボリューム下を押すのが一番簡単だと思います。



当然ですがS-ONですね。この例だとバージョンは1.17.0011です。
ちなみに俺みたいに再S-OFFする場合ですがHBOOTのバージョンが変わっても
Revolutionaryのサイトから発行されるキーは変わりません。
HBOOTバージョンはRevolutionaryチームが統計やサポートのために収集しているだけだと思います。

・シリアルナンバーを調べる

設定→この携帯電話について→電話ID→デバイスのシリアル番号



これです。

・レジストキーを取る

RevolutionaryのサイトにHBOOTバージョンとシリアルナンバーを入力します。
ちなみにこのキーはいつやり直しても同じものが表示されるので、控えておく必要は無いと思います。





・USBデバッグをONにする。

設定→アプリケーション→開発→USBデバッグ



・ドライバーを当てる

ここからドライバーをダウンロードしてインストしておきます。
Windows 7の場合はadbドライバーがsensationから自動でインストされる様ですが
fastbootのドライバーは自動で入らないのでここで当てておきましょう。

・S-OFF作業に入る

さて、いよいよS-OFFです。
PCとSensationをUSBケーブルで繋ぎRevolutionaryを起動しましょう。
ここでこのようにSensationのシリアルナンバーが表示されていればOKです。



こんな風にデバイスを探している状態から進まない様だったら、Sensationを繋ぎ直すとかRevolutionaryを再起動したりしてみましょう。



レジストキーを入力して先に進みます。



もし、上記のドライバーを当てていない場合はこの画面でだんまりになります。
その場合はドライバーを入れ直してRevolutionaryを再起動。

数回再起動後この画面になります。



ここでYを選ぶとClockworkMod Recoveryがインストされます。
別に後からでも出来ますがインストしておいた方が無難でしょう。
ここで入るClockworkMod RecoveryはRevolutionaryチームお手製みたいです。

この後いつのまにかdos窓が閉じていて、bootloaderのまま放置されて終わりましたよ的なお知らせは何もありません。



ちゃんとS-OFFになりましたね。
bootloaderでの操作は音量キーがメニュー上下、電源ボタンが決定です。
Rebootを選べば作業終了です。お疲れ様でした。

次はroot取りの作業について書く予定です。

[Android]Androidのファイルシステム

2011-08-09 09:50:43 | Android
Androidのファイルシステムはこんな感じのツリー状になっています。
(あくまでも一例で全てのデバイスが同じ構成とは限りません)

/─┬ cache
 ├ data
 ├ dev
 ├ mnt
 ├ proc
 ├ root
 ├ sbin
 ├ sys
 └ system

この中でSDカードは/mnt/sdcardにあります。
windowsで2機のHDDが乗ったPCがあった場合にはCドライブ,Dドライブ等、別ドライブに分かれた状態になりますよね。
しかし、LinuxやAndroidには別ドライブと言う概念が存在しません。
全ての記憶デバイスが「/」(rootディレクトリと呼ぶ)から始まるツリー上に乗った形になります。

特定の記憶デバイスをツリー上で使えるようにする事を「マウントする」と言います。
実際に試して見ましょう。
「アストロファイルマネージャー」を使って/mnt/sdcardを見てみます。



バッチリSDカードの中身が見えていますね。
これは「SDカードがマウントされた状態」です。

次に[設定]→[SDカードと本体のメモリ]→[SDカードのマウント解除]を実行します。





SDカードの中身が見えなくなりました。



「SDカードがアンマウントされた状態」です。

この状態では/mnt/sdcardは単なる空のディレクトリですが、
OSとしてSDカードをマウントする場合にはこのディレクトリを使用する事に決まっています。
このような特殊な用途に使用するディレクトリの事を「マウントポイント」と呼びます。

ここで良く考えて見て下さい。上記の「SDカードがマウントされた状態」では
同一ディレクトリツリー上にありながら実際は中身のデバイスが違っていたりしますよね。
もしSDカードにファイルを保存し過ぎて一杯になってしまったらどんな状態になるんでしょうか?
答えは/mnt/sdcardには書き込めないが、その他の/cacheや/dataには書き込める状態となります。
何か変な感じですけど、これは実際に触ってみないと理解しにくいのではないかと思います。

更にAndroidではcache,data,systemは内臓ディスクでも別パーティーションに分かれた物がマウントされています。
状態によってcacheには書けるけどdataには書けない等の場合が発生するわけです。

[Android]そもそもrootって何なの?

2011-08-08 12:41:20 | Android
今日からAndroidの基礎についてつらつらと書いていきます。
AndroidはLinuxの一種ですので、Androidを理解する事はLinuxを理解するのと同義となります。
内容的にはうちの新人に「UNIXとは何ぞや?」を教えるのと似た様な感じになるので、必ずしも面白い話になるとは限りません。

さて、スマフォを触っていると良く「rootを取った」とか「rooted」という言葉が出てきます。
そもそもrootって何でしょうか?
端的に言ってしまえば「管理者権限を持つユーザの事」です。
Androidは常に抑制された状態で動作しています。
windowsで言う所のuser権限でログインしたのと同じで、勝手に人のファイルを見たり変更したり出来ない状態です。
では、実際にどんな状態か見てみましょう。

Androidマーケットから「アストロファイルマネージャー」をインストしました。
このアプリはwindowsのエクスプローラと同じようにAndroidファイルシステムを見ることが出来るアプリです。
アストロで/dataの中身を見ようとしたところ「ディレクトリは空です」と表示されました。



本当は/dataの中にはアプリの設定データ等が入っているのですが、
/dataディレクトリには勝手に中身を見ることが出来ない設定が成されています。
この中身を見たり書き換えたり出来る・出来ないの設定の事を「パーミッション」と呼びます。
Android上の全てのファイル、ディレクトリには、このパーミッションが設定されていて
/dataの中身を見れる人は/dataディレクトリの持ち主もしくはrootユーザと言う事になります。
慣例的に特定のファイルディレクトリを扱える権限が無い事を「パーミッションが無い」
権限がある事を「パーミッションがある」と言います。

次に「ConnectBot」というアプリを使って端末自身にコマンドラインでログインしました。



/dataに移動して(cd /data)
中身を見ようとしました(ls)
が「ls:can't open '.':Permission denied」と応答が帰って来ています。

ここでの'.'はカレントディレクトリ、すなわち/dataの事を指します。
要するに「カレントディレクトリが開けません。パーミッションが無いよ」と言っているのです。

その次で「su」と言うコマンドを発行しています。
これはSubstitute Userの略で語意のままユーザ変更をするコマンドですが、
引数無しの「su」は暗黙的にrootにユーザ変更をする事を意味します。
ここでコマンドプロンプトが変っている事にも注意してください。
これも決まり事で一般ユーザは「$」rootは「#」で見た目で分かるようになっています。

同じようにrootで/dataの中身を見たら見事に表示させる事が出来ました。


ここで最初の「rooted」の話に戻りますが「rooted」にしたからといって
Android全てのプロセスがroot権限で動作するようになるわけではなく
抑制された状態で動作している事には何の変りもありません。
正しく言うならば「root権限で作業をする事が可能になる」と言う事です。
Root Explorerというroot権限で動作するエクスプローラを使えば/dataの中身を見る事が出来ますが
このアプリはアプリ自身がroot権限で動作するような細工がしてあります。
当然、買ったばかりで素の状態の端末ではRoot Explorerは動作しません。

要するに「rooted」にすると、普通では触れないファイル等の編集や入れ替えが可能になります。
正しく作業すればより便利な機能が使える様になったりする反面、システムを壊す原因にもなります。
そこで壊した時にどうするのか?と言う保険が必要になってきます。
それは又の機会に書きますが、とてつもなく変な事をしない限りまず文鎮にはなりません。

S-OFFされたSensationにオフィシャルOTAを当てたいんだよー

2011-08-05 10:51:18 | HTC Sensation
俺のSensationはRevolutionaryが発表された後に買った物ですが、
家に届いて一時間も経たない内にS-OFFされてrootedになっていました。

で、翌日位に「アップデートが可能になりました」の通知が・・・
この通知ってpush配信なんですかねぇ?
Androidのバージョンが上がるアップデートじゃないので入れなくて良いと言えばそれまでですが、当てたくなるのが人の世。
でもS-OFFされていると普通の方法じゃ入れられないんですよねー。面倒くさいw

OTAパッケージにはsystem配下をフルワイプして入れる物と、差分パッチを当てる物があります。
今回、俺がいれたのは差分パッチの方ね。
update-scriptを読むと大体こんなシーケンスになっていました。

・入っているROMはアップデート対象のバージョンだよね?
・ブートローダーは変更していないよな?でもsuper CIDの機体だったら許す
・デバイス名はpyramidだよね?
・パッチ対象のファイルは変更していないよね?
・じゃあパッチあてる
・パーミッションも直しちゃおうね
・bootloader,boot,recovery,radio辺りも上書いちゃうよー

チェックの所で引っ掛かるとassertします。
scriptを変更しちゃえば通るけど、出来ればそのまま通したいよね。
俺の場合はbootloaderを変更しているのと、kernel変更に合わせてwifiモジュールを変更している点が引っ掛かりますね。

取り敢えずsuper CIDが設定してファイルを元に戻せば良いことが分かりました。
CIDというのはcountry IDの事で、通常はデバイスのリージョンに合わせた物が設定されています。
これのせいで例えばUK版にはAsia版のROMが入れられないようになっているんですね。
super CIDってのはテスト用にこのリージョン制限が掛からないようにするCIDの事です。

clockworkmod recoveryに入ってadbからCIDを確認してみます。

adb shell mount /system
adb shell /system/bin/getprop ro.cid

結果は空でした。ここでcidを上書いて騙します。

adb shell /system/bin setprop ro.cid 11111111

これでOTAをインストしてやればOK。
もし入れ換えたファイルが引っ掛かる様なら、途中でエラーと共にファイル名が表示されるので入れ換えて再実行しましょう。
これで見事インストが出来ましたが一つ落とし穴があります。
最後の方でrecoveryやらを書き換えるwrite_firmware_imageはclockworkmod recoveryではダミーになっていて実際実行されません。
入れたい人は自分で入れないと駄目です。俺の場合はradioだけ書き換えることにしました。
fastbootから入れるのでadbのカレントにOTAの中のfirmware.zipからradio.imgを抽出しておきます。

adb reboot bootloader
fastboot flash radio radio.img

あっ?fastbootって標準じゃ入っていないんだっけ?ググればすぐ見つかると思います。
このfastbootからのリカバリは覚えておいて損はないです。
例えばOSが起動しなくなってRecoveryにも入れない。bootloaderしか起動出来なくなった時は

fastboot flash radio radio.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot flash recovery recovery.img

これで復旧出来るでしょう。
各imgの元ネタはclockworkmod recoveryでバックアップしておいたものでも良いですし
最悪はOTAやRUUのrom.zipから抽出したものでも大丈夫です。
実際fastbootからのリカバリの方が使いやすいんだよねw
母艦は容量気にせずにバックアップ保存できるしね。

では、良いAndroidライフを。