URoad-Home2+を分解してみた5~ファームウェアを改造~

投稿者: | 8月 31, 2023

はじめに

前回の記事でNANDの吸い出しをしました。そこで今回は吸い出したファームウェアを改変して見ようと思います。行っていることはcramfsの編集です。
URoad-Home関係の記事とその概要の一覧はこちら

やること

/etc/passwdを改変してパスワードを無効にする

改造ファームウェアの作成手順

この手順を踏むのは面倒だと思うので、完成したmodified-swapped.binをダウンロードできます。

1. 前回の記事で作成したextracted-swapped.binをマウントする

sudo mount -t cramfs extracted-swapped.bin 適当なマウントディレクトリ

みたいな感じで適当にマウントします。

2. マウントした物の中身をコピーする
適当なディレクトリを作ってコピーします。/dev下もコピーしないと行けないため、-fオプションを付けます。

sudo cp -f 適当なマウントディレクトリ 適当なディレクトリ

3. コピーした中から/etc/passwdを開く

vim 適当なディレクトリ/etc/passwd

4. /etc/passwdを変更する
元々はこんな感じです。binやdemonはroot権限はないですが、素のファームウェでもログイン可能です。

URoad-Home2+を分解してみた5~ファームウェアを改造~
cramfs passwd shadow
TEC-101
元々のpasswdファイル

xとなっている部分がパスワードのハッシュ値が保存されている/etc/shadowを参考しているという意味なので、xをvimとかを使って消します。

URoad-Home2+を分解してみた5~ファームウェアを改造~
cramfs passwd shadow
TEC-101
改変後のpasswdファイル

5. cramfsを作成する

mkcramfs 適当なディレクトリ modified.bin

6. 作成したcramfsをビッグエンディアンに変換する

cramfsswap modified.bin modified-swapped.bin

これでファームウェア(modified-swapped.bin)は完成です。
元のファイルは20MBあり、作成されたファイルは9.6MBしかありませんが、その差は全部0で埋まっているだけなので、問題ありません。

書き込み

0. 事前準備
前々回の記事で行ったのと同じようにLAN周りの設定を行います。今回もtftpサーバはWindows上のC3Demonを使用していますが、LinuxやMacの場合はtftp-nowがおすすめです。

1. U-Bootのコンソールに入る
いつも通り連打します。checksum missmatchのループ時は、一回電源を切って、UARTを外して電源を入れて、しばらくしたらUARTに入ってリセットボタンを押してキーボードを連打すればU-Bootに入れます。

2. TFTPで転送

tftpboot 0x81000000 modified-swapped.bin

tftpでURoad-Home 2+に転送を行います。

3. NANDをerase
ミスると起動しなくなったりすると注意!
今回の作成したファームウェアは

nand erase 0x600000 0x1400000

4. NANDに焼く

nand write 0x81000000 0x600000 0x1400000

tftpの転送のログの最後の方を見るとBytes transferred = 10043392 (994000 hex)と書いてあるので、このhexの方の値を書き込むサイズに採用します。99400の部分は改造した内容によって異なってくると思います。

nand write 0x81000000 0x600000 0x994000

5. 再起動

reset

ログイン

rootでログインできます。これで晴れて色々いじれます。

URoad-Home2+を分解してみた5~ファームウェアを改造~
TEC-101
MODACOM
MODA COMMUNICATION
root リバースエンジニアリング
rootでログイン!

ログインしてみての考察

とりあえずtelnetが使用できます。telnetdで起動できます。
nvコマンドが存在しており、nv -pとかでnvramの中身を見ることができます。見ては行けないようなログインユーザの存在が確認できます。
/etc/All_Dump.shがあってこれを実行すればNANDのダンプを自動で取ってくれてtftp経由でアップロードしてくれるっぽいです。
ip aの実行結果はこんな感じです。やたらとインターフェイスが多いです。br0はeth0とeth1のあぢあだと思います。eth2はWiMAXモジュールのものです。ath0とath1はなんですかねぇWiFiの仮想インターフェイスとかなんですかねぇ

URoad-Home2+を分解してみた5~ファームウェアを改造~
TEC-101
ip a
ath0 ath1
ip aの実行結果

/proc/mtdの結果をまとめたところこんな感じです。

dev:    size           erasesize   name          offset          size
mtd0: 00080000 00020000 “u-boot”        0               512k
mtd1: 00080000 00020000 “u-boot-env” 80000        512k
mtd2: 00100000 00020000 “reserve0”    100000        1m
mtd3: 00400000 00020000 “linux”           200000      4m
mtd4: 01400000 00020000 “rootfs”          600000     20m
mtd5: 00400000 00020000 “linux2”         1A00000     4m
mtd6: 01400000 00020000 “rootfs2”       1E00000    20m
mtd7: 00100000 00020000 “nvparam”     3200000     1m
mtd8: 00100000 00020000 “nvparam2”   3300000     1m
mtd9: 01800000 00020000 “update”        3400000     24m
mtd10: 00100000 00020000 “caldata”     4C00000   1m
mtd11: 00100000 00020000 “reserve1”   4D00000    1m
mtd12: 00400000 00020000 “linux3”       4E00000    4m
mtd13: 01400000 00020000 “rootfs3”    5200000     20m

GPIO周りは、gpioappというコマンドが入っていて、それで、入出力設定、High/Low設定ができるっぽいです。解析結果はこんな感じでした。変更するとフリーズするものがちょくちょくありました。電源は多分別で電源スイッチと直結してます。

URoad-Home2+を分解してみた5~ファームウェアを改造~
TEC-101
MODACOM
MODA COMMUNICATION
gpioapp
gpioappコマンド

4・・・resetボタン(0で押される)
16・・・WPSボタン(0で押される)
11・・・WiFiの青LEDのON(0)/OFF(1)
17・・・WiFiの緑LEDのON(0)/OFF(1)
18・・・USB(WiMAXモジュール)の電源ON(1)/OFF(0)
19・・・LAN2のLEDのON(0)/OFF(1)
20・・・LAN1のLEDのON(0)/OFF(1)
21、22・・・LEDが実装されていない下側2つのGPIO?

終わりに

とりあえず色々できたので面白かったです。本格的にリバースエンジニアリングになってきました。USBを増設したりしてみたいです。GPIOの関係も掴めたので、ラジコンもできそうですね。次回はOpenWRTのインストールですかね
URoad-Home関係の記事の一覧と概要はこちら

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)