Как я могу прочитать карту NFC с помощью IsoDep?

Я хочу прочитать карту RFID через NFC, карта из местной транспортной системы в Боготе, Колумбия. Я знаю, что это возможно, потому что я загрузил приложение для Android, которое делает именно это!

Мой прогресс... Когда я кладу телефон на карту, мое приложение запускается с намерением ACTION_TECH_DISCOVERED, и я могу читать такие вещи, как UID карты, но я не знаю, как читать информацию, которую я хочу, особенно деньги на карту.

Я прочитал здесь в stackoverflow, что мне нужно найти приложение, к которому я хочу получить доступ, и отправить команды ADPU, но похоже, что на моей карте нет никакого приложения, потому что исследуя карту с любым приложением для Android, он всегда говорит Найдено 0 приложений. Итак, я не знаю, где я должен получить эту информацию.

Техническая информация для моей карты:

  • ИДЕНТИФИКАТОР ТЭГА: 08 8B E2 D1 РФ
  • Технология: ТИП A (ISO/IEC 14443, тип A)
  • ТИП ТЭГА: Смарт-карта ISO/IEC 14443-4
  • АТКА: 0004
  • САК: 20
  • ИСТОРИЧЕСКИЕ БАЙТЫ: 01112003
  • КЛАССЫ ТЕХНОЛОГИЙ: android.nfc.tech.IsoDep, android.nfc.tech.NfcA

Спасибо!


person Roger    schedule 15.04.2014    source источник


Ответы (1)


Я [читал] здесь в stackoverflow, что мне нужно найти приложение, к которому я хочу получить доступ, и отправить команды ADPU.

Правильно, это именно то, что вам нужно сделать. Получив эту информацию (т. е. спецификацию протокола связи карты), вы должны сделать что-то вроде следующего:

Tag tag = ... // TODO: get tag handle from intent
IsoDep isoDep = IsoDep.get(tag);
if (isoDep != null) {
    isoDep.connect();

    byte[] response = isoDep.transceive(SELECT_APDU); // SELECT_APDU = 00 A4 0400 <Lc> <APPLICATION ID>

    // TODO: send further APDU commands according to the protocol specification
    //response = isoDep.transceive(APDU);

    isoDep.close();
}

[...] но похоже, что на моей карте нет никакого приложения, потому что, исследуя карту с любым приложением для Android, он всегда говорит «Найдено 0 приложений».

Обычно это означает только то, что на карте нет приложения **известного приложению сканера*. Многие карты ISO-DEP не имеют общедоступного каталога приложений, доступных на карте. (Хотя некоторые карты могут иметь EF.DIR или что-то подобное.)

Итак, я не знаю, где я должен получить эту информацию.

Правильно, это обычно сложная часть. Для этого существует несколько подходов:

  1. Запросите спецификацию у оператора транспортной системы.
  2. Проверьте, есть ли у карты EF.DIR (или аналогичный) и что-то в нем указано (хотя это даст вам только отправную точку, так как протокол карты по-прежнему не раскрывается).
  3. Проверьте, есть ли у карты домен/менеджер безопасности GlobalPlatform и доступен ли этот менеджер карт с ключами по умолчанию (Google поможет вам найти дополнительную литературу). Если это так, GP предоставляет команды для вывода списка установленных приложений. Что касается протокола, применяется то же, что и в пункте 2.
  4. Выполните обратный инжиниринг приложения, которое, как вы знаете, может получить доступ к карте. (Обратите внимание, что это может быть незаконным в вашей стране и/или запрещено лицензионным соглашением приложения.)
person Michael Roland    schedule 15.04.2014
comment
Привет, спасибо за этот отличный ответ, проведя небольшое исследование, я обнаружил, что это карта Infineon SLE 66CL41PE infineon.com /cms/en/product/smart-card-ic/ ... Отсюда вы можете дать мне несколько советов? Большое спасибо! - person Roger; 15.04.2014
comment
Нет, это просто чип общего назначения. Эта информация не дает вам никакого представления о приложении, работающем на этом чипе. - person Michael Roland; 16.04.2014