system.imgの改変方法

2023年8月30日

MTKシリーズのファームは基本このsystem.imgを含め
boot.img
cache.img
recovery.img
secro.img
userdata.img
が入ってきていることが多い。場合によってはramdisk.img等々もあったりする。

で今回改変に挑んだのがsystem.img

ネットの文献を漁り、日本語、英語問わず調べました。
ちなみにその中で参考になったサイトはこちら

MOMO9 N70双撃 SNS rag007さんの日記

taka2の日記:

monline

i'm not dead, so ... simg2img の simg とは何か? (make_ext4fs コマンドなど)

いずれも大変参考になりました。ありがとうございました。
ただ、私の環境ではスマホで動くsystem.imgを作成するためにはもう一工夫必要でした。

実際の作業
手順としてはいたって単純で
①system.imgを解凍
②そのフォルダ(ディレクトリ)の中のCallerIdSysH_20151109.apkをディレクトリごと削除
③repackをしてスマホに書き込み。
という感じです。

ではまずsystem.imgの解凍方法
Mtkシリーズに限らずandroidはGoogleが作成したandroidSDKで作られています

そしてそのsystem.imgで採用されているのがsimg。 sparse imag(スパ―ズイメージ)フォーマット

読んで字のごとくですが、androidはlinuxカーネルを使用したOSです。
このlinuxが採用しているディスクフォーマットが現在はEXT4というもの。
このEXT4を発展させたものがsimgというもの。EXT4の書き込まれていない空の部分を圧縮している

まずこのsimgをEXT4にコンバートしないと中身が見られない。
方法としてはwindowsでやる方法とlinuxでやる方法があるが
windowsでやる方法は解凍はできたがその後のrepackは出来なかった。
ちなみにソフト名をあげると

Ext2explore-2.2.71
Ext4unpacker

ImgExtractor_1_3_6
FactoryTool_Pack
Android Unpack Repack adithyan25

またコマンドラインもあったが使っていない。

親和性の観点からlinuxでやるのがよいと思いvmwarePlayerにubuntuをインストールしてやることに
vmwarePlayerにubuntuをインストールまでは他のサイトに書かれているためここではインストール後から書きます。

Vmwaretoolsのインストール
まずはこれを入れないとホスト、ゲスト間のファイルの往来ができないので・・・
但しWindowsと違いひと手間かかる。

その前に注意としてvmWare Playerでは、新規OSをインストールするときに新規仮想マシン作成ウィザードで、ISOファイルを指定すると、OS簡易インストールモードになり、全自動でOSがインストールすることができます。

ですがこのOS簡易インストールモードは、全自動でOSがインストールされる反面、言語がEnglishになったり、パーティションを選択できなかったり、インストールパッケージが選べなかったり、さらにホスト・ゲスト間コピーができなかったりと、非常に不便です。

私の環境ではゲストホスト間コピーが出来ませんでした。1.7GBコピーしても表示されなかったり、容量が数キロバイトだったりとまともにコピーが出来ませんでした。

また、これを直すためには再インストールが必要で手間がものすごくかかる。
必ず簡易インストールモードを避けて、手動にてインストールしてください。
実はその方が早かったりします

そしていよいよvmwaretoolsのインストール
①CD-ROMにマウントしたvmwareTools.x.x.x-xxxx.tar.gzをホームにtmpディレクトリを作りそこへコピー。表示されない場合 再起動

② vmwareTools.x.x.x-xxxx.tar.gz を右クリックして [ここに展開する] をクリックし、展開する。vmware-tools-distrib フォルダが Ubuntu Desktop に展開されます。

③ターミナルを起動して(もし横のランチャーになかったらCTL+ALT+Tで起動)で、次のコマンドを実行して vmware-tools-distrib フォルダに移動します。

$ cd tmp/vmware-tools-distrib

④次のコマンドを実行して、vmware Tools をインストールします。

$ sudo ./vmware-install.pl

注: -d スイッチをつけてインストールできる場合はよいですがインストールせずに終了してしまう場合は上記で回答しながら進みます。Regacy・・・みたいな文言が出てきたらYを押しあとはReturn キーでOK。

 

ここまでは下準備。これからが本番
2016-04-25_202635
外部コマンドの準備
①ターミナルから $ sudo apt-get install zlib1g-dev を実行

②ext4_utils をダウンロード・インストール

ターミナルから
$ wget 'http://forum.xda-developers.com/attachment.php?attachmentid=2380988&d=1383992072' -O ext4_utils_r4.3.tar.gz
を実行

③nautilus(エクスプローラみたいなファイルマネージャ)を起動し
ext4_utils_r4.3.tar.gz を右クリック ここに展開で展開する。

ちなみにコマンドラインからでもできる。

④カレントディレクトリの移動
ターミナルから $ cd ~/ext4_utils_r4.3 を実行
$ make を実行

⑤simg2img ext2simg make_ext4fs mkuserimg.shを /usr/bin/にコピー
ターミナルから $ sudo cp -p simg2img ext2simg make_ext4fs mkuserimg.sh /usr/bin/ を実行

注)
simg2img: sparse イメージを通常のext4イメージに変換するプログラム
ext2img: 通常のext4イメージをsparseイメージに変換するプログラム
make_ext4fs: 指定ディレクトリにあるファイル群から、ext4イメージやsparseイメージを構築するプログラム

⑥sparseイメージからext4イメージへの変換およびマウント
ターミナルから
$ simg2img ~/system.img ~/system.ext4
$ sudo mkdir -p ~/mnt/ext4_sys
$ sudo mount -w -o loop ~/system.ext4 ~/mnt/ext4_sys
を順次実行
マウントされたext4_sysディレクトリにファイル郡が展開されているはず。

感染したファイルの削除
スーパーユーザーモードで nautilus を起動
ターミナルから $ sudo nautilus  を実行

~/mnt/my_system内を編集

注)
削除した場合は非表示のTrash.0も削除

修正した結果を元に、sparseイメージを再構築

ext2imgを使う方法と、make_ext4fsを使う方法の2通りあります。容量指定する場合はmake_ext4fsを使う

※ ext2imgを使う方法
ターミナルから
$ sudo umount ~/mnt/ext4_sys
$ ext2simg ~/system.ext4  ~/system-ext2simg.img
を順次実行

注)
-lオプション(1753219072): イメージファイルのディスク容量はできないようです。

※ make_ext4fsを使う方法
アンマウントせずに下記をターミナルから実行
$ sudo make_ext4fs -s -l 1753219072 -a system ~/system-ext4fs.img ~/mnt/ext4_sys/

-sオプション: sparseイメージの構築(未指定時はext4イメージを作ります)
-lオプション(1753219072): イメージファイルのディスク容量 カンマ抜くこと

1753219072の数字はwindows上のエキスプローラから原本system.imgからsparse変換したファイルの容量を指定。

但し、私の環境ではmake_ext4fsを使う方法では起動できるイメージファイルは出来ても起動できませんでした。
バイナリイメージで比較しても全然違うものができてしまっていました。
他のサイトでもほとんどがこのmake_ext4fsを使う方法でやっているのですが私の環境では無理。

といことでext2imgを使う方法で作成。
作成されたファイルをドラッグしてホストPCのVK700Xのアップデータフォルダに入れる。

2016-05-03_170437

ドラッグしたsystem-ext2simg.imgのファイル名をsystem.imgになおして、

同じファルダ内にある。CheckSum_Gen.exeを実行してSP_flashtoolでscatter.txtを読んだ時のエラーを回避する。

そしてsystemimgのみチェックを入れて上のプルダウンをDownload Onlyに合わせさらに上のDOWNLOADボタンを押す。

2016-05-03_171113

電源の切ったスマホを繋ぎ書き込みを確認。

下のステータスバーの黄色表示が進み書き込み終わると

OKマークが出る。

出たらスマホからUSBコードを外し電源オン。無事立ち上がればOK。

ちなみに決まり事ですがここに書いたことを実行して文鎮化しても責任はもてません。参考程度にして。もし実行する場合は自己責任でお願いします。

ちなみに書き込む前にExt4unpackerで読み込みできれば起動できる可能性が高くなる。

また、バイナリエディタで変換したimgを開き、selinuxと検索すると 2回目あたりに

オリジナルは赤丸で囲ったような状態となる。

2016-05-03_193039

ext2simgコマンドで変換したものが下だがこれはちゃんと起動した。

2016-05-03_193912

make_fs4コマンドで変換したものだが起動不可

2016-05-03_194723

他にもimg2simgコマンドで変換したものもダメでした。

 

基本は

①windowsでもlinuxでもまずsparsimgファイルをexit4ファイルに変換する

②linuxでイメージをマウント

③su権限でimg内を編集

④unmountして編集したexit4imgをext2simgコマンドで変換。

⑤これをバイナリエディタでキャラクタパターンを確認し、ext4_unpacker.exeで読めることを確認してから

書き込む。

こんな感じでやると、ほぼ失敗しないで済むと思う。

ちなみに他のツールも紹介

Android ROM IMG Repacker

ANDROID_IMG_REPACK_TOOLS