はまやんはまやんはまやん

hamayanhamayan's blog

Automotive CTF Japan 決勝 Writeup

Automotive CTF Japan 予選 Writeup - はまやんはまやんはまやんの国内決勝。TeamONEとして出場し、2位でアメリカ決勝進出! チームメンバーのWriteup 1 2 3

xNexux

予選同様、xNexusというVSOCプラットフォームが与えられて、設問に答えていく。

CAN Bus Anomaly #1

xNexusでCAN ID 0x3B9と0x3D1のCANバス異常を追跡して、その脆弱性IDを特定してください。ハッカーが通常参照するものを適切なフラグ形式で提出してください。

脆弱性ID、ハッカーが通常参照するものということでCVEだろう。cve 3b9 3d1で検索すると検索結果の1番目に出てくる。bh{CVE-2022-26269}で正解。

CAN Bus Anomaly #2

おっと、誰かが車両の全シリンダーへの燃料供給を停止するCANフレームを送信しています。完全なCANフレームを提供してください。 フラグ形式の例:bh{1337#0201}

フラグ形式にあるものはcandumpとかで出力されるSocketCAN compact形式と似ているので、その形式で書くように答えよということだろう。

xNexusのOAT検出で記録されているCANのログデータを見ていくと予選で見たようなログが残っており、xNexuxの環境はそのまま使っていてログを追加しているようだった。つまり、ID的には2127827以降を見れば十分だろうということでログを絞って確認していった。するとCAN IDは10通りに絞られる。

  • 000 -> 全部0で何かしている感じは無い
  • 094,645,760,768 -> 予選でも出てきたし、中身も同じ。
  • 0b6 -> 0x010001を1回送信
  • 3b9 -> 色んなcandataを送っている
  • 3d1 -> 色んなcandataを送っている
  • 7df -> 0x0201を複数回送信
  • 7e0 -> 色んなcandataを送っている

という感じ。とりあえずcandataの種類が1種類しかない0b6と7dfを送ってみるが違う。CAN IDでググってみると、こういうQiitaが見つかり、0x7fdか0x7e0か?という感じになる、7dfは既に試しているので7e0か?

7e0でググってみるもよさそうな情報が見当たらず、7e0は10種類くらいcandataのバリエーションがあったが、とりあえず出してみるかと一番多く記録されていた06301c000fa50100をあてずっぽうで出すと正答だった。

bh{7e0#06301c000fa50100}が正解。

RAMN

RAMNという機器が与えられるので、問いに答えていく問題群。決勝の問題のほとんどを占めていた。

[ECU C] Noiseless

この問題、本質的な部分は全く何もしておらず、自分がポイント泥棒をした問題。CANとSteganographyのタグが付いていた。問題文は以下。

ブレーキのCANメッセージの最下位ビットはノイズではありません。
注意: 1分間のCANメッセージログにフラグを取得するために必要なすべてが含まれています。

自分がこの問題に取り組み始めた段階で既に問題を解くカギは既に揃っていた。

laysakuraさんが既に1分間分のCANメッセージをダンプしてチーム内共有してくれていた。
beaさんから問題の概要を教えてもらい、ダンプを受け取る。
kusanoさんからブレーキのCAN IDは007ですと教えてもらう。
tkitoさんからCAN IDが007であるときのcandataのフォーマットを教えてもらう。

02 83 6E F0 7B 06 FD 2E
だと
02 -> 忘れた。固定
83 -> 忘れたが、80,81,82,83になってる
6E F0 -> カウンター(ログを見ても順番にインクリメントされている)
7B 06 FD 2E -> CRC

ということでフォーマット上は2バイト目くらいしか恣意的に何かを埋め込めそうな所が無い。

kusanoさん「2バイト目の最下位ビットを持ってきてやればよさそうなんですよね~」
hamayanhamayan「実装しますね!」

https://gchq.github.io/CyberChef/#recipe=Find_/_Replace(%7B'option':'Regex','string':','%7D,'',true,false,true,false)Find_/_Replace(%7B'option':'Regex','string':'0x80'%7D,'0',true,false,true,false)Find_/_Replace(%7B'option':'Regex','string':'0x81'%7D,'1',true,false,true,false)Find_/_Replace(%7B'option':'Regex','string':'0x83'%7D,'1',true,false,true,false)Find_/_Replace(%7B'option':'Regex','string':'0x82'%7D,'0',true,false,true,false)From_Binary('Space',8)&input=MHg4MCwweDgxLDB4ODIsMHg4MiwweDgzLDB4ODEsMHg4MSwweDgyLDB4ODIsMHg4MywweDgyLDB4ODMsMHg4MiwweDgxLDB4ODAsMHg4MCwweDgyLDB4ODMsMHg4MywweDgzLDB4ODMsMHg4MywweDgyLDB4ODEsMHg4MCwweDgxLDB4ODEsMHg4MiwweDgyLDB4ODIsMHg4MSwweDgyLDB4ODAsMHg4MywweDgxLDB4ODIsMHg4MywweDgwLDB4ODAsMHg4MCwweDgyLDB4ODEsMHg4MywweDgzLDB4ODMsMHg4MiwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MiwweDgxLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MiwweDgxLDB4ODMsMHg4MiwweDgwLDB4ODAsMHg4MCwweDgwLDB4ODMsMHg4MCwweDgyLDB4ODEsMHg4MCwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODEsMHg4MiwweDgxLDB4ODAsMHg4MywweDgwLDB4ODEsMHg4MywweDgxLDB4ODEsMHg4MywweDgwLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgxLDB4ODAsMHg4MywweDgxLDB4ODEsMHg4MCwweDgyLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MywweDgxLDB4ODIsMHg4MywweDgwLDB4ODMsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgwLDB4ODIsMHg4MCwweDgzLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MywweDgxLDB4ODMsMHg4MiwweDgwLDB4ODMsMHg4MCwweDgzLDB4ODAsMHg4MywweDgwLDB4ODIsMHg4MCwweDgzLDB4ODMsMHg4MSwweDgxLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODEsMHg4MiwweDgwLDB4ODEsMHg4MywweDgwLDB4ODEsMHg4MiwweDgwLDB4ODIsMHg4MCwweDgxLDB4ODEsMHg4MSwweDgxLDB4ODIsMHg4MSwweDgzLDB4ODAsMHg4MSwweDgwLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgyLDB4ODAsMHg4MywweDgxLDB4ODIsMHg4MCwweDgyLDB4ODAsMHg4MCwweDgxLDB4ODAsMHg4MiwweDgxLDB4ODAsMHg4MywweDgzLDB4ODIsMHg4MSwweDgyLDB4ODIsMHg4MiwweDgzLDB4ODAsMHg4MywweDgyLDB4ODMsMHg4MCwweDgzLDB4ODMsMHg4MywweDgzLDB4ODMsMHg4MCwweDgxLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MiwweDgyLDB4ODIsMHg4MywweDgyLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MywweDgyLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgzLDB4ODEsMHg4MSwweDgyLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MywweDgwLDB4ODAsMHg4MiwweDgyLDB4ODIsMHg4MywweDgyLDB4ODEsMHg4MCwweDgwLDB4ODEsMHg4MSwweDgzLDB4ODAsMHg4MCwweDgxLDB4ODIsMHg4MSwweDgwLDB4ODEsMHg4MiwweDgyLDB4ODIsMHg4MywweDgzLDB4ODEsMHg4MywweDgzLDB4ODAsMHg4MywweDgwLDB4ODMsMHg4MSwweDgyLDB4ODAsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgzLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgwLDB4ODIsMHg4MywweDgxLDB4ODMsMHg4MSwweDgwLDB4ODMsMHg4MywweDgyLDB4ODEsMHg4MCwweDgyLDB4ODMsMHg4MCwweDgzLDB4ODAsMHg4MCwweDgyLDB4ODEsMHg4MywweDgyLDB4ODAsMHg4MiwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MywweDgyLDB4ODMsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MywweDgyLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgzLDB4ODEsMHg4MSwweDgxLDB4ODAsMHg4MywweDgyLDB4ODEsMHg4MiwweDgyLDB4ODAsMHg4MCwweDgyLDB4ODEsMHg4MCwweDgwLDB4ODMsMHg4MCwweDgyLDB4ODEsMHg4MCwweDgzLDB4ODEsMHg4MywweDgwLDB4ODIsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgzLDB4ODMsMHg4MCwweDgzLDB4ODAsMHg4MywweDgyLDB4ODEsMHg4MCwweDgyLDB4ODIsMHg4MCwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODIsMHg4MiwweDgxLDB4ODMsMHg4MSwweDgwLDB4ODIsMHg4MywweDgwLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgwLDB4ODMsMHg4MywweDgzLDB4ODEsMHg4MSwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODEsMHg4MCwweDgwLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MywweDgzLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgyLDB4ODEsMHg4MSwweDgzLDB4ODMsMHg4MiwweDgzLDB4ODEsMHg4MiwweDgxLDB4ODIsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MCwweDgxLDB4ODEsMHg4MCwweDgyLDB4ODIsMHg4MiwweDgwLDB4ODMsMHg4MCwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODMsMHg4MCwweDgxLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODAsMHg4MywweDgyLDB4ODEsMHg4MywweDgzLDB4ODMsMHg4MSwweDgyLDB4ODMsMHg4MCwweDgzLDB4ODAsMHg4MiwweDgyLDB4ODAsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgxLDB4ODIsMHg4MCwweDgzLDB4ODIsMHg4MywweDgxLDB4ODMsMHg4MCwweDgyLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MywweDgxLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODAsMHg4MywweDgyLDB4ODAsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgwLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODAsMHg4MCwweDgzLDB4ODMsMHg4MywweDgxLDB4ODMsMHg4MiwweDgxLDB4ODIsMHg4MywweDgzLDB4ODAsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgwLDB4ODMsMHg4MSwweDgwLDB4ODMsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MSwweDgzLDB4ODIsMHg4MywweDgyLDB4ODAsMHg4MywweDgwLDB4ODMsMHg4MCwweDgwLDB4ODAsMHg4MywweDgzLDB4ODAsMHg4MCwweDgyLDB4ODAsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgxLDB4ODIsMHg4MSwweDgzLDB4ODAsMHg4MywweDgyLDB4ODAsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODEsMHg4MiwweDgzLDB4ODEsMHg4MywweDgxLDB4ODMsMHg4MiwweDgzLDB4ODAsMHg4MSwweDgyLDB4ODAsMHg4MiwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MSwweDgyLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MSwweDgzLDB4ODIsMHg4MiwweDgyLDB4ODMsMHg4MiwweDgxLDB4ODEsMHg4MywweDgyLDB4ODEsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MCwweDgwLDB4ODAsMHg4MywweDgwLDB4ODEsMHg4MiwweDgyLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MiwweDgzLDB4ODIsMHg4MywweDgwLDB4ODEsMHg4MiwweDgyLDB4ODAsMHg4MywweDgxLDB4ODMsMHg4MywweDgxLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MiwweDgwLDB4ODIsMHg4MywweDgxLDB4ODEsMHg4MywweDgwLDB4ODMsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgwLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MCwweDgyLDB4ODMsMHg4MywweDgyLDB4ODIsMHg4MCwweDgwLDB4ODIsMHg4MywweDgyLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MywweDgwLDB4ODEsMHg4MiwweDgwLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgxLDB4ODEsMHg4MywweDgxLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MiwweDgyLDB4ODAsMHg4MiwweDgwLDB4ODEsMHg4MiwweDgwLDB4ODEsMHg4MCwweDgyLDB4ODMsMHg4MCwweDgzLDB4ODEsMHg4MywweDgyLDB4ODIsMHg4MCwweDgxLDB4ODIsMHg4MywweDgzLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgyLDB4ODIsMHg4MiwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODAsMHg4MCwweDgxLDB4ODEsMHg4MSwweDgwLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgyLDB4ODMsMHg4MywweDgxLDB4ODMsMHg4MSwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODMsMHg4MiwweDgyLDB4ODAsMHg4MywweDgwLDB4ODAsMHg4MywweDgxLDB4ODAsMHg4MywweDgwLDB4ODAsMHg4MCwweDgwLDB4ODMsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgxLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MiwweDgxLDB4ODEsMHg4MiwweDgwLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgxLDB4ODMsMHg4MiwweDgxLDB4ODIsMHg4MiwweDgyLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MywweDgyLDB4ODEsMHg4MSwweDgzLDB4ODMsMHg4MywweDgwLDB4ODEsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgzLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODEsMHg4MSwweDgzLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODIsMHg4MiwweDgyLDB4ODIsMHg4MiwweDgzLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MywweDgzLDB4ODEsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgxLDB4ODIsMHg4MywweDgyLDB4ODIsMHg4MiwweDgzLDB4ODMsMHg4MywweDgxLDB4ODEsMHg4MiwweDgxLDB4ODAsMHg4MywweDgxLDB4ODIsMHg4MCwweDgwLDB4ODEsMHg4MiwweDgyLDB4ODMsMHg4MywweDgwLDB4ODEsMHg4MiwweDgyLDB4ODAsMHg4MCwweDgxLDB4ODEsMHg4MSwweDgxLDB4ODIsMHg4MywweDgxLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MiwweDgyLDB4ODIsMHg4MywweDgxLDB4ODIsMHg4MiwweDgyLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgxLDB4ODAsMHg4MSwweDgzLDB4ODAsMHg4MywweDgyLDB4ODAsMHg4MCwweDgzLDB4ODIsMHg4MywweDgwLDB4ODEsMHg4MiwweDgzLDB4ODMsMHg4MywweDgxLDB4ODMsMHg4MiwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MCwweDgyLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODEsMHg4MywweDgzLDB4ODAsMHg4MiwweDgyLDB4ODMsMHg4MCwweDgzLDB4ODEsMHg4MSwweDgyLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgyLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgwLDB4ODMsMHg4MywweDgxLDB4ODIsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MCwweDgyLDB4ODAsMHg4MywweDgxLDB4ODEsMHg4MSwweDgxLDB4ODAsMHg4MywweDgyLDB4ODMsMHg4MSwweDgwLDB4ODAsMHg4MiwweDgzLDB4ODAsMHg4MiwweDgzLDB4ODEsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgwLDB4ODAsMHg4MywweDgzLDB4ODMsMHg4MSwweDgyLDB4ODEsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgyLDB4ODEsMHg4MiwweDgxLDB4ODAsMHg4MiwweDgwLDB4ODEsMHg4MywweDgyLDB4ODAsMHg4MiwweDgyLDB4ODAsMHg4MSwweDgyLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MywweDgyLDB4ODEsMHg4MiwweDgyLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MywweDgxLDB4ODMsMHg4MywweDgxLDB4ODIsMHg4MywweDgwLDB4ODEsMHg4MiwweDgwLDB4ODAsMHg4MCwweDgyLDB4ODMsMHg4MiwweDgwLDB4ODEsMHg4MCwweDgwLDB4ODMsMHg4MiwweDgxLDB4ODMsMHg4MywweDgyLDB4ODAsMHg4MCwweDgzLDB4ODIsMHg4MywweDgzLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgwLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgxLDB4ODMsMHg4MywweDgyLDB4ODAsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgwLDB4ODMsMHg4MywweDgxLDB4ODEsMHg4MywweDgyLDB4ODEsMHg4MCwweDgzLDB4ODMsMHg4MiwweDgwLDB4ODAsMHg4MSwweDgyLDB4ODIsMHg4MSwweDgzLDB4ODAsMHg4MywweDgwLDB4ODIsMHg4MiwweDgyLDB4ODEsMHg4MSwweDgxLDB4ODEsMHg4MCwweDgzLDB4ODMsMHg4MiwweDgzLDB4ODAsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MCwweDgxLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MCwweDgyLDB4ODMsMHg4MiwweDgyLDB4ODMsMHg4MiwweDgzLDB4ODEsMHg4MiwweDgzLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MywweDgxLDB4ODMsMHg4MywweDgwLDB4ODEsMHg4MiwweDgxLDB4ODIsMHg4MiwweDgyLDB4ODAsMHg4MCwweDgzLDB4ODAsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgxLDB4ODIsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgwLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MSwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MCwweDgyLDB4ODAsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgyLDB4ODAsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgyLDB4ODEsMHg4MiwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgxLDB4ODEsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgxLDB4ODIsMHg4MiwweDgwLDB4ODEsMHg4MCwweDgwLDB4ODEsMHg4MSwweDgyLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MSwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MywweDgwLDB4ODMsMHg4MiwweDgyLDB4ODAsMHg4MSwweDgxLDB4ODAsMHg4MiwweDgwLDB4ODAsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgzLDB4ODAsMHg4MSwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgzLDB4ODAsMHg4MywweDgwLDB4ODMsMHg4MCwweDgxLDB4ODEsMHg4MywweDgzLDB4ODMsMHg4MiwweDgxLDB4ODAsMHg4MywweDgwLDB4ODAsMHg4MCwweDgwLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MywweDgyLDB4ODIsMHg4MywweDgyLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODEsMHg4MywweDgwLDB4ODMsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgyLDB4ODAsMHg4MywweDgwLDB4ODMsMHg4MCwweDgwLDB4ODMsMHg4MSwweDgzLDB4ODAsMHg4MiwweDgxLDB4ODIsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MywweDgxLDB4ODEsMHg4MywweDgxLDB4ODAsMHg4MSwweDgwLDB4ODEsMHg4MSwweDgyLDB4ODIsMHg4MCwweDgxLDB4ODAsMHg4MCwweDgzLDB4ODMsMHg4MiwweDgzLDB4ODAsMHg4MiwweDgwLDB4ODIsMHg4MywweDgxLDB4ODMsMHg4MSwweDgwLDB4ODEsMHg4MSwweDgwLDB4ODEsMHg4MCwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgyLDB4ODEsMHg4MSwweDgyLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MywweDgwLDB4ODEsMHg4MywweDgyLDB4ODEsMHg4MCwweDgyLDB4ODIsMHg4MSwweDgyLDB4ODMsMHg4MCwweDgxLDB4ODIsMHg4MSwweDgxLDB4ODEsMHg4MSwweDgxLDB4ODAsMHg4MywweDgyLDB4ODMsMHg4MCwweDgyLDB4ODIsMHg4MiwweDgyLDB4ODMsMHg4MiwweDgwLDB4ODEsMHg4MiwweDgwLDB4ODEsMHg4MiwweDgzLDB4ODEsMHg4MywweDgwLDB4ODIsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODAsMHg4MywweDgyLDB4ODMsMHg4MCwweDgyLDB4ODAsMHg4MCwweDgyLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MiwweDgxLDB4ODEsMHg4MSwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MCwweDgxLDB4ODAsMHg4MiwweDgyLDB4ODMsMHg4MSwweDgxLDB4ODEsMHg4MywweDgwLDB4ODEsMHg4MCwweDgxLDB4ODEsMHg4MCwweDgwLDB4ODIsMHg4MSwweDgyLDB4ODIsMHg4MywweDgxLDB4ODIsMHg4MSwweDgyLDB4ODAsMHg4MiwweDgwLDB4ODMsMHg4MSwweDgxLDB4ODMsMHg4MCwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MywweDgwLDB4ODAsMHg4MCwweDgzLDB4ODMsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgwLDB4ODMsMHg4MiwweDgxLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MSwweDgzLDB4ODMsMHg4MywweDgyLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgyLDB4ODAsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgxLDB4ODAsMHg4MCwweDgxLDB4ODIsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgyLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MywweDgxLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MCwweDgxLDB4ODAsMHg4MywweDgyLDB4ODIsMHg4MSwweDgxLDB4ODEsMHg4MiwweDgwLDB4ODMsMHg4MCwweDgzLDB4ODIsMHg4MSwweDgwLDB4ODAsMHg4MiwweDgxLDB4ODMsMHg4MSwweDgxLDB4ODMsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgxLDB4ODIsMHg4MCwweDgwLDB4ODMsMHg4MiwweDgyLDB4ODMsMHg4MSwweDgwLDB4ODMsMHg4MiwweDgwLDB4ODIsMHg4MiwweDgxLDB4ODMsMHg4MSwweDgzLDB4ODIsMHg4MywweDgzLDB4ODAsMHg4MSwweDgyLDB4ODAsMHg4MywweDgwLDB4ODMsMHg4MCwweDgwLDB4ODIsMHg4MywweDgzLDB4ODIsMHg4MCwweDgyLDB4ODIsMHg4MCwweDgxLDB4ODIsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgxLDB4ODIsMHg4MywweDgwLDB4ODIsMHg4MiwweDgzLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODMsMHg4MSwweDgzLDB4ODEsMHg4MCwweDgxLDB4ODAsMHg4MSwweDgwLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MSwweDgwLDB4ODIsMHg4MSwweDgyLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MywweDgzLDB4ODAsMHg4MiwweDgyLDB4ODEsMHg4MCwweDgxLDB4ODEsMHg4MSwweDgwLDB4ODEsMHg4MiwweDgzLDB4ODAsMHg4MSwweDgwLDB4ODAsMHg4MiwweDgyLDB4ODIsMHg4MywweDgyLDB4ODEsMHg4MiwweDgwLDB4ODEsMHg4MSwweDgxLDB4ODIsMHg4MiwweDgxLDB4ODIsMHg4MSwweDgwLDB4ODMsMHg4MiwweDgyLDB4ODIsMHg4MywweDgzLDB4ODEsMHg4MSwweDgxLDB4ODIsMHg4MSwweDgyLDB4ODEsMHg4MywweDgwLDB4ODAsMHg4MCwweDgxLDB4ODIsMHg4MCwweDgzLDB4ODEsMHg4MCwweDgzLDB4ODIsMHg4MiwweDgwLDB4ODIsMHg4MywweDgxLDB4ODMsMHg4MywweDgyLDB4ODMsMHg4MywweDgwLDB4ODMsMHg4MCwweDgyLDB4ODEsMHg4MiwweDgzLDB4ODIsMHg4MCwweDgwLDB4ODEsMHg4MywweDgwLDB4ODIsMHg4MCwweDgyLDB4ODIsMHg4MSwweDgwLDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4MSwweDgyLA&ieol=CRLF

ということで前問から10分も経たずに解けた。bh{J0KE_PIquANT}

[ECU D] JTAG

フラグはJTAGインターフェースからECU DのRAMから読み取れます。
注意: この問題を解くためにopenocdが使用できます。

JTAGは出ますという事前アナウンスが直前にあったので、JTAGで接続してOpenOCDを使う流れを素振りしていた。おかげで本番はスムーズに解けた。この記事を丸ごとコピーしてできるようにしておいた。

結線する

今回自分が使ったC232HM-DDHSL-0は片方がJTAG用の端子で、片方がPCに刺せるようにUSBになっている。よって、最初はRAMNのECU Dに対して正しくJTAG用に結線することから始まる。 この記事にC232HM-DDHSL-0の色と用途のマッピングの図が書いてある。以下のような感じで刺せばいいと分かる。

ORANGE → TCK
YELLOW → TDI
GREEN → TDO
BROWN → TMS
GREY → TRST
BLACK → GND

次はRAMNのECU D側でどこに刺すかという部分であるが、コンテストサイトのnotificationsを見ると、拡張ポートからのみ接続するよう指示があった。RAMNの拡張ポートのページを見てみると、ECU Dのピン配置の番号と、各番号が何に対応しているかの図が書いてあった。それを参考にすると、以下のように結線すればいいことが分かる。

ORANGE → TCK → 24
YELLOW → TDI → 23
GREEN → TDO → 25
BROWN → TMS → 22
GREY → TRST → 26
BLACK → GND → 4

OpenOCDを使う

これで物理的な準備は整ったのでもう片方のUSB端子をPCにつないでOpenOCDを起動させていく。OpenOCDを起動させるにはインターフェースの設定ファイルと、マイコンの設定ファイルを用意する必要がある。

インターフェースの設定ファイルは、つまりは、C232HM-DDHSL-0の設定ファイルということになる。この点については、このページにある機器と同じものを使っているので、このページのc232hm-edhsl-0.cfgを使えばよい。

マイコンの設定ファイルを探してくる必要がある。コンテストサイトのnotificationsを見るとECUのマイコンはSTM32L552です。とあるので、STM32L552用を探してくる。この辺りの良くまとまっているサイトからstm32ほにゃらら.cfgを持ってきて試すもうまくいかない。エラーが出る。

エラーメッセージからトラブルシューティングしているとこのようなサイトが見つかる。確かにこの箇所が原因でエラーが出ているようだった。自力で直そうかと思ったが、この記事の人が既に修正したものを配布してくれていた。ここからOpenOCD spesific MCU-Aimed cfg files Nemuisan Specialをダウンロードしてきて色々試すと、OpenOCD_cfgs/tcl/target/stm32l1x_flash.cfgでOpenOCDの起動に成功!!!

インターフェースとマイコンの設定ファイルを持ってきて sudo openocd -f c232hm-edhsl-0.cfg -f stm32l1x_flash.cfg で起動する。

telnet経由でRAMから読み出す

telnet経由で謎のコンソールが立ち上がるのでメモリを取り出そうとしてみるが権限エラーになる。ちゃんとRAMの場所を指定する必要があるようだ。色々インターネットを探すとこのような記事が見つかる。ここに書いてある0x20000000を試すとRAMを読み出すことが出来た!

> mdw 0x20000000 0x1000
0x20000000: 0000027f 00000000 00000000 00000008 00000000 00000000 00000000 00000000 
0x20000020: 00000000 00000001 99f8b879 0000027a 00000000 00000000 00000001 00000000 
0x20000040: 00000000 00000000 00000000 00000000 00027f04 00000000 00000000 00000800 
0x20000060: 00000000 00000000 00000000 00000000 00000000 00000100 ff88ef01 00027aee 
...

ダンプできたメモリからフラグを探す

とりあえず0x20000000~0x2000bfa0くらいまでは取れたので、バイナリにする。それをstringsしてみるとS{hbLTOP_SSEARCSといういかにも怪しい文字列が出てくるので、その辺りを見てみると以下のようになっていた。

$ hd dump.bin | grep S{hb -A 2
0000a020  53 7b 68 62 4c 54 4f 50  5f 53 53 45 41 52 43 53  |S{hbLTOP_SSEARCS|
0000a030  00 7d 4c 57 06 99 f5 3a  d8 32 de 54 f0 61 eb c3  |.}LW...:.2.T.a..|
0000a040  cf 0a de f9 9b cd f2 db  a1 4e ad 8b a3 56 15 1f  |.........N...V..|

4バイトごとにリトルエンディアンのような感じで変換するとフラグになる。bh{SPOTLESS_SCRAWL}

[ECU B] RAM peak 解けなかった

4時間くらいひたすら取り組んでいました。あまりに解けないのでkusanoさんが

  • 与えられているWifiの紙に何かヒントがあるのではないか?
  • もしかして、Flag flag -> 0x466c6167 0x666c6167…か?

をしていて面白かった。