2018/05/24(木)Huaweiスマホの文鎮(Brick)からの脱出方法メモ

HUAWEI nova liteをうっかり文鎮化してしまったので、復旧方法(復旧手段)のまとめメモ。ちなみに海外では文鎮化のことを「Brick」(レンガ化)と言うようです。

文鎮化の経緯

  1. カスタムリカバリを入れるためにbootloaderをunlockする
  2. root化したり色々いじる。開発者モードとかもいじる。
  3. いつのまにかFRP Locked(OEMロック状態)になっていることに気づく
  4. FRP Lockedだと fastboot flash できず、EMUI 5.xではOEMロック解除に再度ブートローダーのロックが必要だと気づく。
  5. リカバリも/bootも/systemも改変された状態のままブートローダを再ロックしてしまう
    fastboot oem relock 0421234567897012
    
  6. 「secboot」が有効になり、改変された/bootや/systemやTWRPは起動しなくなる。

どうして復旧できないのか

  • OEM Lockedのため「fastboot oem unlock」が拒否(Command not allowed)される。
  • Phone/OEM Lockedであるため、fastboot flashができない。
  • EMUIリカバリは起動するものの、オンラインリカバリは(なぜか)失敗する。

まさに八方塞がり状態です。

bootloaderもFRP/OEMもロックされていない場合

もしも、fastboot画面で「PHONE unlocked」で「FRP unlocked」ならば復旧は簡単です。fastboot flashで公式OTAイメージ(Stock ROM)を焼くだけで復旧できます。

  1. USB接続かつVol-/電源で起動し、fastbootの画面に移行する。
  2. スマホの型番(ビルド番号)を調べる。
    C:\>fastboot oem get-build-number
    ...
    (bootloader) :PRA-LX2C635B121
    OKAY [  0.016s]
    finished. total time: 0.016s
    
  3. Firmware databaseから対応するファームウェアを検索しダウンロードする。今回の場合は「PRA-LX2C635B121」で調べる。
  4. zipを解凍して UPDATE.APP 取り出す。
  5. Huawei Update Extractorを使用し、Factory Imageを取り出す。
  6. 取り出したイメージを fastboot を使用して書き込む。
    fastboot flash boot boot.img
    fastboot flash system system.img
    fastboot flash recovery recovery.img
    

これで再起動すれば復旧するはずです(多分)。リカバリモードに入ってデータの初期化が必要になるかもしれませんが。

SDカードからの復旧

Huawei EMUIには、SDカードからアップグレード(OTAファームウェアの焼き込み処理)をする機能が付いています。

  • 上を参考に、対応するFirmwareを見つける
  • zipを解凍して出てきた UPDATE.APP をSDカードの /dload/UPDATE.APP に置く。
  • リカバリーモード(Vol+/-/電源同時押し)で再起動する。
    • 【注意】USBは刺さないこと。画面が切り替わるまで「Vol+/-」は押したままにすること。

リカバリーモードが正しく機能する状態ならば、これで復旧するはずなのですが、エラーになってダメでした。システムが少しでも変更されていると、この方法はダメみたいですね。

Software install failed!
Get help from: http://www.emui.com/emotiondownload.php?mod=restore

OEM/FRP unlockする

USBを接続し、Vol-と電源を押してbootloaderを起動すると「FASTBOOT&RESCUE MODE」になります。実はfastbootモードから直接FRPロックを解除することも可能なようです。しかしながら解除コードが必要になります

この解除コードはIMEIから何らかの法則で計算される16桁*1の文字列で、コードが分かれば以下のように入力することでFRP lockを解除することができるようです。*2

C:\>fastboot oem frp-unlock 1234567890ABCDEF

さてどうやって解除コードを入手するかという話ですが、「FRP Unlock Huawei IMEI」などの単語で検索すると、解除コードを売っている海外のお店がいくつか見つかります。安い所だと$2~$5ぐらいで見つかりますが最低チャージが$30~$50という罠があります。高いところだとDC Unlockerの€15ぐらいです。

本当に解除できるかは不明。しかも、DC-Unlockerの説明を読んでいると、

FRP unlock does not change FRP lock status in fastboot!

とあるので、fastbootのFRP lock(OEM Lock)は解除できない模様。紛らわしい……。

*1 : 16進数16桁なので8byte/64bit

*2 : もちろんこのコードは適当なので「password matching failed!!」とエラーになります。

Hisuite復旧モード

fastbootの画面には、復旧用のリカバリイメージを転送して起動する手段があります。

公式ROMのUPDATE.APPの中から RECOVERY.img を取り出します。これをレスキューイメージとして転送して起動させます。

C:\>fastboot flash rescue_recovery RECOVERY.img
target reported max download size of 471859200 bytes
sending 'rescue_recovery' (35554 KB)...
OKAY [  1.092s]
writing 'rescue_recovery'...
OKAY [  0.016s]
finished. total time: 1.108s

C:\>fastboot getvar rescue_enter_recovery
(bootloader) This is sec phone!!
rescue_enter_recovery: start to hisuite mode!
finished. total time: 0.406s

こんな感じで、USBを接続してHiSuiteを使うリカバリを行うモードになります。この状態でアップデートイメージを送信する無償ツールとして「Huawei Update MultiLoader Tool」があります。

これを使い UPDATE.APP をスマホにダウンロードさせてみたのですが、dload からのインストールと同様に失敗しました。この方法もシステムが少しでも変更されていると失敗するようです。

「flash rescue_recovery」を使ってイメージを送り込んで起動できるなら、カスタムリカバリを起動させればいいのではないかと思うかも知れません。しかし、secbootという仕組みにより起動できるイメージは限られていて、TWRPイメージを送り込んでも起動時に怒られてしまいます。

強制リカバリツール

Kirin(HiSilicon)のHuaweiスマホには、ロック状態のされたスマートフォンでも、bootloaderから強制的にファームウェアを焼き込むツールが存在します。ただし有料で、いいお値段します……。

これらのツールは次の「bootloader認証」を使って強制的にロック解除をしているようです。

bootloader認証(bootloader backdoor)

この動画を見るとHuaweiのbootloaderにはバックドアが仕掛けてあって、認証を通すことで強制的に Phone Locked を解除できます。これにより強制的にファームウェアを書き込めるようになります。

fastboot oem hwdog certify get
...
(bootloader) FBLOCK3e8743a2089e73b9
OKAY [  0.016s]
finished. total time: 0.016s

として認証モードに入り、FBLOCK以降の16byte文字列(毎回違う)を1024bitで署名(RSA?)128byteのデータファイル(Unlock.bin)を生成し、送り返せば良いようです。

fastboot flash slock Unlock.bin   <-- 128byte Auth File

署名と思われるので秘密鍵か何かで暗号化(ハッシュ化)するだけなのですが、もちろん秘密鍵なんて分かりません。ただ、署名すべき元データは色々解析してわかっていますので、どなたか鍵探しに挑戦してみませんか?

# Original data = d(128byte)
+00h 00 01 FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+10h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+20h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+30h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+40h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+50h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF
+60h FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF 00
+70h 33 65 38 37 34 33 61 32 - 30 38 39 65 37 33 62 39
#
# 70h-7fh: FBLOCK 16byte string (example "3e8743a2089e73b9")
# unlock.bin(128byte) = unknown_func(d)
#
# "unlock.bin" generated by unknown way;
# May be RSA Signature or 1024bit-HASH or other.
  • 最後の16byteは「FBLOCK」に続く16byteの文字列です。
  • これ単純に連結して128byteの文字列とします。そのまま1024bit整数とみなして処理すれば問題ありません。
    • 間違えのないように書いておくと、最上位バイトは+00hで、最下位バイトは+7Fhです。

認証モードを終わらせる。

fastboot oem hwdog certify close

結局

bootloader認証を解析すべく、リバースエンジニアリング(RE)に挑戦しましたが敗れ去りました(苦笑)。RE自体は楽しかったですけどね、さすがに暗号鍵を探すのは難しい。

結局、DC-Phoenixに€15(2000円)ほど課金して復旧させました。これが一番楽だと思います。

ちなみに、この際ビルド番号まで一致させたファームウェア(FullOTA)が必要になります。どうやら boot.img がフォームウェアのどこかに記録されているビルド番号(例:PRA-LX2C635B121)と一致しない場合正常起動しないようになっているようです。

余談

他社のスマホだと強制的にfirmwareをflashするツールとか、デベロッパーモード(EDL 9008)にして書き換えるとか、SIMロックやFRPロックを強制的にunlockするとか色々あるのですが、HuaweiのHiSilicon製スマホ(KIRIN)はまだその辺充実してないのか、プロテクトが頑丈なのか、突破するのは難しいようです。

FRPロック(OEMロック)状態になると以下のことができなくなります。

  • ファクトリーリセット(FRP = Factory Reset Protection)
  • ファームウェアの書き換え(Flash)
  • ブートローダーロックの解除(PHONE Lockの解除)
  • fastbootによるサードパーティ製(非公式)boot.imgやリカバリの起動

ただただ面倒に感じるこの仕組みは実は盗難防止のためのもので、Google Accountで使用状態になっているスマホを強制的に初期化して売ったりすることを防止するシステムです。

その割には既に解析されていて、いくらかお金を払えば誰でも解除できてしまう現状には矛盾も感じます。

メモ

色々調べる方法。

# 販売元の国
fastboot getvar vendorcountry
# 製品型番
fastboot oem get-product-model
# シリアルナンバー/IMEI
fastboot oem get-psid
# ビルド番号
fastboot oem get-build-number
# lock情報
fastboot oem get-bootinfo
fastboot oem lock-state info
# バッテリィーチェック
fastboot oem battery_present_check

リンク

復旧手順の参考情報