Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
電子辞書は任意バイナリの夢を見るか? ver1.1
Search
Chiharu Shirasaka
October 31, 2021
0
320
電子辞書は任意バイナリの夢を見るか? ver1.1
Chiharu Shirasaka
October 31, 2021
Tweet
Share
More Decks by Chiharu Shirasaka
See All by Chiharu Shirasaka
ハンディターミナルでLinuxを動かしてみた
pepepper
1
1.2k
電子辞書は任意バイナリの夢を見るか
pepepper
0
180
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
230
Producing Creativity
orderedlist
PRO
343
39k
Bash Introduction
62gerente
609
210k
Fireside Chat
paigeccino
34
3.1k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Docker and Python
trallard
43
3.2k
Done Done
chrislema
182
16k
Typedesign – Prime Four
hannesfritz
40
2.5k
Adopting Sorbet at Scale
ufuk
74
9.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Transcript
電子辞書は 任意バイナリの夢を見るか? ば~じょん1.1
自己紹介 名前:pepepper(ぺぺっぱー) • Brain掲示板時代:例の電子辞書 主な制作物 • nkbin_maker • BrainLILO •
ExplorerOpener • リバーシ方式の派生 • boot4u(新機種ローダー)の前半部分 Twitter(@pepepper_cpp)のアイコン
電子辞書 • 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
Windows CEで遊ぼう(第四世代)
なんか勝手アプリが起動しないんだけど • 2017年 PW-Sx4シリーズの発売 • 掲示板(新Part11)での報告 • 様々な憶測 • 新OS?(←偽)
• プロテクト? • ホワイトリスト? • Index.din?(←これも偽) • こいつは困った
探りを入れてみよう • なけなしの金でリバーシを購入(のちにスライドパズルも) • Index.dinは・・・× • AppMain.exeは・・・ • 最初の方は× •
途中から〇 • 一筋の光 12の>>407 (https://brainbbs.ddns.net/test/read.cgi/edbrain/1493904613/407)
EXEファイルの構造 • ヘッダーは実行に必要な情報 • アーキとかエントリポイントとか • コードは機械語 • エントリポイントは実行開始点
抜け道という名の茨の道 • チェック終端<エントリポイントなら・・・ • チェックを回避して任意の命令が置ける! • 関数アドレスの壁 • 勝手に付く初期化ルーチン(hogeCRTStartup) •
埋め込むプログラムのアドレス≠埋め込まれた状態のアドレス • ライブラリ関数アドレス参照のズレ • ここで一度力尽きた(2017/11/12) • アップデータの解析に逃げる
完全勝利(2018/09/17) • 初期化ルーチンを無効化 • 正確にはエントリポイントをmain()にした • 関数のアドレスを他の機種から取得 • 動的リンカなんか知らん •
/Windows/explorer.exeを呼ぶ • Feel free to play
♯も仕事している • その後リバーシがストアから消える・・・ • 原理上別のアプリでもいいけど・・・ • 非エンジニアへの説明問題 • SH6 ver3.7アップデート(通称:令和アップデート)
• プロテクトの強化 • SH7も同様のプロテクト
プロテクト4年目の真実 • Index.dinは関係ない • ただし壊れたindex.dinだと全機種× • これが誤解の原因 • ファイルサイズとハッシュのハードコード •
マジかよ • 単独バイナリでのプロテクト貫通 • これがExplorerOpener • ゴミデータでハッシュを無理やり合わせる • 強化プロテクトにも対応!
OSの壁を越えて(第二~四世代)
前日譚 • SH4壊れた • Selftest Modeでの文鎮化 • USBロードモード試してただけなのに・・・ • なぜかバックライトだけ死んでた
• しばらく離れていた
Linux起動しようぜ
(続き) • エッッッッッ???? • 掲示板時代は夢物語 • すぐにコンタクトをとる • これは現在非アクティブな別垢
分解なしでロード • 再コンタクト • 実は過去にローダーを試作 • No Serial, No Log
• brain-hackersのもとになる鯖 • 気づけば一周年 • 結構長め(1か月?)の試行錯誤があった
方法1. nkbin_maker • 先に完成した方 • ベースは bsd-ce • BSD カーネルを
nk.bin にパック • ブートローダーに U-Boot を起動させる • なんで動いてるかはよくわからん • ブートローダーの動作がわからんので
方法2. BrainLILO • 先に開発は始まってたけど完成は後 • 開発中に文鎮から脱出 • LInux LOaderではないだろのツッコミはナシで •
ベースは ResetKit • Windows CEのソフトリセット用 • 実行中のカーネルへの配慮 • 安全なアドレスへのプリロード→コピー
新機種怖い(第五世代)
新機種・・・ • 今年のBrainは発売が遅かったらしい • puhitaku氏が発売日凸 • SoC違う! • 既存公式アプリも使用不可 •
OS違う! • アプリのバイナリ形式違う! • ローダーも書き直し・・・
SoCが違う • メモリマップが変わる • IOとか物理メモリアドレスの再調整 • システムが変わる • 割り込みが変わる •
電源管理が変わる
OSが違う • メモリマップが変わる • 仮想アドレス-物理アドレスの紐づけの方 • APIが変わる • しかも未知 •
実行ファイル形式が違う
新ローダー開発 • U-Boot~Linux途中まではブート(9/26時点) • 途中でタイマが死ぬ • 試作2号 • 退化した •
Kernelのverを上げて解決(10/17) • 割り込みを扱うのは面倒 • boot4uとしてリリース
Future • M4コア側RTOSブート • i.mx7ulpはM4コアのみのリセット不可 • 直接触れるのはA7コアのみ • 過去最高の異常ローディング •
BrainLILO機種判別
まとめ • 想定外の動作をさせるのは難しい • 思い通りに動くと嬉しい