皆さんはSuicaやmanacaといった交通系ICカードを使ったことありますか?
現在の日本ではかなり広く普及していて、都市部であればICカードが使えない交通機関なんてほとんど見つけられません。
そんな交通系ICカードの残高を確認できるアプリが存在するのをご存じですか?
残高が少ないとなんか悲しいのでこの値を偽装していこうと思います。
犯罪じゃないよ...
「はぁ?それ犯罪じゃん!」って思った方。通報しないでください... 今回紹介する方法は簡易的な残高確認アプリに好きな値を表示できるだけです。
詳細な説明は省きますがSuicaなどの交通系ICカードには読み書きに認証が必要なエリアと、認証不要で読み込みのみ可能なエリアが存在します。
店舗での支払いや、交通機関の乗車時に使用するデータはすべて認証が必要なエリアに書き込まれています。
認証が必要なエリアへのアクセスは不可能に近いので残高を無限に増やして無限に買い物するといったことはできません。
こういったシステムの敵はガチのプロの天才ハッカーたちです。そんな人たちでもできないように作られているので僕には絶対に無理です。
認証が不要なエリアには残高や使用履歴(直近20件程度)が書き込こまれているのでここを偽造します。
方法
先ほど認証不要エリアに書き込まれている残高データを偽装すると説明しましたが、ここは書き込み不可エリアなので書き換えができません。
そこでST25R3916というカードエミュレーション機能を持ったICを使います。
タイトル詐欺っぽくなりましたが、ここからが本題です。
ST25R3916はNFCリーダーICでNFCカードと通信を行えます。
この機能の一つがカードエミュレーションで、ICをNFCカードのように動作させることができます。
つまり、カードエミュレーションを使ってアプリから送られるデータを処理し、好きな残高を含めたデータを送り返すことで残高確認アプリをだますことができるというわけです。
必要なもの
- ST25R3916
カードエミュレーション機能を持ったICです。
IC単体だとアンテナまで設計する必要があるのでモジュールを買いましょう。 僕が使用したのはNFC 4 Clickです。 - 任意のマイコン
ST25R3916を制御するコンピュータです。
色々なプラットフォームで動作するライブラリが用意されているのでわりと何でもいいです。
僕は部屋に転がっていたXIAO RP2040を使ってます。 - RFALライブラリ
RFALとはST25Rシリーズ向けのライブラリです。ST25R3916用はここからダウンロードできます。
使用するには使うマイコンに合わせたplatform.hが必要です。これはマイコンごとに作る必要があるのでドキュメントを読みながら頑張って書いてください...
続きは今度...
短い記事ですが書いてる途中に力尽きました...
続きはまた今度書きます...