Android 刷機包(卡刷) 中 system.new.dat 的 re-pack工具: rimg2sdat

2013年鸚鵡買了人生第一隻 Android 手機:小米2S 32GB
新機入手就開始刷機和ROOT,從 JLB15.0 玩到 JLB21.0 時就開始動手改卡刷包

就這樣一路改一路玩到了換小米5
搶到陶瓷尊享版後很開心的下載官方卡刷包準備動刀,點開卡刷包時卻矇了

沒有 system 資料夾! 沒有 system 資料夾! 沒有 system 資料夾!

看了一下檔名和檔案大小,大概就是它了: system.new.dat
經過 Google 大神介紹到 xda 論壇拜碼頭,找到了這篇文章 Unpack/re-pack android DAT files
馬上下載工具並安裝 Python ,終於順利的 unpack 了一個 raw image

mount 起來修修改改完準備 re-pack 的時候卡關了
要先用 img2simg 將 raw image 轉換成 Android sparse image 之後才能再轉成 system.new.dat
又不想 git 一堆 andorid source 回來編譯,只為了取得 img2simg 這工具

心想,既然 system.new.dat 可以直接轉 raw image,那直接反向轉回去就好啦!?

完全沒接觸過 Python 還是把 sdat2img.py 開起來,只是閱讀起來異常艱澀
邊看邊對照 unpack 時輸出的資訊,大概抓到原理後就用 PHP 開始土砲

把自己 re-pack 產出的 system.new.dat 和 system.transfer.list 用 xpirt 的 sdat2img 再 unpack 一次
比對前後兩個 raw image 的 sha1 checksums 相同後,確認土砲成功

最近因為需求,自己架設 shadowsocksR 時感受到 Python 的威力
打算要來學 Python,就拿 rimg2sdat 來練習囉
原本只支援 version 3 順便改成支援 verison 1 ~ 4
也加上了 brotli 的壓縮功能,可以轉出 Android 8.1 新支援的 system.new.dat.br 檔案

 

先來看一下 transfer.list 版本的資訊

  • version 1: Android Lollipop 5.0
  • version 2: Android Lollipop 5.1
  • version 3: Android Marshmallow 6.x
  • version 4: Android Nougat 7.x / Oreo 8.x

rimg2sdat.py 參數說明

 

rimg2sdat.py 使用範例

 

環境需求:

  • Python 2.7.5 以上都支援
  • Linux / Windows 皆可
  • Python Package: brotli 或 brotlipy (使用 壓縮功能 才需要,用 pip 安裝即可)
    Windows 環境使用 brotli 會發生 DLL 載入錯誤,請安裝 brotlipy
    安裝發生錯誤可到 這裡 選擇對應版本的檔案來安裝

下載:
GitHub:  rimg2sdat