Mifare Desfire/Mifare plus не может читать с ACS ACR1252

Привет, я новичок в чтении RFID. Итак, сначала я скачал репозиторий pcsc с github. Затем я попытался прочитать двоичный файл из обычного тега RFID, он работает отлично, но следующим шагом было чтение данных из, как я думаю, эмулированного тега RFID. Контроллер RFID-меток — pn71501. Из этого тега с помощью pcsc sharp я не могу прочитать никаких данных, кроме ATR и uid. Я попытался прочитать этот тег с помощью своего iPhone, и он его прочитал. Так что я делаю неправильно?

Я также пытался использовать уже готовое программное обеспечение, но оно также не могло его прочитать.

Вот что я получаю с помощью инструментов NFC:

введите здесь описание изображения введите здесь описание изображения

PS Устройство чтения смарт-карт, которое я использовал, это ACS ACR1252.

Вот мой код:

using System;
using System.Text;
using System.Collections.Generic;
using PCSC;
using PCSC.Iso7816;

namespace Transmit {
    public class Program {
        public static void Main() {
            using (var context = ContextFactory.Instance.Establish(SCardScope.System)) {
                var readerNames = context.GetReaders();
                if (NoReaderFound(readerNames)) {
                    Console.WriteLine("You need at least one reader in order to run this example.");
                    Console.ReadKey();
                    return;
                }

                var readerName = ChooseRfidReader(readerNames);
                if (readerName == null) {
                    return;
                }

                String response = "";

                using (var rfidReader = context.ConnectReader(readerName, SCardShareMode.Shared, SCardProtocol.Any)) {
                  // for (byte i = 0x00; i < 0x47; i++) {
                        var apdu = new CommandApdu(IsoCase.Case3Extended, rfidReader.Protocol) {
                            CLA = 0xFF,
                            Instruction = (InstructionCode)0xB0,
                            P1 = 0x00,
                            P2 = 0x00,
                            Le = 0x10
                        };

                        using (rfidReader.Transaction(SCardReaderDisposition.Leave)) {
                            //Console.WriteLine("Retrieving the UID .... ");

                            var sendPci = SCardPCI.GetPci(rfidReader.Protocol);
                            var receivePci = new SCardPCI(); // IO returned protocol control information.

                            var receiveBuffer = new byte[256];
                            var command = apdu.ToArray();


                            var bytesReceived = rfidReader.Transmit(
                                sendPci, // Protocol Control Information (T0, T1 or Raw)
                                command, // command APDU
                                command.Length,
                                receivePci, // returning Protocol Control Information
                                receiveBuffer,
                                receiveBuffer.Length); // data buffer

                            var responseApdu =
                                new ResponseApdu(receiveBuffer, bytesReceived, IsoCase.Case3Extended, rfidReader.Protocol);

                        Console.WriteLine(String.Format("SW1: {0:X2} SW2: {1:X2}", responseApdu.SW1, responseApdu.SW2));
                        //if(responseApdu.DataSize > 0) {
                        //response += BitConverter.ToString(responseApdu.GetData()).Replace('-', ' ');
                          response += responseApdu.DataSize;
                           // }
                        }
                   // }
                }
                /*String[] devidedResponse = response.Split(' ');

                String stillResponse = "";

                bool notStarted = true;

                int skipBytes = 7;
                int onByte = 0;

                for(int i = 0; i < devidedResponse.Length; i++) {
                    if (devidedResponse[i] != "D1" && notStarted) {
                        continue;
                    } else if (onByte < skipBytes) {
                        notStarted = false;
                        onByte += 1;
                        continue;
                    } else if (devidedResponse[i] == "FE") {
                        break;
                    }

                    stillResponse += devidedResponse[i] + " ";
                }

                String res = stillResponse.Trim();

                string asciiCharString = "";

                var splitResult = res.Split(' ');

                foreach (string hexChar in splitResult) {
                    var byteChar = int.Parse(hexChar, System.Globalization.NumberStyles.HexNumber);
                    asciiCharString += (char)byteChar;
                }*/
                
                Console.WriteLine(response);
            }

            Console.WriteLine("\nPress any key to exit.");
            Console.ReadKey();
        }

        private static string ChooseRfidReader(IList<string> readerNames) {
            // Show available readers.
            Console.WriteLine("Available readers: ");
            for (var i = 0; i < readerNames.Count; i++) {
                Console.WriteLine($"[{i}] {readerNames[i]}");
            }

            // Ask the user which one to choose.
            Console.Write("Which reader is an RFID reader? ");
            var line = Console.ReadLine();

            if (int.TryParse(line, out var choice) && choice >= 0 && (choice <= readerNames.Count)) {
                return readerNames[choice];
            }

            Console.WriteLine("An invalid number has been entered.");
            Console.ReadKey();
            return null;
        }

        private static bool NoReaderFound(ICollection<string> readerNames) =>
            readerNames == null || readerNames.Count < 1;
    }
}

person Aleksei .C    schedule 17.04.2021    source источник
comment
Смарт-карта зашифрована, и вы должны разблокировать карту перед чтением. Сначала используйте проводник для чтения карты. Карта останется разблокированной. Затем запустите свое приложение. Если приложение работает, проблема в том, что вам нужно разблокировать карту.   -  person jdweng    schedule 17.04.2021
comment
@jdweng, как я могу прочитать карту с помощью проводника? у меня там даже читалки нету в устройствах   -  person Aleksei .C    schedule 17.04.2021
comment
Есть разные типы карт. Большинство карт монтируются на вашем компьютере как файловая система. Таким образом, File Explorer может прочитать карту. Карту необходимо смонтировать, поэтому сначала установите драйвер карты от производителя. Когда вы вставляете карту в ридер, драйвер автоматически монтирует карту. Этот процесс аналогичен тому, когда вы вставляете USB-устройство в машину, например карту памяти. Карта памяти монтируется как файловая система. Другие USB-устройства устанавливаются как последовательные устройства. Аппаратное устройство имеет заголовок, который указывает тип устройства.   -  person jdweng    schedule 18.04.2021
comment
ACS ACR 1252 — это USB-кардридер. Таким образом, драйвер для устройства чтения карт памяти устанавливается на машину и выглядит как съемный жесткий диск. Устройство чтения карт имеет аппаратное/программное обеспечение, которое взаимодействует с драйвером, который вы устанавливаете на свой компьютер. Таким образом, информация о карте последовательно отправляется драйверу на вашем компьютере, и драйвер делает последовательные данные похожими на файловую систему.   -  person jdweng    schedule 18.04.2021
comment
@jdweng, только жесткие диски, которые я вижу в проводнике, это два моих жестких диска, кроме этого больше ничего   -  person Aleksei .C    schedule 18.04.2021
comment
У вас была карта в ридере? Вы устанавливали драйвер считывателя от производителя? Зайдите в диспетчер устройств и проверьте, видите ли вы ридер и карту? Является ли карта файловой системой или другим типом устройства? Карта может быть последовательным устройством.   -  person jdweng    schedule 18.04.2021
comment
@jdweng, да, я установил драйвер считывателя, в диспетчере устройств он находится в считывателе смарт-карт, имя считывателя: ACR1252 1S CL Reader PICC   -  person Aleksei .C    schedule 18.04.2021


Ответы (1)


Я знаю. Я посмотрел его ранее. Можно ли прочитать карту файловым проводником?

Аппаратное устройство, такое как UART, может быть прочитано на трех разных уровнях.

  1. Чтение/запись UART напрямую, найдя аппаратный адрес ввода/вывода
  2. Чтение/запись через драйвер. В С# используйте открытый последовательный порт. Драйвер получает аппаратный ввод-вывод
  3. Чтение/запись через приложение. Приложение делает 1 и/или 2 выше.

У вас есть работающее приложение (номер 3), и я не знаю, использует ли оно метод 1 или 2.

С помощью кард-ридера я пытаюсь сделать ваше программирование максимально простым. Самый простой способ — 3, если у вас есть API. Следующим самым простым является метод 2, который вы сможете использовать, если вы установили драйвер поставщика. Вы должны увидеть устройство в диспетчере устройств.

Для разблокировки карты (шифрование) также необходимо установить сертификат, который шел в комплекте с картой. Проводник должен уметь читать/записывать карты.

person jdweng    schedule 18.04.2021
comment
Нет, я не могу прочитать его через проводник. Возможно, вы имеете в виду под картой обычную пластиковую карту, которую я должен вставить в ридер, но это не так. Это бесконтактная карта, это даже не карта. Это устройство с чипом эмуляции NFC с именем pn71501. Я должен подключить устройство к читалке и все. - person Aleksei .C; 20.04.2021
comment
В основном работают одинаково. Пришел ли к устройству диск с драйвером? Прочтите следующее: nxp.com/products/rfid-nfc/nfc-hf/nfc-readers/ На стр. 2 рассказывается о драйверах. - person jdweng; 20.04.2021
comment
Нет, это не так. У меня много одинаковых устройств, и каждое устройство имеет свой собственный серийный номер, который используется через NFC-контроллер, который я указал ранее. Может быть, эмулированная метка NFC читается иначе, чем обычная пассивная метка? - person Aleksei .C; 20.04.2021
comment
Я просто хотел сказать, что карта не разблокируется автоматически. проверьте Диспетчер устройств, чтобы убедиться, что у вас установлен правильный драйвер. Часто с Plug and Play устанавливается неправильный драйвер, или вам сначала нужно войти в систему как администратор, прежде чем он будет установлен. - person jdweng; 20.04.2021
comment
Да, драйвер правильный, у ACS есть универсальный драйвер для своих устройств. Что вы подразумеваете под РАЗБЛОКИРОВАТЬСЯ? Ридер отлично работает с другими (пассивными/не эмулируемыми) тегами. - person Aleksei .C; 20.04.2021
comment
Есть два водителя. Один для чтения и один для устройства. Некоторые устройства имеют режимы шифрования, которые блокируют устройство до тех пор, пока ключ не разблокирует его. Не с этим делом. Наконец нашел всю документацию: nxp.com/products/rfid-nfc/nfc-hf/nfc-readers/ - person jdweng; 20.04.2021