5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更だけど、FeliCaからカード情報を取得してみた

Last updated at Posted at 2018-08-16

#準備
・デバイス:SONY RC-S380
・カード:manaca
SDK for NFC Starter Kit

#カード情報の読み取り
「SDK for NFC ユーザーズマニュアルPC/SC編(Lite)」に記載されているAPDUの独自定義(拡張)コマンドを使用して、カードからIDm、PMmなどを取得する。

##操作手順

  1. SCardEstablishContext()関数でリソースマネージャのハンドルを取得。
    SCARDCONTEXT hContext = 0;
    LONG lResult = ::SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
    
  2. SCardListReaders()関数でデバイス名を取得。
    LPTSTR lpszReaderName = NULL;
    DWORD dwAutoAllocate = SCARD_AUTOALLOCATE;
    LONG lResult = ::SCardListReaders(hContext, NULL, (LPTSTR)&lpszReaderName, &dwAutoAllocate);
    
  3. SCardConnect()関数でカードに接続。
    SCARDHANDLE hCard = 0;
    DWORD dwActiveProtocol = 0;
    LONG lResult = ::SCardConnect(hContext, lpszReaderName, SCARD_SHARE_SHARED,SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol);
    
  4. SCardTransmit()関数でコマンド送信・データ受信。
    BYTE bySndCmd[] = {0x00, 0x00, 0x00, 0x00, 0x00}; //使用するコマンド。
    BYTE byRcvBuf[8] = {0x00};
    DWORD dwResSize = sizeof(byRcvBuf);
    LONG lResult = ::SCardTransmit(hCard, (SCARD_IO_REQUEST*)SCARD_PCI_T1, bySndCmd, sizeof(bySndCmd), NULL, byRcvBuf, &dwResSize);
    
  5. SCardDisconnect()関数でカードの切り離し。
    ::SCardDisconnect(hCard, SCARD_LEAVE_CARD);
    
  6. SCardFreeMemory()関数でデバイス名領域の解放
    ::SCardFreeMemory(hContext, lpszReaderName);
    
  7. SCardReleaseContext()関数でリソースマネージャの解放。
    ::SCardReleaseContext(hContext);
    
  8. ##コマンド例
    操作手順4のSCardTransmit()関数で使用するコマンド。
    ・IDm取得
    送信

    CLA INS P1 P2 Lc Data In Le
    FF CA 00 00 - - 00

    受信

    Data SW1 SW2
    IDm(8バイト) XX XX

    SW1、SW2にはステータスが入る。
    取得したIDmとステータスのイメージ。

    01 02 03 04 11 12 13 14 90 00
    

    #ソースコード
    とりあえず詳細はGitHubにおいてあります。
    よかったら見てください。
    C++は勉強中なので、コメントを頂けると幸いです。

    #参考
    SDK for NFC ユーザーズマニュアルPC/SC編(Lite)
    winscard.h header
    [PASMO] FeliCa から情報を吸い出してみる - FeliCaの仕様編 [Android][Kotlin]
    技術レポート「非接触ICカード技術"FeliCa(フェリカ)"のIDm読み取り方法
    PC/SC APIを用いてSuicaカードの利用履歴情報の読み取り

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?