聲明:

手機解鎖有風險,任何因為解鎖或 root 造成的損失都與小弟無關,請不要來問我這些損失該怎麼辦,本篇文章純粹是小弟刷機的筆記。

這幾天反覆實驗幾次後得到一個結論:

  1. 14.1050.1078.36 之後的版本無法使用前天發佈的方式解鎖。
  2. 已解鎖的手機升級到 14.1050.1078.36 之後的版本無法使用 fastboot flash 刷檔案,twrp 可透過 fastboot boot 使用。

所以除非你買得到第一批貨,或者手機還沒有升級,才能使用先前提的解鎖方法。

那新版的手機就只能等官解了嗎?當然不!

最近剛好在路上踢到 ZE554KL 的 raw 檔,由於先前偷拿過 ZenFone 3 的 raw 檔工具嘗試刷 ZE554KL 失敗,推測應該有新的刷機程式,果不其然在這包檔案裡面看見了新東西。經過幾次實驗後發現,raw 檔的格式雖然有變更但不難理解,隨手製作的測試檔案也可順利刷入,於是花了點時間把之前的 abl 與 frp unlock 打包,成功製作出新版解鎖工具!:)
檔案可由此取得:

https://androidfilehost.com/?fid=745425885120759615

建議手機先進入設定還原原廠,畫面出現清除中或者 erasing 時按著音量大不放讓手機重開到 bootloader,這樣之後重新設定時就可以跳過 frp 的檢查 (不嫌麻煩可以跳過這步)
解開檔案後手機進入 bootloader,點選 ze554kl_auto_flash_raw.bat 便會把解鎖檔案刷入,手機自動重開機一次後進行解鎖,解鎖後再自動重開機出現如下的畫面:

由於 bootloader 沒有接上 key event,所以你怎麼按音量鍵都不會像 ZenFone 3 一樣出現選單。不過沒關係,讓手機開好機設定完成後,你可以直接回到 bootloader 下指令開啟 twrp,建議使用新版避免一些奇怪的狀況:

https://androidfilehost.com/?fid=673368273298982906

至於 raw 的格式這邊做個筆記,我們先來看開頭的幾個 bytes:

開頭 48 bytes 為 header:

struct raw_header {
    unsigned char project[12];
    unsigned int unknown;
    unsigned int dummy_1[2];
    unsigned int num_of_files;
    unsigned int dummy_2[5];
}

比較重要的是 num_of_files,代表這個 raw 檔案會解開多少檔案。header 之後 10192 bytes 存放這些檔案的 metadata,每筆資料為 96 bytes,圖片中藍色底的區塊就是一筆資料,格式如下:

struct raw_entry {
    unsigned char partition[32];
    unsigned char file_name[32];
    unsigned long file_size;
    unsigned int dummy_1[2];
    unsigned char cpu_type[8];
    unsigned int crc32;
    unsigned int dummy_2;
}

第一個 partition,對應到的是 fastboot flash 的 partition,比如 boot、recovery、system…

第二個 file_name,代表 raw 檔案解開後存在磁碟上的名稱,也就是 fastboot flash 中的 filename,比如 boot.img、recovery.img…

第三個 file_size,代表這個檔案的大小,因為 raw 是一堆檔案連接起來的巨大集合體,所以要指定 size 才能正確解開。
後面是 00000000 00000000 目前沒用途。

第四個 cpu_type,會有三種值 (以 ZE554KL 來說):ALLSDM630SDM660,在解開 raw 檔案之前程式會對手機下指令 fastboot oem CPUInfo 取得當前 CPU 型號,如果該檔案為共用的則填入 ALL (比如 boot.img) 如果只給某個型號使用則填入型號 (比如 abl_660.elf)。在 ZenFone 3 使用的 raw 這邊沒有填入值。

最後為 crc32,代表這個檔案的 CRC32 值,用來檢查解開的檔案是否正確,比如說 gpt_both0.bin 的 CRC32 在上面顯示的是 EA32473C,那麼實際上 CRC32 會是 3C4732EA。

整個 raw 開頭的 10240 bytes 就會是 raw_header + raw_entry*raw_header.num_of_files 的內容,後面則是依據這邊的順序將檔案一一連接在後面。

知道格式後要製作解鎖用的檔案就容易許多:把兩種型號使用的 abl 與frp_unlock 檔案包起來,最後使用自家的工具把 raw 寫入,手機便可以解鎖啦。之前有人問說為何要寫入舊版的 abl?因為新版的 abl 在解鎖時會詢問是否確定要解鎖會破保固 blah blah,但手機卻無法使用音量跟電源進行選擇,唯有舊版的問都不問直接解開,可以看出為了防堵解鎖公司不遺餘力 (?)
當然也是可以選擇拆開 ze554kl_flash_raw.exe 或搭配 USB 監控軟體看看程式如何把檔案刷入,或許可以做出更 general 的刷機工具。 :)

Happy Hacking !

Comments

comments powered by Disqus