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
200
電子辞書は任意バイナリの夢を見るか
情報科学若手の会第54回 ナイトセッションLT
Chiharu Shirasaka
September 26, 2021
Tweet
Share
More Decks by Chiharu Shirasaka
See All by Chiharu Shirasaka
ハンディターミナルでLinuxを動かしてみた
pepepper
1
1.4k
電子辞書は任意バイナリの夢を見るか? ver1.1
pepepper
0
340
Other Decks in Programming
See All in Programming
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
48
32k
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
180
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
0
240
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
600
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
580
GraphRAGの仕組みまるわかり
tosuri13
8
500
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
630
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
830
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
1.5k
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
270
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
1
590
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
110
Featured
See All Featured
Balancing Empowerment & Direction
lara
1
390
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
What's in a price? How to price your products and services
michaelherold
246
12k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
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号 • 退化した •
今後に期待
まとめ • 想定外の動作をさせるのは難しい • 思い通りに動くと嬉しい