Upgrade to Pro — share decks privately, control downloads, hide ads and more …

電子辞書は任意バイナリの夢を見るか

 電子辞書は任意バイナリの夢を見るか

情報科学若手の会第54回 ナイトセッションLT

1f932de5b8b5ee98732fbec960399e1a?s=128

Chiharu Shirasaka

September 26, 2021
Tweet

Transcript

  1. 電子辞書は 任意バイナリの夢を見るか?

  2. 自己紹介 名前:pepepper(ぺぺっぱー) • Brain掲示板時代:例の電子辞書 • 地方公立大学生(2年) 主な制作物 • nkbin_maker •

    BrainLILO • ExplorerOpener
  3. 電子辞書 • SHARP製 「Brain」シリーズ • SoC: TMPA910CRAXBG(ARMv5)/ i.MX28(ARMv5)/ i.MX7 ULP(ARMv7)

    • RAM: 64MB/128MB • ストレージ: 内蔵フラッシュメモリ/SDカード • OS: Windows CE 6.0/ uITRON? • 追加アプリ機能 • 今回のメインテーマ (参考: https://brain.fandom.com/ja/wiki/Brain%E6%A9%9F%E7%A8%AE%E5%88%A5%E8%A7%A3%E8%AA%AC )
  4. 本題―1 Windows CEで遊ぼう

  5. なんか勝手アプリが起動しないんだけど • 2017年 PW-Sx4シリーズの発売 • 掲示板(新Part11)での報告 • 様々な憶測 • 新OS?(←この時点では偽)

    • プロテクト? • ホワイトリスト? • Index.din?(←これも偽) • こいつは困った (本題ー1はhttps://brainbbs.ddns.net/を参照すると詳細がわかりやすい)
  6. 探りを入れてみよう • なけなしの金でリバーシを購入(のちにスライドパズルも) • Index.dinは・・・× • AppMain.exeは・・・ • 最初の方は× •

    途中から〇 • 一筋の光 12の>>407 (https://brainbbs.ddns.net/test/read.cgi/edbrain/1493904613/407)
  7. EXEファイルの構造 • ヘッダーは実行に必要な情報 • アーキとかエントリポイントとか • コードは機械語 • エントリポイントは実行開始点

  8. 抜け道という名の茨の道 • チェック終端<エントリポイントなら・・・ • チェックを回避して任意の命令が置ける! • 関数アドレスの壁 • 勝手に付く初期化ルーチン •

    埋め込むプログラムのアドレス≠埋め込まれた状態のアドレス • ここで一度力尽きた(2017/11/12) • アップデータの解析に逃げる
  9. 完全勝利(2018/09/17) • 初期化ルーチンを無効化 • 正確にはエントリポイントをmain()にした • 関数のアドレスを他の機種から取得 • 動的リンカなんか知らん •

    /Windows/explorer.exeを呼ぶ • Feel free to play • その後リバーシがストアから消えるが・・・ • SH6 ver3.7アップデート
  10. プロテクト4年目の真実 • Index.dinは関係ない • ただし壊れたindex.dinだと全機種× • これが誤解の原因 • ファイルサイズとハッシュのハードコード •

    マジかよ • 単独バイナリでのプロテクト貫通 • これがExplorerOpener • ゴミデータでハッシュを無理やり合わせる
  11. 本題―2 OSの壁を越えて

  12. Linux起動しようぜ • SH4壊れた • USBロードモード試してただけなのに・・・ • なぜかバックライトだけ死んでた • しばらく離れていた

  13. (続き)

  14. (続きの続き) • えっ???? • すぐにコンタクトをとる • これは現在非アクティブな別垢

  15. 分解なしでロード • 再コンタクト • 実は過去にローダーを試作 • No Serial, No Log

    • 結構長め(1か月?)の試行錯誤があった
  16. 方法1. nkbin_maker • 先に完成した方 • ベースは bsd-ce • BSD カーネルを

    nk.bin にパック • ブートローダーに U-Boot を起動させる • なんで動いてるかはよくわからん • ブートローダーの動作がわからんので
  17. 方法2. BrainLILO • 先に開発は始まってたけど完成は後 • LInux LOader ではない • ベースは

    ResetKit • Windows CEのソフトリセット用 • 実行中のカーネルへの配慮 • 安全なアドレスへのプリロード→コピー
  18. 本題ー3 新機種怖い

  19. 新機種・・・ • 今年のBrainは発売が遅かったらしい • puhitaku氏が発売日凸 • SoC違う! • OS違う! •

    アプリのバイナリ形式違う! • ローダーも書き直し・・・
  20. SoCが違う • メモリマップが変わる • IOとか物理メモリアドレスの再調整 • システムが変わる • 割り込みが変わる •

    電源管理が変わる
  21. OSが違う • メモリマップが変わる • 仮想アドレス-物理アドレスの紐づけの方 • APIが変わる • しかも未知 •

    実行ファイル形式が違う
  22. 新ローダー開発 • U-Boot~Linux途中まではブート • 途中でタイマが死ぬ • 試作2号 • 退化した •

    今後に期待
  23. まとめ • 想定外の動作をさせるのは難しい • 思い通りに動くと嬉しい