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
310
電子辞書は任意バイナリの夢を見るか? ver1.1
Chiharu Shirasaka
October 31, 2021
Tweet
Share
More Decks by Chiharu Shirasaka
See All by Chiharu Shirasaka
ハンディターミナルでLinuxを動かしてみた
pepepper
1
1.1k
電子辞書は任意バイナリの夢を見るか
pepepper
0
170
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
RailsConf 2023
tenderlove
29
880
How STYLIGHT went responsive
nonsquared
95
5.2k
Into the Great Unknown - MozCon
thekraken
31
1.5k
The Invisible Side of Design
smashingmag
297
50k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Designing for humans not robots
tammielis
249
25k
Bash Introduction
62gerente
608
210k
Embracing the Ebb and Flow
colly
84
4.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
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機種判別
まとめ • 想定外の動作をさせるのは難しい • 思い通りに動くと嬉しい