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 はわざわざハックしなくとも最初から入り口が設けてありますが、これは例外でしょう。
