HT-03A のルート権限を取得は、Android 1.5 のバグを突いて行うことができました。Android 1.6 では当然修正されたので Droid のルート権限取得はなかなかできなかったようですが、2.0.1 へのアップデートが行われたときにルート権限取得もできてしまいました。これも Android のバグでした。
問題のコードは、bootable/recovery/verifier.c の中にありました。
int i; for (i = 4; i < eocd_size-3; ++i) { if (eocd[i ] == 0x50 && eocd[i+1] == 0x4b && eocd[i+2] == 0x05 && eocd[i+1] == 0x06) { // if the sequence $50 $4b $05 $06 appears anywhere after // the real one, minzip will find the later (wrong) one, // which could be exploitable. Fail verification if // this sequence occurs anywhere after the real one. LOGE("EOCD marker occurs after start of EOCD\n"); fclose(f); return VERIFY_FAILURE; } }
このコードは、update.zip の署名をチェックする部分だそうで、見てのとおり条件式は決して true になりませんから、verify failure にならないのです。
Droid のときには、これを利用して、本物の update.zip の後ろにさらに別のzipを付加してだましたようです。
もちろん、今では修正済みです。
Android では一部のユーザがルート権限を取りたがる、そして、しばしば取ることができる、ということも知られてきましたから、ベンダーや事業者もこれからは気を使うのではないでしょうか。Xperia など 1.6 の製品はかなり堅牢なのではないかと思います。 Nexus One はわざわざハックしなくとも最初から入り口が設けてありますが、これは例外でしょう。