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
電子辞書は任意バイナリの夢を見るか
Search
Chiharu Shirasaka
September 26, 2021
Programming
0
210
電子辞書は任意バイナリの夢を見るか
情報科学若手の会第54回 ナイトセッションLT
Chiharu Shirasaka
September 26, 2021
Tweet
Share
More Decks by Chiharu Shirasaka
See All by Chiharu Shirasaka
ワープロって実は計算機で
pepepper
1
610
ハンディターミナルでLinuxを動かしてみた
pepepper
1
1.5k
電子辞書は任意バイナリの夢を見るか? ver1.1
pepepper
0
350
Other Decks in Programming
See All in Programming
202507_ADKで始めるエージェント開発の基本 〜デモを通じて紹介〜(奥田りさ)The Basics of Agent Development with ADK — A Demo-Focused Introduction
risatube
PRO
6
1.4k
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
220
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.4k
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
560
MySQL9でベクトルカラム登場!PHP×AWSでのAI/類似検索はこう変わる
suguruooki
1
280
画像コンペでのベースラインモデルの育て方
tattaka
3
1.2k
Comparing decimals in Swift Testing
417_72ki
0
160
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
180
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
330
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
110
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
710
新世界の理解
koriym
0
130
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Pragmatic Product Professional
lauravandoore
36
6.8k
The Cult of Friendly URLs
andyhume
79
6.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Side Projects
sachag
455
43k
A better future with KSS
kneath
238
17k
BBQ
matthewcrist
89
9.8k
Transcript
電子辞書は 任意バイナリの夢を見るか?
自己紹介 名前:pepepper(ぺぺっぱー) • Brain掲示板時代:例の電子辞書 • 地方公立大学生(2年) 主な制作物 • nkbin_maker •
BrainLILO • ExplorerOpener
電子辞書 • 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 )
本題―1 Windows CEで遊ぼう
なんか勝手アプリが起動しないんだけど • 2017年 PW-Sx4シリーズの発売 • 掲示板(新Part11)での報告 • 様々な憶測 • 新OS?(←この時点では偽)
• プロテクト? • ホワイトリスト? • Index.din?(←これも偽) • こいつは困った (本題ー1はhttps://brainbbs.ddns.net/を参照すると詳細がわかりやすい)
探りを入れてみよう • なけなしの金でリバーシを購入(のちにスライドパズルも) • Index.dinは・・・× • AppMain.exeは・・・ • 最初の方は× •
途中から〇 • 一筋の光 12の>>407 (https://brainbbs.ddns.net/test/read.cgi/edbrain/1493904613/407)
EXEファイルの構造 • ヘッダーは実行に必要な情報 • アーキとかエントリポイントとか • コードは機械語 • エントリポイントは実行開始点
抜け道という名の茨の道 • チェック終端<エントリポイントなら・・・ • チェックを回避して任意の命令が置ける! • 関数アドレスの壁 • 勝手に付く初期化ルーチン •
埋め込むプログラムのアドレス≠埋め込まれた状態のアドレス • ここで一度力尽きた(2017/11/12) • アップデータの解析に逃げる
完全勝利(2018/09/17) • 初期化ルーチンを無効化 • 正確にはエントリポイントをmain()にした • 関数のアドレスを他の機種から取得 • 動的リンカなんか知らん •
/Windows/explorer.exeを呼ぶ • Feel free to play • その後リバーシがストアから消えるが・・・ • SH6 ver3.7アップデート
プロテクト4年目の真実 • Index.dinは関係ない • ただし壊れたindex.dinだと全機種× • これが誤解の原因 • ファイルサイズとハッシュのハードコード •
マジかよ • 単独バイナリでのプロテクト貫通 • これがExplorerOpener • ゴミデータでハッシュを無理やり合わせる
本題―2 OSの壁を越えて
Linux起動しようぜ • SH4壊れた • USBロードモード試してただけなのに・・・ • なぜかバックライトだけ死んでた • しばらく離れていた
(続き)
(続きの続き) • えっ???? • すぐにコンタクトをとる • これは現在非アクティブな別垢
分解なしでロード • 再コンタクト • 実は過去にローダーを試作 • No Serial, No Log
• 結構長め(1か月?)の試行錯誤があった
方法1. nkbin_maker • 先に完成した方 • ベースは bsd-ce • BSD カーネルを
nk.bin にパック • ブートローダーに U-Boot を起動させる • なんで動いてるかはよくわからん • ブートローダーの動作がわからんので
方法2. BrainLILO • 先に開発は始まってたけど完成は後 • LInux LOader ではない • ベースは
ResetKit • Windows CEのソフトリセット用 • 実行中のカーネルへの配慮 • 安全なアドレスへのプリロード→コピー
本題ー3 新機種怖い
新機種・・・ • 今年のBrainは発売が遅かったらしい • puhitaku氏が発売日凸 • SoC違う! • OS違う! •
アプリのバイナリ形式違う! • ローダーも書き直し・・・
SoCが違う • メモリマップが変わる • IOとか物理メモリアドレスの再調整 • システムが変わる • 割り込みが変わる •
電源管理が変わる
OSが違う • メモリマップが変わる • 仮想アドレス-物理アドレスの紐づけの方 • APIが変わる • しかも未知 •
実行ファイル形式が違う
新ローダー開発 • U-Boot~Linux途中まではブート • 途中でタイマが死ぬ • 試作2号 • 退化した •
今後に期待
まとめ • 想定外の動作をさせるのは難しい • 思い通りに動くと嬉しい