2016-02-22 32 views
2

我正在編寫基於Microsoft提供的NFC Example的代碼。
Windows.Devices.SmartCards中的所有內容都是關於APDU命令的。例如,TransmitAsync方法描述如下:如何在Windows 10(移動)上將低級命令(非APDU)發送到智能卡?

異步傳輸提供的應用協議數據單元(APDU)命令並返回響應。

但是,由於這是一個帶有字節數組參數的方法,我以爲我能夠通過使用這種方法去除APDU。我插在文件CardReader.xaml.cs一些代碼:

private async Task HandleCard(SmartCard card){ 
    ...... 
    // Handle MIFARE Standard/Classic 
    LogMessage("MIFARE Standard/Classic card detected"); 
    var mfStdAccess = new MifareStandard.AccessHandler(connection); 
    var uid = await mfStdAccess.GetUidAsync(); 
    LogMessage("UID: " + BitConverter.ToString(uid)); 

    // My code 
    LogMessage("=============="); 
    await SendBytes(connection, new byte[] { 0xFF, 0xCA, 0, 0, 0 }); //APDU Test 
    await SendBytes(connection, new byte[] { 0x50, 0x00 }); // Halt card 
    await SendBytes(connection, new byte[] { 0x52 }); //Wake card 
    return; 
    ...... 
} 
private async Task<byte[]> SendBytes(SmartCardConnection connection, byte[] RawData) 
{ 
    LogMessage("> " + BitConverter.ToString(RawData).Replace("-", " ").ToUpper()); 
    byte[] res = (await connection.TransmitAsync(RawData.AsBuffer())).ToArray(); 
    LogMessage("< " + BitConverter.ToString(res).Replace("-", " ").ToUpper()); 
    return res; 
} 

我的手機上運行的應用程序將命令發送到MIFARE經典1K卡。然而,我得到的是:

> FF CA 00 00 00 
< 02 27 9F 8F 90 00 
> 50 00 
< 63 00 
> 52 
< 63 00 

很明顯,APDU的作品。我不知道63 00是什麼,但我想這是一個APUD命令中的SW響應?
我在論壇上看到,您可以在使用NfcAdapter的Android手機上執行此操作。我的代碼有什麼問題?或者甚至可以在Windows 10 Mobile上發送低級命令(以消除APDU)?
謝謝。

+0

我不知道,你是如何得到的假設,即「叫停牌」和「喚醒卡」是由原始的MIFARE令牌的理解。這些命令用於處理器卡,用於發出信號,表示處理器可以切換到時鐘停止模式或從中返回以減少其功耗。 Mifare卡沒有處理器,但是硬件邏輯。我也不確定,除了在你身後留下一條完善的道路之外,你希望通過擺脫APDU結構來獲得什麼。 – guidot

+0

也許我用了一個不恰當的例子。讀卡器和卡之間有三步驗證。我想通過低級命令瞭解更多信息(沒有proxmark)。在防衝突和卡片選擇之後,如果閱讀器發送60 30 76 4a(塊30授權),Mifare卡將以4字節挑戰響應。但是,它不適合我。 –

回答

0

PCSC具有特定於存儲卡的命令。這樣你可以得到Mifare的支持。當然,你必須得到讀卡器製造商對Mifare卡的支持,但Mifare仍然很受歡迎。

但是不支持原生Mifare命令。您需要將它們轉換爲2.01 specification,第3.2.2.1節中的PCSC命令。

所以你不需要擺脫本機命令。只需將存儲卡特定的APDU發送給讀卡器,讀卡器就會將本機命令發送給卡。

0

您必須發送由Maarten提供的PCSC命令。在c#上編寫了一個庫,將低級Mirafe命令封裝到PCSC APDU中。

檢查onovotny's repository

相關問題