HTCのAndroid機にはすべてHBOOTと名付けられたサービスモード(ブートローダーモード)が存在します。

hbootのソースコード等は公開されておらず、hbootの状態によって機種本体のプロテクト等のON/OFFを制御したり、現在のセキュリティ状態を表示しています。

その表示内容は、発売時期、搭載SoCなどによって変化しているので追えていない部分も有ります。

このhbootを起動するためには完全に電源を落とした後音量下を押しながら電源を入れると起動します。

機種によって表示内容は変わりますが以下のような解釈でいいと思います。

HBOOT-8620

  • *** LOCKED *** → ロック状態
  • SHOOTER_K → コードネーム
  • PVT → 機器のバージョンタイプ(開発段階表示)
  • SHIP → HBOOTの属性種類
  • RL → 不明
  • HBOOT-1.50.0000 → HBOOTバージョン
  • RADIO – 1.02.00.0906 → Radioバージョン
  • Sep 7 2011,16:06:41 → HBOOTのビルド日
  • HBOOT → 今のモード

HBOOT表示

2011年度のHTC機のHBOOT (ISW12HT完全純正状態) 2012年度のHTC機のHBOOT (HTC J UNLOCK済み + TAMPERD状態)
PLATFORM : HBOOT-8260 PLATFORM : HBOOT-8960 Felica対応版

HBOOTからはリカバリーモードを起動したり、ファクトリーリセットを行ったりする事が出来ます。

一部の機種ではIMEIやシリアルナンバーをバーコード表示されていたりする機種も有ります。

HBOOTのロック表示について

  • LOCKED
  • UNLOCKED
  • RELOCKED
  • Security Warning
  • TAMPERD

 – LOCKED

画像のように「*** LOCKED ***」と表示されている状態は一度もブートローダーロック解除していない初期状態となっています。

完全にプロテクトされており、仮にSystemなどNAND部分の改変を行ったとしても元に戻ってしまいます。

– UNLOCKED

「*** UNLOCKED ***」となっている場合はHTCの公式アンロックを行っている状態でありSystem領域の改変が可能になるのに加え、ブートローダーで制御している部分の書き換えが可能になりますが、(一部分のNANDロックが解除される)セキュリティチェックで弾かれてしまうために公式のRUUは当てられません。

改変可能部分

  • カーネル
  • リカバリー
  • システム内部

その他詳細部分(CarrarIDなど)は改変できません。

HTCの機器保証は無くなります。

ですが、HTC機でカスタムROM等を利用するだけならば開発者アンロックの状態で十分だと思います。

– RELOCKED

「*** RELOCKED ***」となっている状態は、アンロック状態から再度ロックを掛けた場合に表示され、機能上は完全に「LOCKED」の状態に戻るためにRUUの適用が可能になります。

リロックを行うコマンドは以下となります

fastboot oem lock 

HTCの保証は受けられない状態です。

 – Security Warning

LOCKED時やRELOCKED時にシステム内やブートローダーに改変が在るとロック状態の下に「*** Security Warning ***」と表示され、RUU適用か元の状態に戻るか再度アンロックを行うまで起動不可状態になります。

 – TAMPERD

今期のSnapdragon S4を搭載したHTC機(詳細にはPLATFORM : HBOOT-8960/HBOOT-8064)は改ざんが有るとロック表示の上に「*** TAMPERD ***」と表示されるようになりました。

この表示は表示されていても特に操作は変わりませんが、System内やその他に改変が見られると、どの状態でも表示されるようです。

この表示を消すためには、RUUを適用するしか方法は無いようです。

 – 表示なし

表示なしの場合はまだ公式アンロックに対応した機種ではありません。

LOCKEDやUNLOCKEDの概念が無いので、この場合は後ほど記載するS-OFF = ブートローダーアンロック済と同義になります。

 – その他

Unlimited.IOやRevolutionaryでS-OFFを行うと上部にオリジナルの文字が入った状態になります。

この状態になると、アンロックなどを行わずして「UNLOCKED」と同じ状態、さらに後ほど記載するEngineering hbootと同等なhbootを搭載した状態になります。

S-OFF (Security OFF )

通常状態ではS-ON(Security ON)となっているのですが、開発機やテスト機などはS-OFF(Security OFF)と言う状態になっています。

S-OFFとなると、HBOOT上のS-ONと言う文字がS-OFFと変わり、ロック状態と同じようにHBOOTで現在の状態を確認する事が出来ます。

S-OFFとなるとセキュリティロックがOFFとなり、署名なしのファイルが適用可能、一部の本体情報(詳細には後ほど記述するoemコマンドのwrite系が利用できるようになる。)を書き換えることが出来ます。

署名なしのファイルを利用できるようになるため、UNLOCKED時では行えなかった部分の改変、ENG hboot/自作hbootの搭載や自作のRUUを適用できるようになります。

公式のRUUもUNLOCKEDの状態でも適用が可能になり、ソフトウェアの自己修理時などにも色々なセキュリティチェックを省いてくれるために回り道をせずに行えるので個人的に大変重宝するモードとなります。

S-OFF時のRUU適用時の挙動は此方をご回覧下さい。

http://

現在のHTC機(恐らく2011年度機後半以降、前半期はアップデート後)は通常状態(SHIP)ではブートローダー状態が「LOCKED」になっているとfastbootのflashコマンドは利用できなく、手動でシステム全般の改変は行えないために手動書き換えは基本的にS-OFF状態でも「UNLOCKED」にしなければブートローダーのロックが外れません。

一般ユーザーがHTC機をS-OFFするためには 


S-OFFは本来一般ユーザーには公式に開放されているモードではなく、開発者や修理センターでは正規の方法でS-OFFを行っています。

私は行った事が有りませんが、具体的には「XXXXDIAG.zip」と言うRUUと似たファイルとHTCのデベロッパ専用のSDカード(JavaCard)を利用しS58モードを起動後S-OFFやSuperCIDに改変する作業を行っているようです。

One Xでの作業風景↓


この方法を一般ユーザーが利用するのは、先ずDIAG.zipを手に入れるのは非常に困難であり更にJavaCardは一般的に作成する事が出来ない為、行う事が出来ません。

ですが、有志のユーザーによってexploitを利用しS-OFFを有効する事が可能になっています。

その現在代表的なチームのサイトが以下となります。

Revolutionary

http://revolutionary.io/

Unlimited.IO

http://unlimited.io/

HBOOTの種類分け

HBOOTの種類は上部で書いたようにプラットフォームでの種類分けと開発時などに利用する物、出荷時に搭載されている物での種類分けとなっています。

プラットフォーム / Platform


プラットフォームの種類訳は自分が解る範囲で以下に記載しています。

HBOOTは基本的にベースSoCで区別されており、そのグループはPLATFORMとして名称が付けられています。

例として、Snaodragon S3 MSM8660を搭載したISW12HTのPLATFORMはHBOOT-8260となり、Snapdragon S4 MSM8660Aを搭載したHTC JのPLATFORMはHBOOT-8960のFelica対応版となっています。

EVO3Dに搭載されているMSM8660はMSM8260の互換なのでPLATFORMがHBOOT-8260、HTC Jに搭載されているMSM8660AはLTE対応しているMSM8960の下位互換なのでPLATFORMがHBOOT-8960となっています。

HBOOTのプラットフォームは自分が確認できる範囲で以下に纏めています。

HTC機のHBOOTの機種プラットフォーム分け一覧

HBOOTの種類


  • Shipment HBOOT (SHIP HBOOT)

このHBOOTを搭載していると、HBOOTの画面上に「SHIP」と表示されます。

出荷されている機種にはすべてこのHBOOTが搭載されます。

アップデートなどでもこのHBOOTが提供されるので、故意に変更を行ったりしなければこのHBOOTが基本搭載となります。

  • Engineering HBOOT (ENG hboot)

このHBOOTを搭載していると、HBOOTの画面上に「ENG」と表示されます。

基本的には購入した機種には搭載されておらず、開発時に利用される開発専用のHBOOTとなります。

このHBOOTを搭載後し、一例として挙げると「SHIP」状態のHBOOTでは行えない、fastbootモードでflashコマンドを使いradioを書き込む事が可能になります。

fastbootのoemコマンドの数が増え、開発者専用コマンドが利用出来る様になります。

その他に、このHBOOTを搭載すれば「LOCKED」状態でも「UNLOCKED」状態と同じ扱いをすることが出来ます。

S-ON状態でENG HBOOTは利用できません。

要は「SHIP HBOOT」だと開発者が面倒くさいので、開発時に扱いやすいHBOOTと言う事です。

このHBOOTを手に入れる方法は、とても難しいですがちょくちょく流出したりしますので、開発機やTEST機が市場に回った時に運よく搭載されていれば抽出すれば入手でき、他の同プラットフォーム機で利用が可能です。

  • Manufacturering HBOOT (MFG HBOOT)

このHBOOTを搭載していると、HBOOTの画面上に「MFG」と表示されます。

あまり聞かないのですが、存在しているので記載しています。

基本的にはENG hbootと同じなので説明は省きます。

  • S-OFFチーム自作HBOOT(Moonshine/DirtyRacun/LazyPanda/Revolutionary/AlphaRevなど)

このHBOOTを搭載していても、HBOOTの画面上には「SHIP」と表示されます。

ですが、上部に見慣れない名称が記載されています。

このHBOOTはSHIP HBOOTをベースに、ENG HBOOTに近い機能を搭載したHBOOTとなっています。

基本的にS-OFFツールの作者達が作成しており、有志による改造と言う感じです。

ENGのoemコマンドは利用できませんが、アンロックせずにflashが利用出来たり、radioをflashコマンドで利用が可能となっています。

機器のバージョンタイプ(開発段階表示)


HBOOTには開発段階表示が序に記載されており、機器のコードネーム(デバイスネーム)の右に記載があります。

最終市場配布HBOOTには基本的に「PVT」となっています。

この記載は変わるごとに開発完了の段階を表しており、以下のようになっています。(解る範囲です・・)

  • XA – 不明
  • XB – 不明
  • XC – 不明
  • EVT – 研究開発機
  • DVT – 専用機の開発モデル
  • CVT – オペレーター・キャリアへのサンプル機
  • PVT – 量産機(PVT1:量産期にバッチ適応後の生産機)

HBOOTの流用について


HBOOTの流用はなんとなく解るかと思いますが、同じプラットフォームであれば基本的には可能です。

ですが例外として、数点有ります。

同プラットフォーム名でも、HBOOT内に記載されているデバイスネーム、ボードネームなどが一致しなければ起動できなくなります。

例えば、HBOOTは日々バージョンが上がっているのですが、プラットフォーム名HBOOT-8260のENG hbootが現在流出しています。

この2013/02/05現在最新のHBOOT-8260の機種はざっと以下の通りですが

  • Sensation : PYRAMID (PG58100)
  • My touch 4G : DOUBLESHOT (PG59100)
  • EVO3D CDMA : SHOOTER (PG86100)
  • EVO4G+ : RIDER (PG86200)
  • EVO3D GSM : SHOOTER_U (PG86300)
  • EVO3D KDDI : SHOOTER_K (PG86400)
  • EVO3D ChinaTelecom : SHOOTER_CT (PG86500)
  • One S (S3) : VILLEC2 (PJ40200)

開発状況によって、想定されていない時点でのHBOOTバージョンではデバイスネームが記載されていません。

一番解りやすいのはSHOOTER_Kですが、この機種はHBOOT-8260のプラットフォームが最初にビルドされた時には開発を想定していませんでした。

ですので現在流出しているENG HBOOTのバージョンがとても古い事により、HBOOT内にSHOOTER_Kのデバイスネーム、ボードネームの記載が無く、ENG HBOOTは利用できません。

FASTBOOTモード

fastbootモードを選択し、PCと接続するとPCでfastbootコマンドが利用可能になります。

fastbootのコマンドは一般的なboot/flash/等に加えて、HTCのみでのコマンドのoemと言うものがあります。

fastbootのoemコマンドはS-OFFでないと通らない物が多く、ここでは様々なコマンドがあります。

自分の機種のoemコマンドの種類はfastboot oem ?で確認しましょう

プラットフォーム : HBOOT-8064のHTC J butterflyで通したもの

SHIP HBOOT

ENG HBOOT

command list
dmesg
last_dmesg
clearaspflag
refurbish
get_identifier_token
checkKeycardID
get_tamper_flag
checkSbl1
checkHWSecurity
enter
keytest
heap
boot
reset
powerdown
rebootRUU
heap_test
erase_phone_storage
erase_nfc_record
gotohboot
resetgift
ats
rtask
task
enableqxdm
gencheckpt
readmeid
readpid
writepid
readcid
writecid
readimei
writeimei
readsecureflag
writesecureflag
ddr2gbh
ramdump2gbh
ddr2gstatus
get_temp
writemeid
lock
readusername
writeusername
resethtcdebugflag
load_emmc
check_emmc_mid
read_mmc
load_modem_emmc
get_wp_info_emmc
send_wp_info_emmc
get_ext_csd_emmc
get_sector_info_emmc
command list
mb
mh
mw
ew
eh
eb
mmu
ram_test
jump
test
sdtest
eraseconfig
writeconfig
readconfig
writesku
readsku
rflash
tflash
block_test
partition_test
rbchk
erasesd
btrouter
onesegrouter
tdmbrouter
nfcrouter
nfcreader
nfccard
nfcversion
nfcmodel
nfcdl
nfctransaction
felicahelp
felicaponhigh
felicaponlow
felicacenhigh
felicacenlow
felicarouter
felicachipidm
felicareader
felicacard
felicaversion
felicasetreg
felicasetparam
felicasetedcreg
felicagetreg
felicagetparam
felicachkpin
cir_fwup
snfchselhigh
snfchsellow
snfcversion
snfccard
snfcreader
snfcsetparam
snfchwreset
tick
heaptable
sysinfo
emapi
emapiTest
emapiCountryID
emapiWlanMac
emapiSetDefCal
emapiReadCal
lr
imgcrc
resetautoimage
resetpreferdiag
resetRUUflag
writeserialno
readserialno
battcheck
battinfo
enter
gotofastboot
writemid
usbtestmode
eraseWifiFlash
erase
readmbserialno
listpartition
erasebcid
writebcid
readbcid
eraseColorID
writeColorID
readColorID
fmrouter
fmtx
resetuP
bdaddress
readbdaddr
wMfgTp
rMfgTp
emptypagecheck
saveprt2sd
savemem2sd
savefb2sd
emapiInit
emapiChannel
emapiBand
emapiRate
emapiRateset
emapiCountry
emapiTXpwr1
emapiPkteng_start
emapiPkteng_stop
emapiOut
emapiFqacurcy
emapiCrsuprs
emapiUp
emapiDown
emapiMpc
emapiCounters
emapiVersion
emapiEtheraddr
emapinRate
emapiPhy_forcecal
emapi2gRate
emapi5gRate
emapiMimo_bw_cap
emapiMimo_txbw
emapiChanspec
emapiRevinfo
emapiSetIrqPin
usblog
bkflash2emmc
fl
loaddiag
lnb
init_a1026_fw
checkKeyCard
loopback
spitest
i2ctest
pmic8921_led_test
pmic8921_haptic_test
gpiow
gpior
clock
i2cr
i2cw
i2ctest
ulpi
changeCid
powertest
read_l2_acc_fuse
ltetest
sdio_loopback
sdio_setsize
sdio_readblk
sdio_writeblk
sdio_readblk
sdio_dumpreg
get_mdm9k_serial
clear_mdm9k_serial
set_mdm9k_serial
update_prkey
update_wvkey
set_deviceid
update_dpkey
emmc_boot
8x60i2cr
8x60i2crNoAddr
8x60i2cwNoAddr
8x60i2cw
poweron
poweroff
setvol
spi
fat
pmgpiow
pmgpior
8821vregon
8821vregoff
8821vregw
8821vregr
8821vregmodew
8821vregmoder
8821vregdump
8821w
8821r
8921vregon
8921vcinoff
8921vregoff
8921vregw
8921vregr
getvol
gpiodump
8921gpiodump
8921mppdump
8921vregmodew
8921vregmoder
8921vregdump
8921w
8921r
mipi_test
chargeron
chargeroff
adc
readsimlocktype
enablesimlock
addsimlockcode
clearsimlockcode
listsimlockcode
clearunlockrecord
lite_heap_test
vibrate_test
getrtc
setrtc
getrtcalarm
setrtcalarm
pgfs
bumpclk
acpuclk_get
acpuclk_set
rpmclk_set
rpmclk_get
oschalt
tz_req
blow_efuse
blow_qfuse_cfg
dump_tzlog
readjtagdisableflag
writejtagdisableflag
update_emmc_partition
test_emmc
sector_erase_emmc
fat_format_emmc
init_emmc
reinit_emmc
write_mmc
read_sandisk_fw
read_boardinfo
write_prot_test
set_enh_area_emmc
dmesg
last_dmesg
refurbish
get_identifier_token
checkKeycardID
get_tamper_flag
checkSbl1
checkHWSecurity
enter
keytest
heap
boot
reset
powerdown
rebootRUU
heap_test
erase_phone_storage
erase_nfc_record
gotohboot
resetgift
ats
rtask
task
enableqxdm
gencheckpt
readmeid
readpid
writepid
readcid
writecid
readimei
writeimei
readsecureflag
writesecureflag
ddr2gbh
ramdump2gbh
ddr2gstatus
get_temp
writemeid
lock
write_secsetting
read_secsetting
readusername
writeusername
resethtcdebugflag
load_emmc
check_emmc_mid
read_mmc
load_modem_emmc
get_wp_info_emmc
send_wp_info_emmc
get_ext_csd_emmc
get_sector_info_emmc

上記の例のようにHBOOTの種類によってOEMコマンドの量は変わります。

PLATFORMやHBOOTバージョンごとにコマンドは違うかと思いますが、大体は同じかと思います。

RECOVERY

これを選択すると、リカバリーモードを起動することができます。

純正状態のリカバリーを起動するとこのような画面になりますが、この状態で「音量上+電源ボタン」を押すとリカバリー表示が出ます。

操作方法は、音量で上下、電源ボタンで決定となります。

2011年度機以前 – EVO3D(ISW12HT)

2012年度 – HTC J(ISW13HT)

 

– Reboot system now

  • 再起動を行います。

– Apply update form sdcard

– Apply update from external storage

  • SDカード内のアップデート(OTA)を当てます。(S-OFFのみ)

– Apply update from internal storage

  • 内臓メモリ内のアップデート(OTA)を当てます。(S-OFFのみ)

-Apply update from cache

  • キャッシュ内のアップデート(OTA)を当てます。(S-OFFのみ)

– Wipe data/factory reset

  • データ領域を消去するのと、初期化を行います。

(HBOOTのFactory Resetを選択すると、内臓メモリ搭載機の場合の内容を消去してしまいますが、こちらは消去されないため重宝します。)

– Wipe cache pertition

  • キャッシュ領域を消去します。

これを使用すると、データ領域等の不良で起動が不可能になった状態などに初期化をすることが出来ます。

ここでは、標準のリカバリーモードの説明のみですがアンロックを行っていると「ROM焼き」や様々なことが出来るカスタムリカバリーと言う物を導入することによりこの標準リカバリーの代わりに使うことが出来ます。

HTC機の起動時の動作マップは大雑把に以下のようになっています

自分の理解している物のみ機能を記述しています・・、情報提供をして下さる方、間違っているよと言って下さる方ははコメント欄にてコメントを頂けるととても嬉しいです><

2012/11/22/1:36 詳細追記

2013/02/05/1:24 詳細追記、リニューアル