Avaota-SBCというDDRMiniにかなり近い構成のボード用にビルドしたバイナリが断片的に動くので、これを使ってファームウェアを吸い出しつつ、逆アセンブルを続けているところではあります。
やったーeMMCの中身をSDカードにまるっと書きだすプログラムができたぞー… pic.twitter.com/Bute6RmR34
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 17, 2024
・UART0(PB9,PB10)が明確にデバッグ用に出ているがLinuxの先ではDTSで無効化されているのでほとんど何も出てこない。が、最初のBOOTの間はdの先行入力でちょっとだけメッセージが出る。
・BOOT0 (emmc上0x2000)がboard_initした後、MMCからTOC1パッケージを読み込んでいる。このへんはこの二つのページの機材がよく似ている。
Allwinner H700 Firmware extraction - KNULLI Wiki
Teclast P85T - linux-sunxi.org
・上にあるように、u-bootのエリアがあるけど実はu-bootじゃないのかな、と思って読み込んで逆アセンブルしているけど、本当にu-bootっぽい。
「U-Boot 2018.07-00009-g40a0e96-dirty (Jul 24 2024 - 13:19:23 +0800) Allwinner Technology」
このツリーは、ベースの2018に山ほどのパッチをしてようやく動かしているものらしい。
・このTOC1がemmcのbootパッケージから!ANDROIDを読んで起動している
・その次のパーティションがrootfs、ここにゲームもROMも入っている
・ゲームのROMは独自の暗号化がされている。
・rootfsを書き換えるだけである程度動かせるとは思うけど、現状何も出力できないしシェルにログインできないので大変やりにくい
・どうにかシェルを使うためシリアルコンソールの有効化を試みている
・UART0はLinuxのDTSで無効化されているので起こすのは難しい
・配線を辿るとUART2もつながっている。
うーん、これPB9,10が出てるってことはPB0-6ぐらいが出てる可能性あるな
— ひろみつ@技術書典お07 カラオケハック本 (@bakueikozo) September 20, 2024
PB0,1が出るならuart2が生きてるんだよな pic.twitter.com/kB3e9OCcAX
・ENVのパラメータをいじればttyS2でコンソールが起きるはず
・ENVをいじって書き戻そう!
・書き戻した
・壊れた。
壊れた。
書き戻す場所を間違えたのか、値がおかしいのか。
もっかいeMMCのフルダンプを取ってどこを壊したのか調べてみる。
遠い。