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は起動しなくなる。

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

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

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

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

もしも、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
    fastboot erase userdata
    fastboot erase cache
    

これで再起動すれば復旧するはずです(多分)。

SDカードからの復旧

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

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

リカバリーモードが正しく機能する状態ならば、これで復旧するはずなのですが、エラーになってダメでした。FRP LOCKEDだとダメなのかも……。

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

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 からのインストールと同様に失敗しました。FRP Lock(OEM Lock)のせいかも知れない。

「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

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

# 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) = d^Secret (mod M) 
# Secret and M is unknown. "^" is pow.
#
# "unlock.bin" generated by unknown way;
# May be RSA Signature or 1024bit-HASH or other.
  • 最後の16byteは「FBLOCK」に続く16byteの文字列です。
  • これ単純に連結して128byteの文字列とします。そのまま1024bit整数とみなしてRSA処理すれば問題ありません。
    • 間違えのないように書いておくと、最上位バイトは+00hで、最下位バイトは+7Fhです。
  • RSAというのは推察です。RSA署名ではなく、1024bitハッシュの可能性もありますし、他の署名形式の可能性もあります。

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

fastboot oem hwdog certify close

結局

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

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

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

余談

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

そもそもFRPロック(not OEMロック)はGoogle Account Lockとも呼ばれます。Androidを最初に起動するときGoogle Accountを入力することでロック状態になり以下のことができなくなります。

  • ファクトリーリセット(FRP = Factory Reset Protection)
  • ファームウェアの書き換え(Flash)
  • ブートローダーロックの解除(PHONE Lockの解除)
  • サードパーティ製(非公式)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

リンク

OK キャンセル 確認 その他