SlideShare a Scribd company logo
1 of 23
Download to read offline
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日日曜日

More Related Content

What's hot

NFT Marketplace Development - Coinjoker
NFT Marketplace Development - CoinjokerNFT Marketplace Development - Coinjoker
NFT Marketplace Development - Coinjokeramarasophi
 
NFT Marketplace: Your Complete Guide For 2022
NFT Marketplace: Your Complete Guide For 2022 NFT Marketplace: Your Complete Guide For 2022
NFT Marketplace: Your Complete Guide For 2022 ForceBolt
 
NFT Marketplace Development
NFT Marketplace DevelopmentNFT Marketplace Development
NFT Marketplace Developmentzaarahary
 
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFC
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFCBáo Cáo Đồ Án Tìm Hiểu Công Nghệ NFC
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFCnataliej4
 
Nft for beginners the perfect basic guide to learn everything about non fungi...
Nft for beginners the perfect basic guide to learn everything about non fungi...Nft for beginners the perfect basic guide to learn everything about non fungi...
Nft for beginners the perfect basic guide to learn everything about non fungi...Paul Bossky
 
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute BeginnersHessan Adnani
 
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)Linda John
 
What is NFT (Non-fungible token) & How do they work?
What is NFT (Non-fungible token) & How do they work?What is NFT (Non-fungible token) & How do they work?
What is NFT (Non-fungible token) & How do they work?Finlaw Consultancy Pvt Ltd
 
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...ravipbhat
 
Non-fungible tokens (NFTs)
Non-fungible tokens (NFTs)Non-fungible tokens (NFTs)
Non-fungible tokens (NFTs)Andres Guadamuz
 
The Potential of Blockchain Technology
The Potential of Blockchain TechnologyThe Potential of Blockchain Technology
The Potential of Blockchain TechnologyPioneers.io
 
What is NFT Marketplace? PPT
What is NFT Marketplace? PPTWhat is NFT Marketplace? PPT
What is NFT Marketplace? PPTRwaltz Software
 
How To Become A Blockchain Engineer
How To Become A Blockchain EngineerHow To Become A Blockchain Engineer
How To Become A Blockchain Engineer101 Blockchains
 
Flight x vision powerpoint presentation
Flight x vision powerpoint presentationFlight x vision powerpoint presentation
Flight x vision powerpoint presentationFLIGHT DENTAL
 
Cryptocurrency seminar topic presentation using MSWord.
Cryptocurrency seminar topic presentation using MSWord.Cryptocurrency seminar topic presentation using MSWord.
Cryptocurrency seminar topic presentation using MSWord.Mohd Faiz
 

What's hot (20)

NFT Marketplace Development - Coinjoker
NFT Marketplace Development - CoinjokerNFT Marketplace Development - Coinjoker
NFT Marketplace Development - Coinjoker
 
How To Mint An NFT?
How To Mint An NFT?How To Mint An NFT?
How To Mint An NFT?
 
NFT Marketplace: Your Complete Guide For 2022
NFT Marketplace: Your Complete Guide For 2022 NFT Marketplace: Your Complete Guide For 2022
NFT Marketplace: Your Complete Guide For 2022
 
NFT Marketplace Development
NFT Marketplace DevelopmentNFT Marketplace Development
NFT Marketplace Development
 
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFC
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFCBáo Cáo Đồ Án Tìm Hiểu Công Nghệ NFC
Báo Cáo Đồ Án Tìm Hiểu Công Nghệ NFC
 
Huongdanthuchanh lcd
Huongdanthuchanh lcdHuongdanthuchanh lcd
Huongdanthuchanh lcd
 
Nft for beginners the perfect basic guide to learn everything about non fungi...
Nft for beginners the perfect basic guide to learn everything about non fungi...Nft for beginners the perfect basic guide to learn everything about non fungi...
Nft for beginners the perfect basic guide to learn everything about non fungi...
 
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners
[Workshop] Getting Started with Cryptos, NFTs & Web 3.0 for Absolute Beginners
 
How NFT Works
How NFT WorksHow NFT Works
How NFT Works
 
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)
What is NFT? | A Complete Use-Cases of Non-Fungible Token (NFT)
 
What is NFT (Non-fungible token) & How do they work?
What is NFT (Non-fungible token) & How do they work?What is NFT (Non-fungible token) & How do they work?
What is NFT (Non-fungible token) & How do they work?
 
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...
Solid State Drives - Seminar for Computer Engineering Semester 6 - VIT,Univer...
 
Non-fungible tokens (NFTs)
Non-fungible tokens (NFTs)Non-fungible tokens (NFTs)
Non-fungible tokens (NFTs)
 
Money pad ppt
Money pad pptMoney pad ppt
Money pad ppt
 
The Potential of Blockchain Technology
The Potential of Blockchain TechnologyThe Potential of Blockchain Technology
The Potential of Blockchain Technology
 
What is NFT Marketplace? PPT
What is NFT Marketplace? PPTWhat is NFT Marketplace? PPT
What is NFT Marketplace? PPT
 
How To Become A Blockchain Engineer
How To Become A Blockchain EngineerHow To Become A Blockchain Engineer
How To Become A Blockchain Engineer
 
Flight x vision powerpoint presentation
Flight x vision powerpoint presentationFlight x vision powerpoint presentation
Flight x vision powerpoint presentation
 
Cryptocurrency seminar topic presentation using MSWord.
Cryptocurrency seminar topic presentation using MSWord.Cryptocurrency seminar topic presentation using MSWord.
Cryptocurrency seminar topic presentation using MSWord.
 
Cryptocurrency
Cryptocurrency  Cryptocurrency
Cryptocurrency
 

Similar to AndroidでFeliCaの履歴を読もう

月刊NDEF 2013年3月号(卒業号)
月刊NDEF 2013年3月号(卒業号)月刊NDEF 2013年3月号(卒業号)
月刊NDEF 2013年3月号(卒業号)Hirokuma Ueno
 
Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオンTomoki YAMASHITA
 
About nfc
About nfcAbout nfc
About nfctreby
 
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
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編hdais
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~Kouta Imanaka
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例fumoto kazuhiro
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?Makoto SAKAI
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 Masafumi Terazono
 
SDSoC でストリーム
SDSoC でストリームSDSoC でストリーム
SDSoC でストリームryos36
 
DSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイルDSLによる要求獲得でスーパーアジャイル
DSLによる要求獲得でスーパーアジャイル陽平 山口
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Wataru Fukatsu
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 

Similar to 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アプリケーション開発を学ぶ
 

More from treby

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

More from 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
 

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日日曜日