我正在編寫基於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)?
謝謝。
我不知道,你是如何得到的假設,即「叫停牌」和「喚醒卡」是由原始的MIFARE令牌的理解。這些命令用於處理器卡,用於發出信號,表示處理器可以切換到時鐘停止模式或從中返回以減少其功耗。 Mifare卡沒有處理器,但是硬件邏輯。我也不確定,除了在你身後留下一條完善的道路之外,你希望通過擺脫APDU結構來獲得什麼。 – guidot
也許我用了一個不恰當的例子。讀卡器和卡之間有三步驗證。我想通過低級命令瞭解更多信息(沒有proxmark)。在防衝突和卡片選擇之後,如果閱讀器發送60 30 76 4a(塊30授權),Mifare卡將以4字節挑戰響應。但是,它不適合我。 –