取得Smart Card的APDU Command

一般我們在使用網路ATM、自然人憑證時、iCash,把卡片插進讀卡機後

都是透過APDU Command來對卡片下指令進行查詢卡號、帳號、餘額…等

也就是說,只要取得相關的指令,我們也可以自己寫程式來操作

首先第一個問題是,要怎麼下指令。第二個問題是,要下什麼指令

第一個問題比較好解決,目前己經有現成的程式碼了,就不再贅述

請參考使用C#讀取自然人評證卡號

第二個問題,可以說簡單,也可以說複雜

複雜的來說呢~~必需先去K懂一堆SmartCard的相關文件,然後再去看指令集

當然,像我這樣懶惰取巧的人,是不太可能花這麼多時間去讀文件(此為不良示範…冏)

那麼簡單來說呢~~這才是本文的重點,就是只要知道那些現成的ActiveX 元件下了什麼指令就可以了

這麼說,只要把指令Sinffer起來就好囉。沒錯!正解

為了要達到這個目的,必需使用這個元件 WinSCard APDU View Utility

官方網址在這邊,官方載點在這邊,茶包分流載點

安裝方式官方網址裡面有。或是你可以參考下面:

1.下載WinSCard APDU View Utility,並解出winscard.dll
2.到C:\WINDOWS\system32\ 下面,複製一份你的原始winscard.dll成winscard_BAK.dll
3.把C:\WINDOWS\system32\winscard.dll 改檔名為 original.dll
4.把WinSCard APDU View Utility 解出的 winscard.dll,放到 C:\WINDOWS\system32\
5.重新開機

完成後,你就可以開始測試了。例如去MOICA內政部憑證管理中心測試你的自然人憑證。

20091208_1

讀卡機只要有動作的話,相關的指令會在你桌面上的 winscard.txt 檔案,內容大概長這樣子

SCardTransmit (handle 0xEA0A0000):
transmitted:
80 A4 00 00 02 3F 00
received:
90 00

SCardTransmit (handle 0xEA0A0000):
transmitted:
80 A4 00 00 02 09 00
received:
90 00

SCardTransmit (handle 0xEA0A0000):
transmitted:
80 A4 00 00 02 09 03
received:
90 00

SCardTransmit (handle 0xEA0A0000):
transmitted:
80 B0 00 00 10
received:
54 50 30 30 30 30 30 30 30 31 36 31 31 31 31 31 90 00

相關實作程式請參考使用讀卡機取得自然人憑證的卡號

6 thoughts on “取得Smart Card的APDU Command

  1. 大哥您好
    想請問您個問題,如何知道APDU的指令集呢??
    例如:
    SCardTransmit (handle 0xEA0A0000):
    transmitted:
    80 A4 00 00 02 09 03 =>每個指令代表甚麼意思呢? 而這些資料要載哪裡查到呢??
    received:
    90 00 => 成功

    不好意思,想請您指點一下了!! 謝謝

    1. to terence:
      APDU的指令集,你可以參考ISO文件
      ISO7816-4
      因為版權的關係,這部份可能你就要自己去google了

  2. 版主您好

    我想請問一下WinSCard APDU View Utility這個工具在win7能用嗎
    我裝了之後跑都沒有出現那個文件
    我想要寫一個驗證pin碼的功能
    但是看不太懂指令集的介紹
    可以麻煩給一點提示嗎

    謝謝

    1. to kelp:
      不能在win7使用,建議用VMWare裝XP來測試。
      驗證pin碼,可能你直接聯絡相關的廠商提供資源會比較快。

  3. 不好意思,請問一下,桌面會產生 winscard.txt ,我的都沒有產生說~會是怎樣子的原因,該從那個方向去check 呢?再麻煩您指導了!!謝謝您

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *