更新日時で差をつけろ

もはや更新日時でしか差を付けられない

セキュリティ・キャンプ全国大会2019の選考に通った

セキュリティ・キャンプ全国大会2019の書類選考に通って集中開発コースのリバースエンジニアリングゼミに参加できることになったので例に倣って応募課題とそれに対する自分の解答を置いておきます。応募は2,3回目で2年前に応募して不合格になっていました。昨年はSecHack365などで夏の予定が埋まっていたので応募しませんでした。

応募用紙

問1: 今までにリバースエンジニアリング(分解や解析など)した経験を好きなだけ語って下さい。対象はソフトウェアやハードウェアに限定しません。

ICカードリーダ

秋葉原のジャンク街でSONYのRC-S310を300円で買いました。RC-S310は2001年発売なので私の同期です。公式のホームページに「NFCポートソフトウェア」なるものが転がっていて、現在公開されているRC-S310対応のプロダクトはこれだけでした。

当然Windowsでしか動作しないのでVirtualboxで動かしつつWiresharkでUSBの通信を見てみると、カードをかざしたり外したりするたびにずらずらパケットが流れるのが見えましたが、結局どれがどういう意味を持つパケットなのかわからずに終わってしまいました。FeliCa(NFC)規格とPaSoRi(カードリーダのブランド)のパケットがごっちゃになっているのかなあと予想しました。

libpasoriやlibpafeといったライブラリが開発されていましたが、いずれも動作しませんでした。中古のWindows機を手に入れたので、うまいこと解析して部室の鍵開けを使い道のないICOCAなどでできないだろうかと考えています(電通大MMAのKagisysのイメージです)。

MacのACアダプタ

5年弱使っていた純正のMagSafe1 ACアダプターが断線してしまったのでAmazonから安い非純正品を買いました。

使い始めてから1年ほど経ったある冬の夜、部屋のベッドに座って壁にもたれつつ脚を伸ばし、そこに掛け布団を敷いた上にさらにMacBook Proを載せて使っていました。 そうするとすぐ寝落ちしてしまいました。1時間ほど経って目が覚めました。

Macを充電していたケーブルを取り払おうとアダプタに触ると…熱い!いままでとはひと味違う熱さと焦げ臭さを放っています。布団に長時間挟まれて熱がこもっていたようです。

Mac用ACアダプタは白い角丸ボディが特徴で、その非純正品もデザインを踏襲していました。しかし目の前にあるアダプタは変形して工業製品というより粘土工作のような形になっています。 つなぎ目の部分があらわになっていて、爪を入れて力を加えると中の電気部品が見えます。

その後数ヶ月ほどで完全に充電できなくなってしまったので、新しいアダプタ(やはり非純正品)を注文した後に変形したアダプタを分解してみました。 ケースのつなぎ目に(物理的な)鍵を差し込み「てこ」のようにしてこじ開けると、白い長方形の基盤にコンデンサやトランスが載っていました。2辺は金属板に挟まれています。よく見るとケース内部に焦げたような跡もあります。 基盤とケースもボンドのようなもので雑に固定されていたので、また鍵を隙間に差し込み外しました。 基盤の裏側には厚膜チップ抵抗(調べて名前を知った)が十数個ハンダづけされています。「新HD60P02A」と型番がプリントされています。

見るだけでも楽しいですが、せっかくなので部品を取り外すことにしました。 はんだごでではんだを熱して、液状になったのを向こうに弾き飛ばすという怪しい方法を使います。学校の実験で先生が「あんまり推奨される方法ではないけど...」と言いながらやっていたのを真似しました。はんだ吸い取り線は持っていません。

外側からケーブルとの接続部分、金属板、よくわからない素子、というように外していきました。小さい部品は大変でしたが一個一個外していくと基盤表面の印刷が見えてきました。金属板があった場所には「HS2」と書いてあったのでたぶん放熱用のヒートシンクではないかと思います。 大きなコンデンサやトランスも収穫できました。使いどころはありませんがそのまま取っておいて、いまの充電器が変形したら分解して比較するつもりです。

MacBook Pro (2012 Mid)

突然電源がつかなくなってしまいました。Macが動かなくなった際の常套手段であるPRAMやSMCのリセットを試しても変化がありません。 いろいろと調べるとバッテリーを付けて取り外すこと(放電)で直るかもしれないとわかったのでドライバーを借りてきて分解し、無事起動することができました。このMacは古いのでまだネジが公の場に姿を表しています。知り合いの薄いMacBookを見るとネジ穴もポートもないので、なんだかなあと思ってしまいます。この件以来Macの分解をよくするようになりました。

情報工学研究部の部長として、コンピュータの基礎的な部分を講義することがあります。そんなときもどこからともなくドライバーを取り出してMacの裏蓋を外し「これがSSDです」と見せると下級生もドン引きして印象に残るようです。 また、これは分解ではありませんが作業中にFキーとNキーのカバーが飛んでいきました。カバーの下のゴムが丸見えになって、メンブレンキーボードの仕組みがよくわかるようになりました。

CTFのrev, network, android rom

最近はあまりプレイできていないのですがCTFが好きです。その中でもpwn/Binary exploitation・reversingといったジャンルを好んで学んでいます。低レイヤに興味を持ったのも、NICT主催のSecHack365というハッカソンに参加したのも元をたどればCTFがきっかけで、そこではコンパイラ(LLVM)やエミュレータ(QEMU)の改造をしていました。成果発表会で使った[ポスター] (https://sechack365.nict.go.jp/achievement/2018/?2018-34) が公開されています。

Android, iOSアプリを解析する問題もあったので、mitmproxy, otool, Fridaなども使ったことがあります。ARMアセンブラは勉強中で、まだx86とPICのそれしか読めません。

ブログ

普通の電卓

昨年の夏頃に中華人民共和国・某省某所のとある工場長の方からTwitterのDMで連絡をいただき「電卓を作りたいんやけど手伝ってくれん?」と連絡があり、いろいろと自分なりに調べていました。 とりあえず既存のものにどういう部品が含まれているか見てみようということで安い電卓を仲間で集まって分解してみました。 外から見える部品には7セグのディスプレイ・光電池パネル・ボタン用に穴が開いたフレーム・多数のボタン。ボタンはシリコンで出来たシートの突起と噛み合っていて、ボタンを押すと突起の裏側にある黒い膜がPCB基盤の丸い部分に触れる仕組みになっています。

PCB基盤をひっくり返すと「CT060」という型番らしきものが刻印された緑色の面があります。7セグディスプレイがフラットケーブルで接続され、ボタン電池が基盤のホルダーのようなものに入っています。電卓を買ってきて光電池を充電しなくてもすぐ使えるのは基盤に直でボタン電池を取り付けているからだとわかりました。明るい緑色で少し光沢を持った線が多数伸びています。その線は基盤中央から少し上にある黒い円に入っていきます。この中に計算を処理するチップが入っているのではないかと推測しました。黒い円はエポキシ樹脂という熱硬化性をもつ素材です(おそらく)。 円形の黒いエポキシ樹脂を溶かして覆われたチップを取り出す方法も見つけました。「熱硬化性の素材は一度固めると特殊な溶剤なしには溶かすことができない」というオンライン辞書の記述は一度無視することにしました。

https://www.youtube.com/watch?v=OiPe6f4Oh8E では熱湯に基盤ごと入れて熱する方法が紹介されていました。一般的なエポキシ樹脂のガラス転移温度(Tg; この温度を越えるとやわらかくなるらしい)は75℃のものから250℃を超えるものまであるので、水を沸騰させて100℃にすれば電卓の樹脂も溶けるかもしれません。実際に試したところ、何の変化も得られませんでした。

次は https://www.wikihow.com/Remove-Epoxy で見つけたはんだごてで熱する方法を試してみました。普段使っているはんだごては30W, 480℃なので熱湯よりは期待できます。実際に熱したはんだごてを当てて数十秒待つと黒い樹脂の表面がぬるぬると溶けてこて先が滑る感覚がありました。これならいけそうだと思い1時間ほど当てて見ると、1mm四方取り除くことに成功し下の基盤が見えました。円は半径8mmほどで、面積はπ88=201mm四方です。201時間はんだごてを当て続けるのは定年退職後の暇つぶしにとっておきたいので、別の方法をあたることにしました。

とにかく高熱に当てればよいことがわかったので、部屋にあったオーブントースターで基盤を熱してみました(これもどこかのサイトに書いてあったことですが、リンクをなくしました)。しばらく放置しておくと「ポン!」と破裂音。基盤を取り出すと小さくて気づかなかったLEDが赤く光っています。ボタン電池を取り外さずに熱して、回路がショートしてしまったようです。電卓の筐体の外から見えない場所になぜこのLEDが存在するのかはわかりません。基盤は熱でプリントが膨らみところどころ気泡ができていました。PCB基盤の層構造を体感しました。

見つけたアプローチの中でまだ試せていないのがヒートガンで熱する方法です。これ以外に使用する場面がなさそうで購入をためらっています。

関数電卓

エポック樹脂が剥がせなかったので、他の電卓を探して分解することにしました。古い関数電卓なんかは樹脂で覆われていない場合もあるそうなので、メルカリの500円クーポンを使って490円の中古関数電卓を買いました。複素数の計算すらできないCASIOのfx-290です。届いてからさっそく分解してみると…そこには黒い光沢のエポック樹脂がありました。蓋をそっと閉じて、いまは机の引き出しの奥に眠っています。

BLEな電球

どこかの勉強会のスライドを見て触発され、IoTなハッキングがしたくなったのでAmazonで安いBluetooth対応の電球を買いました(「Matchdor」というブランドで今は見つからず)。 スマホと機器間のBluetooth通信を取ってくる方法としてAndroid端末でHCIスヌープログという機能がよく紹介されています。しかしiPhoneしか持っていなかったのでApple公式のデバッグ用プロファイルを導入するなどしてなんとかログを取ってきて読んでみましたが、これもGATTなどプロトコル周辺の関係がよくわからないまま放置されています。

家の古いルーター

802.11nにすら対応していない家のBUFFALO製無線LANルータ(型番はWHR-AMG54)につながりづらくなってきたので新しいルータを卒業式の帰りに買ってきました。

古いルータは特に使い道がなかったのでバラしてみました。どことなく年季が入っていてホコリだらけです。中に緑色のPCB基盤が入っていて、BroadcomとEtronTechという会社のチップが見えます。

基盤の印刷を見ていると端の方に「WHR4-AG54A REV:XC」という表示を見つけました。製品の型番と似ても似つかない名前なので検索してみると中国語のフォーラムが出てきました。JTAGのポートが装備されているようです。データを読み出す方法がわからなかったり調べてみるとbaudrateを特定するのに別途キットが必要だったりすると知って以降は触ることができていません(Bus Pirate・Shikraといったハック用のツールや、汎用的に使えるオシロスコープ・ロジアナもどれがよいのかわからなくて定期的にAliexpressを覗いては足踏みしています)。

問2: あなたが今一番リバースエンジニアリング(分解して仕組みが知りたい)したいものを紹介して下さい。

この前頼まれて実家のテレビでAmazon prime videoが利用できるようにFire TV Stickを購入・接続しました。 Fire TV Stickは無線LAN経由でインターネットに接続して動画をダウンロードし、それをHDMI経由でテレビの画面に流すものです。あの小さい筐体の中に何が入っているのか気になります。

パソコンでprime videoを視聴しようとするとContent Decryption Module (CDM)なるものをインストールされました。DRMのために使用されているようです。prime videoで利用されているのはWideVineという種類で、他にもPlayReadyというのが人気のCDMです。よってパソコンの代わりとして映像を受け取るFire TV Stickにもそういった復号モジュールが入っているのではないかと予想して、楽しそうだなと思いました。

これを操作するリモコンにはAmazon Alexaに対応した音声認識機能がついています。後述するように昨年Amazon Alexaスマートスピーカー(Echo)を使った開発をして知識が少しあるので、それとの違いにも気付けるかもしれません。スマートスピーカの分解も楽しそうです(https://vanderpot.com/Clinton_Cook_Paper.pdf )。https://www.amazon.co.jp/Fire-TV-Stick/dp/B01ETRGGYI#tech (技術仕様) によると、プロセッサはARMアーキテクチャのものを採用しているようです。詳しい型番は書かれていません。

問3: 以下の技術用語について解説してください。またどのようなところで使われているかも述べてください。

「UART」「JTAG」「SPI(Serial Peripheral Interface)」「I2C(I-squared-C)」

UART

Universal Asynchronous Receiver Transmitterという原語が示す通り、マイコン等と非同期通信をするための規格。データ転送速度はボーレートで示され、9600baudがよく用いられる。 一つのパケットに入るペイロードの長さは5〜9bitであり、その前後には送信の開始・終了を知らせるための特定のビットを付け加えるためデータ量は大きくなる。また誤り修正のためのパリティビットが付けられる場合もある。

端子は信号送出側のTXと受信側のRXのみであり、互いのTX端子を互いのRX端子に接続するので送信と受信は同時に行える。JTAGやSPIのように3つ以上で相互に通信するにはTX, RX端子をまた別途用意する必要がある。 たいていのマイコンではUARTやその同期通信バージョンであるUSARTが利用でき、センサ等と通信できるようになっている。また、外部からのデバッグや検査のために機器と通信できるように基盤にUARTポートを設ける場合も多く見られる。そういった機器の例としては家電製品やIPカメラが挙げられる。

JTAG

Joint Test Action Groupの略で、基盤の検査・デバッグに用いられる端子・検査方法(バウンダリスキャンテスト)の規格。半導体技術の進歩で基盤上の素子の密度が上がり、プローブを手で差して測定器(オシロスコープとか)を見て検査するやり方が難しくなったために作られた仕組み。端子にはTDI(Test Data In), TDO(Test Data Out), TCK(Test Clock), TMS(Test Mode Select)、オプションのTRST(Test Reset)がある。

もともとはバウンダリスキャンテストに用いられていた。バウンダリスキャンテストは基板上でICとICをつなぐ導線がショートしたりちぎれたりしていないか確かめるためのテストで、検査用のビット列を入力して、それに対応する出力を見ることで検査する。JTAGが普及する以前は導線を一部太くしてテスト用のランドを設けプローブで検査できるようにしていた(イン・サーキット検査)。代わりにJTAGではIC内部(入力・出力ピンと処理部分の間)にテスト用のセルを設けることで、ICの外の基盤の構成をよりシンプルにできるようになっている。また、単なるランドではなく回路としてのセル(プローブとランドを合わせたようなもの)を挿入することで、導線を横切るようにセル同士をつなげられる。さらにそれぞれのICでつなげたセルたちを(TAPコントローラのTDI/TDO端子を介して)デイジーチェーン接続することで機器全体の検査が少ない端子で行えるようになった。

ICごとに付けられるTAP(Test Access Point)コントローラはTMS端子からの入力によって「ステート」を切り替え、TDIから命令をIR(Instruction Register)に流し込むことで動作を切り替える。

DRにはBYPASSレジスタ, IDCODEレジスタ, バウンダリスキャンレジスタなどいくつか種類があり、IRの値に応じてどのDRを操作するか決定する。 IRに格納される命令は規格で定められているものもあれば、メーカが独自に拡張するものもある。

  • BYPASS命令はTDIから入力されたビットをBYPASSレジスタに入れてそのままTDOから出力する命令。1ビットのBYPASSレジスタに一度貯めることで1クロック出力を遅らせる効果があり、機器全体ではTAPコントローラの数だけクロックが遅れる。その遅れを観測することで機器内のTAPコントローラの数が合っているか確かめることができる。
  • SAMPLE命令とPRELOAD命令はバウンダリスキャンレジスタを通じてデバイスの入出力を取得し、同時にバウンダリスキャンレジスタにテストパターンを書き込むことができる。厳密にはこの2つは異なる命令だが、同じSAMPLE/PRELOAD命令として動作させることが推奨されている。
  • EXTEST命令はバウンダリスキャンレジスタの値をそれぞれのピンから出力する命令。また、その出力を入力として受け取る側でCapture, Shift, Update-DRステートに移行することで入力を取りだせ、テストパターンを比較することでバウンダリスキャンの結果を知ることができる。
  • 他にもINTEST, IDCODE, RUNBIST, CLAMP命令などがある。

ステートについて、

  • Shift-IRステートではTAPのIR(Instruction Register)にTDIから命令(メッセージ)を流し込むことができる。同様にShift-DRステートではDR(Data Register)にデータを流し込むことができる。
  • Capture-DRステートでは回路の情報を取得してDRに格納する。逆にUpdate-DRステートではDRの値を回路の別の場所に格納する。具体的にどのような情報を取得するかは命令に依存する。
  • Update-IRステートではIRに格納された命令を実行する。Capture-IRステートでは「ステータス」と呼ばれる値をIRに格納する。

JTAGでは先述したようにメーカ・モデルによってさまざまな拡張がなされている。拡張の一部を知るためにはメーカが提供するBSDLファイルを用いることができる。他にもARM製プロセッサに搭載されているCoresightというデバッグシステムや、JTAGの4本の導線を2本に減らして派生したSWDという規格があるようだが、JTAGとの関連はよくわからなかった。JTAG-ICE(In-Circuit Emulator)と呼ばれるデバッグ用の装置もあるが、単純にJTAGポートに接続してデバッグを行うこととの違いは不明である。

製品検査のために策定されたということもありUART同様さまざまな機器の基盤にデバッグ用のポートが設けられている。逆に、機器内で完結する通信(センサ-マイコン間など)については他のプロトコルがより用いられていると思われる。個人的には最も身近な例として先述した実家のルーターが挙げられる。この基盤のBSDLファイルは入手できなかった。

SPI

Serial Peripheral Interfaceの略で、機器に入っているICが他のICと通信するためのプロトコル。数Mbps程度で比較的高速に通信できる。 端子にはSCK(Serial Clock), MISO(Master In Slave Out), MOSI(Master Out Slave In), SS(Slave Select)がある。SCK(Serial Clock)があることからわかる通り、SPIはクロックで同期を取って通信する点が非同期通信のUARTと異なる。また、SPIでは接続されたICは1つのMasterと複数のSlaveに分けられる(Masterは多くの場合マイコン)。MISOはSlaveからMaster、MOSIはMasterからSlaveへの通信に利用する。SSは複数のSlaveのうちどれと通信するか選択するために用いるもので、通信したいSlaveとのSS出力だけを0にセットする(通信しない状態では常に1)。これらのためにUARTやI2Cよりも必要な接続線が多くなっている。

JTAGではTDIとTDOにデイジーチェーン接続を用いていたが、SPIのMasterとSlaveの接続はスター型をとることもできる。それぞれのSlaveと別々に通信したい場合はSSを分けMOSI, MISOをスター型に接続する。逆に複数のSlaveをまとめて一つと捉えたい場合はSSを一本にしてMOSI, MISOをそれぞれ前後に隣接するSlaveにデイジーチェーン接続することができる(MISO, MOSIのMaster側は必ずしもMasterそのものである必要はなく、Masterからの信号が間接的に渡されてくればよい)。この場合は1クロックずつずれてデータがSlave間で転送される。しかしながら、デイジーチェーン接続に対応していないデバイスも存在する。

またMaster側のSPIコントローラのレジスタを通じてCPOL(Clock Polarity)とCPHA(Clock Phase)を指定することで、アイドル時のクロック信号を1と0のどちらに固定するかやクロックの立ち上がり・立ち下がり時の処理を指定することができる。

Intelが拡張したeSPI(Enhanced SPI)という仕様も存在する。Alertという端子を追加して、SlaveからMasterにイベントを通知できるようになっている。

どちらかといえばセンサとマイコンマイコンとアクチュエータ間といった機器内の通信用に主に用いられている。

I2C

Inter-Integrated Circuitの略。SPI同様機器内の通信に用いられる。UARTと違って同期通信ではあるが、先頭と末尾に一定のパターンを加えてからメッセージ単位で送信する。 端子にはデータを送受信するためののSDAとクロックを供給するためのSCLがある。

UARTでは1対1の通信しか行えなかったが、I2Cではメッセージに宛先アドレスを含めることで多対多のネットワークを構築できるようになっている。SPIと同じくMaster・Slaveという区別を採用していて、通信はMasterから始める。Masterも複数接続できる。メッセージのRead/Writeビットを切り替えることで、MasterからデータをSlaveに投げるのか、それともSlaveからデータを送るよう要求するのか区別している。

メッセージには任意個のデータフレームを含めることができる。それぞれのデータフレームの長さは8ビットで固定である。データフレームを送信する前後で受け取り側は送信側にACK/NACKビットを返答する。ACK(Acknowledge)はTCPのそれと同じ意味で、データを正しく受け取った場合はACKとして1を、そうでない場合はNACKとして0を返す。

こちらは機器の基盤にポートが設けられている例は見つけられなかったが、温度センサなどでSPIを介して通信できるようになっているものは多数見受けられた。

参考文献

問4: 安全なファームウェアアップデートとは何ですか? もし、それができると攻撃者はどのような攻撃ができますか?事例などもご存知であれば合わせて紹介してください。

実はこの設問の意味が理解できていなくて(「それができると」のあたり)、全くトンチンカンなことを書いているかもしれませんが容赦ください。 安全なファームウェアアップデートを行うためには、ネットワークを経由してダウンロードしたファームウェアがベンダ正規のものであり、改ざんされていないか確認するため、アップデート時に署名を確認させるのが有効です。

バイス側の鍵は(使用するのであれば)専用のセキュリティチップ、TPM(Trusted Platform Module)やARMでいえばTrustZoneのような仕組みを活用して隔離した場所で管理すべきです。そのような鍵にはたとえばベンダの公開鍵そのものの正当性を確認するためのルート認証局の公開鍵や、共通鍵暗号を利用する場合はその共通鍵が考えられます。また鍵を別に用意してファームウェアそのものを暗号化するベンダもあります(Philips, Samsungのテレビなどがそうだったように思いますが、リンクを失くしました)。

これらの対策ができる場合でも、攻撃者はアップデートに関係しない部分からファームウェアを改ざんするなどして攻撃を加えることができます。基盤のデバッグポートを利用したりチップを取り外したりして、もしくはファームウェアそのものの脆弱性を突いて(スマートテレビのOSコマンドインジェクションがわかりやすい例)ファームウェアをダンプし、解析・改造して書き込み直すといった方法があります。

問5: 何か他にアピールしたいことがあれば、自由に書いてください。誤ったことを書いていても減点はしません。書いておきたいことはなんでも書いてください。

問1で述べたとおり、何かを分解するのはそれだけでも楽しいのですが、毎回その仕組みがよくわからないまま終わるので何か一つでもしっかり解析してみて流れ・コツを掴みたい、またseccampでしか学べない最新の技術に触れたいと思い応募しました。

昨年度の全国高専プログラミングコンテスト(高専プロコン)の課題部門に出場しました。私の学校のチームは「スマートコンシェルジュ」という民泊事業者と外国人宿泊者をスマートスピーカ(Amazon Alexa)を使いつなげるシステムを構築して出展しました。例えば家電の操作を宿泊者の母国語でできるようにしたり、近所の有名なスポットを教えてあげたりということができます。当日はブースを構えてデモを行う必要があったので、何らかの家電を見に来た人に声でライトの電源を操作してもらうことにしました。そのためにはコンセントからの電源入力を遮断・導通できるいわゆる「スマートプラグ」が必要になります。Amazonで普通に買っても良かったのですが、せっかくなのでいろいろと調べて自作しました。電源ケーブルの片側を切断したところにRaspberry Pi制御のリレーを差し込むという単純なものです。そうやって切ったり付けたりして何かを作るのはずっと好きですし、学校でもなぜか電気のことを学んでいるので(コンデンサ・共振・三相交流etc…)何かハードウェアにも活かせないだろうかと考えています。

以上です。よろしくお願いします。

前回応募時との比較

2年前の5月に応募して不合格だったときといろいろ比べてみました。スキル面でいえば、もともとWebとiOSメインだったのが、競プロやってAtCoder水色になったり(もう一年半近く参加してないけれど…)CTFの手で動かしていろいろ学んだり、それが転じてSecHack365に応募してコンパイラを改造したり、というレイヤが下がっていった感じです。結果的に知識を広く浅く身につけることになったと思います。選択問題のあるコースでは今のほうが選べる手札が多いはずです。何かに絞ってがんばろうというのは何度かやってみましたが飽きて続かなかったので諦めました。

SecHack365でお世話になったトレーナーさんにもキャンプ講師を務めている人が多いので、なんとなく書きやすかったような気はします。もっとも応募したゼミの講師はトレーナーではないので、本当になんとなくです。不思議ですね。

そして前回と違ってコース・ゼミ選択で迷う時間がほとんどなかったと思います。特に選択コースは幅が広いのでどれどれに行きたいな、ああこれとそれは被ってるなと考えてしまいがちです。Twitterでフォローしている人がゼミの講師をやるというのを知って空リプしたら是非応募してねとリプライが来たのでそこに決めてしまいました。もともとリバエンゼミは2年前のときも第1か第2候補でした。そのままストレートに用紙作成に移れたのはよかったかなあ。というか書いたり調べたりしている内にそれについてさらに興味が出てきました。

文体は変えました。前回ははじめから終わりまで真面目に書いていたように思います。今回もまあ誰が読むかわからないからきちんとした文章を書こうと思っていました。とはいえ設問の内容が「問題を解いてください」系ではなく「好きなだけ語ってください」系で、何かもう一つ書けることないかと繰り返し繰り返し探しているうちに内容そのものがよくわからないモノになってしまったのでブログのノリで書くことにしました(読んだ方はわかると思います)。

これも文章に関わる話ですが、熱意を伝えるとかそういうことは考えないようにしました。もしくは熱意≒文章量という近似式で捉えるようにしました。結局熱意ってなんだ、となって筆が進まなくなったからです。また、いろいろなタイプの人に会ったときに熱意を表現するのが上手な人とそうでない人といて、自分は後者じゃないかなあと思ったからです。もちろんその感覚が間違っている可能性も多いにあります。とりあえず書けることをわかりやすいように書きました。

アウトプットをしようというのはよくある話です。不合格になってから実際自分もCTFで解いた問題のwrite-upなどをブログやScrapboxにまとめるようにしていました。またこういった場で使うことを予想して部活での資料等もなるべくまとめて公開するようにしていました。普段から作業メモをScrapboxの一箇所にまとめるようにしていたのもかなり役立ちました(記事にしなくても箇条書きで残している思考過程やログ)。文章ベースのアウトプットは何かを「作るプログラミング」をしていない人にはなおさら必要な気がします(競プロとか)。また、自分で書いたプロダクトは未完成のもの小さいものが多くて説明を書くときにあまり自信を持てなかったのに対し、ブログの記事等は特に見返さないのでしょうもないものでもURL貼ってハイ終わりで済ませてしまえたのも用紙を仕上げるという観点からいえばよかったかもしれません。完成形のモノ作るのって大変ですよね…。設計や開発技法もそのうちどこかで勉強してみたいです。

どこかでseccampの選考は運ゲーだという話を見ました。自分より優秀なのに落ちてしまった人もいるかもしれません。選考に通ったら優秀、というのもなんだかプレッシャーを感じるのでなんだかなあと思います(いやプレッシャーも少しは感じたほうがいいのかもしれない)。このへんの議論もまた「優秀ってなんだ?」という話に流れるなどして上手い人に持ってかれそうなのでやめておきますが、確かに定員がもっと増えてくれればな〜とは思います。GCCアラブ諸国と一緒にやって石油王に賛助会員になってもらうとか…やっぱり難しいんですかね?


過去にはミニキャンプ(北陸)とジュニアキャンプ(高知)に参加していました。だいぶ前だと思います。ロボットカー動かしたりXSSしてみたりして楽しかったです。夕食で刺身のツマを食べようとしていたら店の人に持っていかれて残念がってたとき、隣に座っていたのはかの有名なバグハンターの方でした。夜の講話のときに「全国応募する人〜!」という質問があってほとんどの人が手を挙げているなか、「もうちょっと実力貯めてから行きたいな」と思って手を挙げなかったのを思い出します。数年で貯めた実力を発揮できるよう、そしてさらに伸ばせるよう手を動かしていきます〜〜〜