Slide 1

Slide 1 text

電子辞書は 任意バイナリの夢を見るか? ば~じょん1.1

Slide 2

Slide 2 text

自己紹介 名前:pepepper(ぺぺっぱー) • Brain掲示板時代:例の電子辞書 主な制作物 • nkbin_maker • BrainLILO • ExplorerOpener • リバーシ方式の派生 • boot4u(新機種ローダー)の前半部分 Twitter(@pepepper_cpp)のアイコン

Slide 3

Slide 3 text

電子辞書 • SHARP製 「Brain」シリーズ • 追加アプリ機能 • 公式ストアアプリ • 勝手アプリ (参考: https://brain.fandom.com/ja/wiki/Brain%E6%A9%9F%E7%A8%AE%E5%88%A5%E8%A7%A3%E8%AA%AC ) 第一世代 第二~四世代 第五世代 SoC TMPA910CRAXBG(ARMv5) i.MX28(ARMv5) i.MX7 ULP(ARMv7) RAM 64MB 128MB ストレージ 内蔵フラッシュメモリ/SDカード OS Windows CE 6.0 uITRON

Slide 4

Slide 4 text

Windows CEで遊ぼう(第四世代)

Slide 5

Slide 5 text

なんか勝手アプリが起動しないんだけど • 2017年 PW-Sx4シリーズの発売 • 掲示板(新Part11)での報告 • 様々な憶測 • 新OS?(←偽) • プロテクト? • ホワイトリスト? • Index.din?(←これも偽) • こいつは困った

Slide 6

Slide 6 text

探りを入れてみよう • なけなしの金でリバーシを購入(のちにスライドパズルも) • Index.dinは・・・× • AppMain.exeは・・・ • 最初の方は× • 途中から〇 • 一筋の光 12の>>407 (https://brainbbs.ddns.net/test/read.cgi/edbrain/1493904613/407)

Slide 7

Slide 7 text

EXEファイルの構造 • ヘッダーは実行に必要な情報 • アーキとかエントリポイントとか • コードは機械語 • エントリポイントは実行開始点

Slide 8

Slide 8 text

抜け道という名の茨の道 • チェック終端<エントリポイントなら・・・ • チェックを回避して任意の命令が置ける! • 関数アドレスの壁 • 勝手に付く初期化ルーチン(hogeCRTStartup) • 埋め込むプログラムのアドレス≠埋め込まれた状態のアドレス • ライブラリ関数アドレス参照のズレ • ここで一度力尽きた(2017/11/12) • アップデータの解析に逃げる

Slide 9

Slide 9 text

完全勝利(2018/09/17) • 初期化ルーチンを無効化 • 正確にはエントリポイントをmain()にした • 関数のアドレスを他の機種から取得 • 動的リンカなんか知らん • /Windows/explorer.exeを呼ぶ • Feel free to play

Slide 10

Slide 10 text

♯も仕事している • その後リバーシがストアから消える・・・ • 原理上別のアプリでもいいけど・・・ • 非エンジニアへの説明問題 • SH6 ver3.7アップデート(通称:令和アップデート) • プロテクトの強化 • SH7も同様のプロテクト

Slide 11

Slide 11 text

プロテクト4年目の真実 • Index.dinは関係ない • ただし壊れたindex.dinだと全機種× • これが誤解の原因 • ファイルサイズとハッシュのハードコード • マジかよ • 単独バイナリでのプロテクト貫通 • これがExplorerOpener • ゴミデータでハッシュを無理やり合わせる • 強化プロテクトにも対応!

Slide 12

Slide 12 text

OSの壁を越えて(第二~四世代)

Slide 13

Slide 13 text

前日譚 • SH4壊れた • Selftest Modeでの文鎮化 • USBロードモード試してただけなのに・・・ • なぜかバックライトだけ死んでた • しばらく離れていた

Slide 14

Slide 14 text

Linux起動しようぜ

Slide 15

Slide 15 text

(続き) • エッッッッッ???? • 掲示板時代は夢物語 • すぐにコンタクトをとる • これは現在非アクティブな別垢

Slide 16

Slide 16 text

分解なしでロード • 再コンタクト • 実は過去にローダーを試作 • No Serial, No Log • brain-hackersのもとになる鯖 • 気づけば一周年 • 結構長め(1か月?)の試行錯誤があった

Slide 17

Slide 17 text

方法1. nkbin_maker • 先に完成した方 • ベースは bsd-ce • BSD カーネルを nk.bin にパック • ブートローダーに U-Boot を起動させる • なんで動いてるかはよくわからん • ブートローダーの動作がわからんので

Slide 18

Slide 18 text

方法2. BrainLILO • 先に開発は始まってたけど完成は後 • 開発中に文鎮から脱出 • LInux LOaderではないだろのツッコミはナシで • ベースは ResetKit • Windows CEのソフトリセット用 • 実行中のカーネルへの配慮 • 安全なアドレスへのプリロード→コピー

Slide 19

Slide 19 text

新機種怖い(第五世代)

Slide 20

Slide 20 text

新機種・・・ • 今年のBrainは発売が遅かったらしい • puhitaku氏が発売日凸 • SoC違う! • 既存公式アプリも使用不可 • OS違う! • アプリのバイナリ形式違う! • ローダーも書き直し・・・

Slide 21

Slide 21 text

SoCが違う • メモリマップが変わる • IOとか物理メモリアドレスの再調整 • システムが変わる • 割り込みが変わる • 電源管理が変わる

Slide 22

Slide 22 text

OSが違う • メモリマップが変わる • 仮想アドレス-物理アドレスの紐づけの方 • APIが変わる • しかも未知 • 実行ファイル形式が違う

Slide 23

Slide 23 text

新ローダー開発 • U-Boot~Linux途中まではブート(9/26時点) • 途中でタイマが死ぬ • 試作2号 • 退化した • Kernelのverを上げて解決(10/17) • 割り込みを扱うのは面倒 • boot4uとしてリリース

Slide 24

Slide 24 text

Future • M4コア側RTOSブート • i.mx7ulpはM4コアのみのリセット不可 • 直接触れるのはA7コアのみ • 過去最高の異常ローディング • BrainLILO機種判別

Slide 25

Slide 25 text

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