1
0

More than 3 years have passed since last update.

Android HCE 調査メモ(その2)

Last updated at Posted at 2020-01-08

目的

Android HSEに対し、PC(PC/SC)からの接続を確認します。

環境

今回は以下の機種で動作確認しました。

Android側

  • ビルド環境
    • Android Studio 3.5.3
  • 端末
    • Sony SO-3L
    • Android 9.0 (API level 28)

PC側

  • NFCリーダ
    • ACR1251CL-NTTCom (PC/SCモードで使用)
  • OS
    • Windows 10 64bit
  • 言語
    • Python 3.8.0

Android側

前回の記事を参照ください。
Android HCE 調査メモ(その1)

AIDは「F222222222」となっています。

HSE通信確認アプリ

簡単に確認するため、pythonを使って試してみます。

モジュール追加

pythonからPC/SCを操作するため、モジュール追加します。
pyscardには、SWINGが必要なため、事前にインストールしておきます。
SWIG
※コピーする際には、Libディレクトリもコピーすることを忘れないように。ハマりました…。

SWIGをインストールしたら、続けて以下のコマンドでモジュール追加します。
pip install pyscard

pyscardドキュメント

pyscardドキュメントは以下のURLにあります。

HCE接続 pythonスクリプト作成

pythonスクリプトを作成します。

HCE_connect.py
from smartcard.CardType import AnyCardType
from smartcard.CardConnection import CardConnection
from smartcard.CardRequest import CardRequest
from smartcard.util import toHexString

# カード接続
cardtype = AnyCardType()
cardrequest = CardRequest( timeout=1, cardType=cardtype )
cardservice = cardrequest.waitforcard()
cardservice.connection.connect( CardConnection.T1_protocol )
print ("ATR:", toHexString( cardservice.connection.getATR() ))

# AID指定で選択
SELECT = [0x00, 0xA4, 0x04, 0x00]
CARD_AID = [0xF2, 0x22, 0x22, 0x22, 0x22 ]
LEN = [len(CARD_AID)]
# APDUの組み立て
apdu = SELECT + LEN + CARD_AID
print("send apdu:", toHexString(apdu))
# 送受信
data, sw1, sw2 = cardservice.connection.transmit(apdu)
print("SW1SW2: %x %x" % (sw1, sw2))
print("received:", toHexString(data))

# 切断
cardservice.connection.disconnect()
print("...disconnected.")

pythonスクリプト実行

Androidでandroid-CardEmulationアプリを起動します。
カードリーダ上にAndoroidをのせて、認識させます。

HCEが認識したのを確認したら、スクリプトを実行します。
python HCE_connect.py

結果出力
ATR: 3B 88 80 01 00 00 00 00 80 81 71 00 79
send apdu: 00 A4 04 00 05 F2 22 22 22 22
SW1SW2: 90 0
received: 30 30 30 30 30 30 30 30
...disconnected.

正常に読み出せました。

次回

C#でもアクセスできることを確認します。
Android HCE 調査メモ(その3)

1
0
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
1
0