SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Androidで
              FeliCaの履歴を読もう
                     2012/12/09
                 Fukuoka NFC Hack 6
                     @treby006




12年12月9日日曜日
本発表の対象
              • Androidで開発する機会のある方

              • Nexus7などNFC機能搭載Android端末をお持ちの方

              • Suica/WAON/nanacoなどFeliCaを使っている方




12年12月9日日曜日
本発表のゴール
              • ご自身のAndroidアプリにNFC機能を実装できるよ
               うになりましょう。


              • また、FeliCaの履歴読み取りなど厳密にNFCの規格
               から外れたことの実装法を理解しましょう。




12年12月9日日曜日
NFCの標準規格
              • 基本的にNDEFデータによって通信
               • NDEF …… NFC Data Exchange Formatの略で、
                 MessageとRecordといったものがあります。 

              • NDEF Message …… NDEF Recordを一つ以上含みます。
              • NDEF Record …… MIMEタイプで定められたメディアや
               URIやアプリケーションで定められたペイロードを含み
               ます。




12年12月9日日曜日
Android NFC API
              • Gingerbread (2.3) / API 9から対応。

              • ICS(4.0) / API 15からはP2P機能も実装することがで
                きます(いわゆるAndroid Beam)。今回は対象外。


              • 簡単にIDを読み取ったりNFCタグを発行したり、
                データを読み書きしたりできるのが特徴。




12年12月9日日曜日
コード例
              • NFCタグを発行するなら(注:もろもろ省略)
                      NdefFormatable ndefFormatable;
                      ndefFormatable = NdefFormatable.get(tag);
                      try {
                              ndefFormatable.open();
                              ndefFormatable.format(ndefMessage);
                      } finally {
                              ndefFormatable.close();
                      }

              • ndefFormatable.format(ndefMessage);
                   • ndefFormatable …… NdefFormatableクラスインスタンス
                   • ndefMessage …… 書き込むNDEF Message


12年12月9日日曜日
NDEFの中身
              • 例:特定のWebページのURIを含むNFCタグ(かざ
               すと暗黙的Intentが飛びます/ページを開きます)




12年12月9日日曜日
こんな感じに書きます
              NdefMessage mMessage;
              mMessage = new NdefMessage(new NdefRecord[] {
                        NdefRecord.createUri(“http://www.atelier-nodoka.net/”),
              });


              ∼中略∼


              ndef.connect();
              ndef.writeNdefMessage(mMessage);
              ndef.close();


                                                        ……ほら、簡単でしょ?



12年12月9日日曜日
FeliCaとNFC
              • 定義を確認
               • FeliCa …… カードやチップの製品名(ブランド)。デ
                 ータ構造含めてJIS X 6319で規格化。

               • NFC …… 通信レイヤの標準規格で、データ構造は
                 範囲外。ただし、標準的なデータ構造としてNDEF
                 がNFC Forumで定められている。

              • つまり、NFCを使ってFeliCaを読み取るには適切にカ
               ードのコマンドを実装してあげる必要があります。


12年12月9日日曜日
Advanced NFC
              • http://developer.android.com/guide/topics/
                connectivity/nfc/advanced-nfc.html

              • 要約:Androidでサポートしていないテクノロジの
                カードを読み書きしたければ生のバイト列を用いて
                通信してね。


              • ……とかいいながらMIFARE ClassicとMIFARE
                Ultralight用のクラスが用意されてるあたりなんかず
                るい(一応オプションですが)。



12年12月9日日曜日
FeliCaの仕様を調査
              • ブロック
              • サービス
              • エリア
              • システム




12年12月9日日曜日
ブロック
              • FeliCaのメモリに対する書き込み及び読み出しにお
               ける16バイトの単位のことです。


              • R/Wから直接扱えるわけではなく、ブロックへのア
               クセスは後述のサービスを使用します。




12年12月9日日曜日
サービス
              • ファイルシステム上のブロックをグループ化したも
               ので、ブロックへのアクセスを提供します。


              • 各サービスはサービスコードによって特定します。




12年12月9日日曜日
エリア
              • 不揮発性メモリ領域の使用可能な残ブロック数や
               サービスへのブロック数の割り当てを管理する単
               位です。


              • 複数のサービスを含むことができます。

              • 今回はあまり意識しなくて大丈夫です。




12年12月9日日曜日
システム
              • 論理的なカードの単位です。

              • 1枚のカードには用途に応じた複数のシステムを含
               むことができます。


              • リーダ/ライタがシステムを特定するためにシステ
               ムコードが用いられます。




12年12月9日日曜日
FeliCaコマンド
              • Pollingコマンド
                • カードを検知するためのコマンドです。
                • パラメータとしてシステムコードをもちます。
                • 物理的なカードとシステム(論理的なカード)
                 を特定するIDmを取得することができます。

              • Read Without Encryptionコマンド
                • 非暗号化領域のデータを読むことができます。
                • パラメータとしてサービスコードをもちます。


12年12月9日日曜日
実際のFeliCa
              • 独自に規定されており、(当然)どの領域に何のデ
               ータが入っているかは非公開です。


              • ただし、有志によって解析された情報がWeb上に
               あるのでこれを利用します。


               • 特に履歴情報は非暗号化領域に書かれているの
                で扱いが容易です(だからこそ扱えます)。




12年12月9日日曜日
各種情報
              • Suica(など、サイバネ規格交通ICカード)
                • システムコード:0x0003(サイバネ領域)
                • サービスコード(履歴情報):0x090F




12年12月9日日曜日
各種情報
              • nanaco 
                • システムコード:0xFE00(共通領域)
                • サービスコード(履歴情報):0x564F

              • WAON 
                • システムコード:0xFE00(共通領域)
                • サービスコード(履歴情報):0x680B

              • Edy 
                • システムコード:0xFE00(共通領域)
                • サービスコード(履歴情報):0x170F


12年12月9日日曜日
NfcF#transceiveメソッド
              • 引数:送信バイト(FeliCaのコマンドを入れます)

              • 戻り値:受信バイト(FeliCaのコマンドレスポンスが
               返ります)


              • 注意:送信バイト/受信バイトにはそれぞれ先頭に
               コマンドバイト長が入ります。つまり、12バイトの
               コマンドならば先頭に0x0D(13 = 12 + 1(先頭バイ
               ト分))を付加しなければいけません。



12年12月9日日曜日
応用ソフトウェア
              • 「かお(・ν・)もじ SF CHECKER」Android版




              • 実はRequest Serviceコマンドいらなかった説。


12年12月9日日曜日
FeliCaへのチャージは?
              • 例のごとく、FeliCaコマンドが公開されていません
               ので、チャージはできないです。   情報とかも分か
               りませんし。


              • 世の中おいしい話はそうそうないということです。
               諦めましょう。




12年12月9日日曜日
まとめ
              • AndroidのNFC機能を使ってFeliCaの履歴情報を読
               み取る方法を解説しました。
               • また、予備知識として以下を説明しました。
                 • AndroidのNFC機能
                 • FeliCaカードの技術仕様

              • 実際にはカードへのアクセスはメインスレッドから
               行わないようにしなくちゃいけません。




12年12月9日日曜日

Contenu connexe

Tendances

"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
CODE BLUE
 
Parallel Programming in .NET
Parallel Programming in .NETParallel Programming in .NET
Parallel Programming in .NET
SANKARSAN BOSE
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
 

Tendances (20)

UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
"商用ホワイトボックス暗号方式" に対する "鍵回復攻撃" by アン・サンファン
 
Native Memory Tracking
Native Memory TrackingNative Memory Tracking
Native Memory Tracking
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 
XunitとMoq 公開用
XunitとMoq 公開用XunitとMoq 公開用
XunitとMoq 公開用
 
プロフェッショナルSSL/TLS 1.2章
プロフェッショナルSSL/TLS 1.2章プロフェッショナルSSL/TLS 1.2章
プロフェッショナルSSL/TLS 1.2章
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
NDEF Writerを使ってみよう
NDEF Writerを使ってみようNDEF Writerを使ってみよう
NDEF Writerを使ってみよう
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
 
WebRTCサービスを個人で運営してみた話
WebRTCサービスを個人で運営してみた話WebRTCサービスを個人で運営してみた話
WebRTCサービスを個人で運営してみた話
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
エンタープライズブロックチェーン構築の基礎
エンタープライズブロックチェーン構築の基礎エンタープライズブロックチェーン構築の基礎
エンタープライズブロックチェーン構築の基礎
 
FIWARE implementation of IDS concepts
FIWARE implementation of IDS conceptsFIWARE implementation of IDS concepts
FIWARE implementation of IDS concepts
 
Parallel Programming in .NET
Parallel Programming in .NETParallel Programming in .NET
Parallel Programming in .NET
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
 

Similaire à AndroidでFeliCaの履歴を読もう

Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオン
Tomoki YAMASHITA
 
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Ikkai Takeshi
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
Kouta Imanaka
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
fumoto kazuhiro
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 
Masafumi Terazono
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
Masayuki Kanou
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
Hiroshi Oyamada
 

Similaire à AndroidでFeliCaの履歴を読もう (20)

月刊NDEF 2013年3月号(卒業号)
月刊NDEF 2013年3月号(卒業号)月刊NDEF 2013年3月号(卒業号)
月刊NDEF 2013年3月号(卒業号)
 
Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオン
 
About nfc
About nfcAbout nfc
About nfc
 
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
 
計算機理論入門08
計算機理論入門08計算機理論入門08
計算機理論入門08
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリーム
 
20111028ssmjp
20111028ssmjp20111028ssmjp
20111028ssmjp
 
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイルDSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
 
Start-padrino
Start-padrinoStart-padrino
Start-padrino
 
NFaaS 輪読資料
NFaaS 輪読資料NFaaS 輪読資料
NFaaS 輪読資料
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 

Plus de treby

Plus de treby (20)

失敗から学ぶEM方法論
失敗から学ぶEM方法論失敗から学ぶEM方法論
失敗から学ぶEM方法論
 
Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例
 
Frontendと向き合う
Frontendと向き合うFrontendと向き合う
Frontendと向き合う
 
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
 
モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!
 
Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習
 
The Art of Collaboration
The Art of CollaborationThe Art of Collaboration
The Art of Collaboration
 
楽しく学ぶ?API
楽しく学ぶ?API楽しく学ぶ?API
楽しく学ぶ?API
 
VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私
 
アイマスハッカソン2017
アイマスハッカソン2017アイマスハッカソン2017
アイマスハッカソン2017
 
Sinatraで触れる生SQL
Sinatraで触れる生SQLSinatraで触れる生SQL
Sinatraで触れる生SQL
 
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
 
最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介
 
たたかうFFI
たたかうFFIたたかうFFI
たたかうFFI
 
mastodon API
mastodon APImastodon API
mastodon API
 
TH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbotTH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbot
 
Paperclip
PaperclipPaperclip
Paperclip
 
このみさんにPRしてもらう
このみさんにPRしてもらうこのみさんにPRしてもらう
このみさんにPRしてもらう
 
reading suture
reading suturereading suture
reading suture
 

Dernier

Dernier (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

AndroidでFeliCaの履歴を読もう

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