この記事は旧ブログの記事を機密解除の折に移行したものです。内容は齟齬が無い限り当時のままです。
この記事には以下の要素が含まれます
- 古のテンション
- 課金コンテンツ
- 悪用厳禁のドリフ漫才
経緯
弊学(簡易版では一応伏せる)では FeliCa Standard 搭載の学生証をゲートや出席管理システムなどありとあらゆる場所にかざして認証します。ちなみに当初は Edy 決済機能を搭載する予定だったようです。
一年生のとき、スマホで学生証を作った先輩が居るという話を所属部活で小耳に挟みました。
結局いろいろ調べたところ、数年前に他部活に訪れた学生証を読むブームの話が変化して伝わったものらしいという結論になりました。なので無いなら作ろうと決心しました。制作アプリのスマホde学生証
という名前はその時の強い印象に基づいています。
前提知識
NFC と FeliCa、HCE について知ります。
HCE-F とその制限について知ります。
AndroidのHCE-Fについて調べてみたメモとサンプルソース – Qiita
通信解析
脚注:以下のFelicaRelay、FelicaRePlayの機能はFelicaToolsのrelay.py, dump.py, emulate.py に移行中です。FeRelay の開発は凍結しています。
いろいろすっとばして成果物をば。
OLIET2357/FelicaRelay: Relay FeliCa Exchange
こいつは二台の RC-S380 を用いることで FeliCa 通信をリレーできるスグレモノです。
黎明期には某感染症で閉鎖されたキャンパスにてこれのプロトタイプを稼働させて通信を見ていました。
二台のデバイスを挿したノートパソコンを片手にデバイスをリーダにかざすその姿はあまりに珍奇であったそうな。
そして通信データを単騎でエミュレートするプログラムFelicaRePlay を作成しました。
いちいち直書きでプログラムを変更していた当時から時は経ち、今ではFelicaRelay
の出力をそのまま食わせるだけで非暗号通信のみエミュレートできます。
名前が紛らわしすぎるという苦情は永遠に受け付けています。
暗号化通信を行っていなかったため弊学の多くのゲートや出席管理システムはPaSoRi
のエミュレートの餌食となりました。
なお、当時唯一証明書発行機だけが暗号化通信を行った上にパスワードまで要求するという鉄壁ぶりでした。
理由としては交通系 IC カードのみで発行代を決済する機能がついていたため、そのおまけで暗号化通信をしていた可能性が高いです。
リレーは依然可能でした。証明書自動発行機は撤去されましたが学生証がFeliCa Standard らしく暗号通信をする貴重なデータでした。
FelicaRelay
をパソコン・スマホのクロスプラットフォームにしたFeRelay
を用いれば、決済を含め遠隔地でのリレーが理論上可能です。
なおFeRelay
は機能が複雑で制作が難航しています。寄付をする
名前が紛らわしすぎるという苦情は永遠に(ry
スマホアプリ
さて、本題のスマホアプリ化ですが、大きな問題がありました。
前述の HCE-F の制限によりろくすっぽ見ていない応答に必要なシステムコードに制限が設けられています。IDm
はともかく
既存のカードをエミュレートさせないための制限ですが、フレームワークレベルの処理であるため Xposed モジュールで迂回が可能でした。
免許合宿中に制作したモジュールHCEFUnlockerを使えば HCE-F のIDm
とシステムコードの制限を解除できます。
詳しくは旧ブログのこの記事を御覧ください。
アンドロイドアプリ 任意のFeliCaカードエミュレータ(要Root) – OLIETの自由帳
Root 化が可能な上 HCE-F 搭載の端末、Google Nexus 5X, Pixel 6a と Huawei Honor 8 での動作を確認しました。
これらを使用してアプリスマホde学生証
を制作することができました!
でも見境なく誰にでも成り済ませるので公開できません!(おや…?上のリンクが?)
詳細版に詳細な手順なんて載せてません!!(まだ書いてないので)
BOOTH で初期設定済のスマホなんて売ってません!!!(本当に売ってない)
ちょっと真面目な話
暗号化通信をしないという選択は尊重されます。コストとセキュリティのバランスを取ることは重要なことです。災害時の人数管理用のゲートや出席管理システムは偽造されても良いという判断なのでしょう。それは納得できます。しかし高価な機材や設備がある部屋の入退館システム、果ては警備システムまでもが非暗号通信というのはどういう了見なのでしょうか。コスト削減では済まされません。大方カード自体のセキュリティの高さの説明を受けていたのでしょうが、その機能を使わないのですからお粗末なものです。
見えない部分のセキュリティは軽視されがちですが、悪意のある者に目を付けられれば最期、完膚無きまでに付け入られるということを覚えておいてください。
宣伝
この記事の完全版を技術書典14(間に合わなかった)と BOOTH で千円で販売します!
内容は
- FCF の仕様の独自解析
- FelicaRelayの使い方
- スマホde学生証の作り方
の3本です(予定)。
頑張ったんでお小遣いください(はーと)
“学生証エミュレートの奏功(抜粋版)” への4件のフィードバック
公開はいつになりますか?
千円札持って待機しています(笑)
ありがとうございます!
五月までには書き終えたいです(笑)
待ってます!✨
[…] 成功例:学生証エミュレートの奏功(抜粋版) […]