Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Androidで              FeliCaの履歴を読もう                     2012/12/09                 Fukuoka NFC Hack 6                     ...
本発表の対象              • Androidで開発する機会のある方              • Nexus7などNFC機能搭載Android端末をお持ちの方              • Suica/WAON/nanacoなどF...
本発表のゴール              • ご自身のAndroidアプリにNFC機能を実装できるよ               うになりましょう。              • また、FeliCaの履歴読み取りなど厳密にNFCの規格     ...
NFCの標準規格              • 基本的にNDEFデータによって通信               • NDEF …… NFC Data Exchange Formatの略で、                 MessageとRec...
Android NFC API              • Gingerbread (2.3) / API 9から対応。              • ICS(4.0) / API 15からはP2P機能も実装することがで           ...
コード例              • NFCタグを発行するなら(注:もろもろ省略)                      NdefFormatable ndefFormatable;                      ndefFo...
NDEFの中身              • 例:特定のWebページのURIを含むNFCタグ(かざ               すと暗黙的Intentが飛びます/ページを開きます)12年12月9日日曜日
こんな感じに書きます              NdefMessage mMessage;              mMessage = new NdefMessage(new NdefRecord[] {                  ...
FeliCaとNFC              • 定義を確認               • FeliCa …… カードやチップの製品名(ブランド)。デ                 ータ構造含めてJIS X 6319で規格化。      ...
Advanced NFC              • http://developer.android.com/guide/topics/                connectivity/nfc/advanced-nfc.html  ...
FeliCaの仕様を調査              • ブロック              • サービス              • エリア              • システム12年12月9日日曜日
ブロック              • FeliCaのメモリに対する書き込み及び読み出しにお               ける16バイトの単位のことです。              • R/Wから直接扱えるわけではなく、ブロックへのア     ...
サービス              • ファイルシステム上のブロックをグループ化したも               ので、ブロックへのアクセスを提供します。              • 各サービスはサービスコードによって特定します。12年12...
エリア              • 不揮発性メモリ領域の使用可能な残ブロック数や               サービスへのブロック数の割り当てを管理する単               位です。              • 複数のサービスを含...
システム              • 論理的なカードの単位です。              • 1枚のカードには用途に応じた複数のシステムを含               むことができます。              • リーダ/ライタがシス...
FeliCaコマンド              • Pollingコマンド                • カードを検知するためのコマンドです。                • パラメータとしてシステムコードをもちます。          ...
実際のFeliCa              • 独自に規定されており、(当然)どの領域に何のデ               ータが入っているかは非公開です。              • ただし、有志によって解析された情報がWeb上に    ...
各種情報              • Suica(など、サイバネ規格交通ICカード)                • システムコード:0x0003(サイバネ領域)                • サービスコード(履歴情報):0x090F1...
各種情報              • nanaco                 • システムコード:0xFE00(共通領域)                • サービスコード(履歴情報):0x564F              • WAO...
NfcF#transceiveメソッド              • 引数:送信バイト(FeliCaのコマンドを入れます)              • 戻り値:受信バイト(FeliCaのコマンドレスポンスが               返りま...
応用ソフトウェア              • 「かお(・ν・)もじ SF CHECKER」Android版              • 実はRequest Serviceコマンドいらなかった説。12年12月9日日曜日
FeliCaへのチャージは?              • 例のごとく、FeliCaコマンドが公開されていません               ので、チャージはできないです。   情報とかも分か               りませんし。     ...
まとめ              • AndroidのNFC機能を使ってFeliCaの履歴情報を読               み取る方法を解説しました。               • また、予備知識として以下を説明しました。        ...
Upcoming SlideShare
Loading in …5
×

AndroidでFeliCaの履歴を読もう

21,530 views

Published on

20121209 Fukuoka NFC Hack 6

Published in: Technology
  • Be the first to comment

AndroidでFeliCaの履歴を読もう

  1. 1. Androidで FeliCaの履歴を読もう 2012/12/09 Fukuoka NFC Hack 6 @treby00612年12月9日日曜日
  2. 2. 本発表の対象 • Androidで開発する機会のある方 • Nexus7などNFC機能搭載Android端末をお持ちの方 • Suica/WAON/nanacoなどFeliCaを使っている方12年12月9日日曜日
  3. 3. 本発表のゴール • ご自身のAndroidアプリにNFC機能を実装できるよ うになりましょう。 • また、FeliCaの履歴読み取りなど厳密にNFCの規格 から外れたことの実装法を理解しましょう。12年12月9日日曜日
  4. 4. NFCの標準規格 • 基本的にNDEFデータによって通信 • NDEF …… NFC Data Exchange Formatの略で、 MessageとRecordといったものがあります。  • NDEF Message …… NDEF Recordを一つ以上含みます。 • NDEF Record …… MIMEタイプで定められたメディアや URIやアプリケーションで定められたペイロードを含み ます。12年12月9日日曜日
  5. 5. Android NFC API • Gingerbread (2.3) / API 9から対応。 • ICS(4.0) / API 15からはP2P機能も実装することがで きます(いわゆるAndroid Beam)。今回は対象外。 • 簡単にIDを読み取ったりNFCタグを発行したり、 データを読み書きしたりできるのが特徴。12年12月9日日曜日
  6. 6. コード例 • NFCタグを発行するなら(注:もろもろ省略) NdefFormatable ndefFormatable; ndefFormatable = NdefFormatable.get(tag); try { ndefFormatable.open(); ndefFormatable.format(ndefMessage); } finally { ndefFormatable.close(); } • ndefFormatable.format(ndefMessage); • ndefFormatable …… NdefFormatableクラスインスタンス • ndefMessage …… 書き込むNDEF Message12年12月9日日曜日
  7. 7. NDEFの中身 • 例:特定のWebページのURIを含むNFCタグ(かざ すと暗黙的Intentが飛びます/ページを開きます)12年12月9日日曜日
  8. 8. こんな感じに書きます NdefMessage mMessage; mMessage = new NdefMessage(new NdefRecord[] { NdefRecord.createUri(“http://www.atelier-nodoka.net/”), }); ∼中略∼ ndef.connect(); ndef.writeNdefMessage(mMessage); ndef.close(); ……ほら、簡単でしょ?12年12月9日日曜日
  9. 9. FeliCaとNFC • 定義を確認 • FeliCa …… カードやチップの製品名(ブランド)。デ ータ構造含めてJIS X 6319で規格化。 • NFC …… 通信レイヤの標準規格で、データ構造は 範囲外。ただし、標準的なデータ構造としてNDEF がNFC Forumで定められている。 • つまり、NFCを使ってFeliCaを読み取るには適切にカ ードのコマンドを実装してあげる必要があります。12年12月9日日曜日
  10. 10. Advanced NFC • http://developer.android.com/guide/topics/ connectivity/nfc/advanced-nfc.html • 要約:Androidでサポートしていないテクノロジの カードを読み書きしたければ生のバイト列を用いて 通信してね。 • ……とかいいながらMIFARE ClassicとMIFARE Ultralight用のクラスが用意されてるあたりなんかず るい(一応オプションですが)。12年12月9日日曜日
  11. 11. FeliCaの仕様を調査 • ブロック • サービス • エリア • システム12年12月9日日曜日
  12. 12. ブロック • FeliCaのメモリに対する書き込み及び読み出しにお ける16バイトの単位のことです。 • R/Wから直接扱えるわけではなく、ブロックへのア クセスは後述のサービスを使用します。12年12月9日日曜日
  13. 13. サービス • ファイルシステム上のブロックをグループ化したも ので、ブロックへのアクセスを提供します。 • 各サービスはサービスコードによって特定します。12年12月9日日曜日
  14. 14. エリア • 不揮発性メモリ領域の使用可能な残ブロック数や サービスへのブロック数の割り当てを管理する単 位です。 • 複数のサービスを含むことができます。 • 今回はあまり意識しなくて大丈夫です。12年12月9日日曜日
  15. 15. システム • 論理的なカードの単位です。 • 1枚のカードには用途に応じた複数のシステムを含 むことができます。 • リーダ/ライタがシステムを特定するためにシステ ムコードが用いられます。12年12月9日日曜日
  16. 16. FeliCaコマンド • Pollingコマンド • カードを検知するためのコマンドです。 • パラメータとしてシステムコードをもちます。 • 物理的なカードとシステム(論理的なカード) を特定するIDmを取得することができます。 • Read Without Encryptionコマンド • 非暗号化領域のデータを読むことができます。 • パラメータとしてサービスコードをもちます。12年12月9日日曜日
  17. 17. 実際のFeliCa • 独自に規定されており、(当然)どの領域に何のデ ータが入っているかは非公開です。 • ただし、有志によって解析された情報がWeb上に あるのでこれを利用します。 • 特に履歴情報は非暗号化領域に書かれているの で扱いが容易です(だからこそ扱えます)。12年12月9日日曜日
  18. 18. 各種情報 • Suica(など、サイバネ規格交通ICカード) • システムコード:0x0003(サイバネ領域) • サービスコード(履歴情報):0x090F12年12月9日日曜日
  19. 19. 各種情報 • nanaco  • システムコード:0xFE00(共通領域) • サービスコード(履歴情報):0x564F • WAON  • システムコード:0xFE00(共通領域) • サービスコード(履歴情報):0x680B • Edy  • システムコード:0xFE00(共通領域) • サービスコード(履歴情報):0x170F12年12月9日日曜日
  20. 20. NfcF#transceiveメソッド • 引数:送信バイト(FeliCaのコマンドを入れます) • 戻り値:受信バイト(FeliCaのコマンドレスポンスが 返ります) • 注意:送信バイト/受信バイトにはそれぞれ先頭に コマンドバイト長が入ります。つまり、12バイトの コマンドならば先頭に0x0D(13 = 12 + 1(先頭バイ ト分))を付加しなければいけません。12年12月9日日曜日
  21. 21. 応用ソフトウェア • 「かお(・ν・)もじ SF CHECKER」Android版 • 実はRequest Serviceコマンドいらなかった説。12年12月9日日曜日
  22. 22. FeliCaへのチャージは? • 例のごとく、FeliCaコマンドが公開されていません ので、チャージはできないです。 情報とかも分か りませんし。 • 世の中おいしい話はそうそうないということです。 諦めましょう。12年12月9日日曜日
  23. 23. まとめ • AndroidのNFC機能を使ってFeliCaの履歴情報を読 み取る方法を解説しました。 • また、予備知識として以下を説明しました。 • AndroidのNFC機能 • FeliCaカードの技術仕様 • 実際にはカードへのアクセスはメインスレッドから 行わないようにしなくちゃいけません。12年12月9日日曜日

×