Отправить команды APDU на USIM / SIM-карту в android

Я уже работал со смарткартами, и я знаком с командами APDU (которые определены в спецификациях ISO / IEC 7816 и Global Platform ).

Теперь я хочу знать, есть ли способ отправить команду APDU на мою USIM / SIM-карту, которая вставлена ​​на мой мобильный телефон? (Samsung A3 с установленным комплектом Android v4.4.4.)

Я уже искал в Google, и я нашел некоторые связанные темы и инструменты с именем SIM Toolkit Application и Seek для Android . Но я не понимаю, что это такое? Являются ли эти элементы двумя приложениями, которые я должен установить на свой мобильный телефон? Или эти два инструмента, которые уже были установлены на USIM / SIM-карте и получили команды с мобильного телефона?

В чем разница между проактивными командами , командами APDU и командами AT ?

Должен ли я изучать android для разработки приложений для SIM-карт или мне просто нужны спецификации Java-карты и стандарты ETSI?

Заранее спасибо.

На вашей SIM-карте могут присутствовать два разных типа апплетов.

Общие апплеты

Общие апплеты, написанные на простой JavaCard. Это тип апплета, из которого вы привыкли в мире обычных смарт-карт. У этого метода process и смарт-карты есть пассивный субъект в сообщении: ваше приложение отправляет команды APDU и ответы на карточку.

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

Начиная с уровня API 21, существует также способ связи с SIM-картой с помощью Telephony Manager . Однако есть одно огромное препятствие: вашему приложению требуется разрешение MODIFY_PHONE_STATE , которое может предоставляться только системным приложениям. Регулярное, не-системное приложение не может использовать его.

Апплеры для SIM-карт

SIM-карта – это нечто большее, чем просто обычная смарт-карта, и писать апплет для SIM-карты может быть намного сложнее, чем для обычной смарт-карты, если вы хотите использовать все возможности, предлагаемые SIM-картой. Я рекомендую вам прочитать эту статью – это чей-то диплом бакалавра, но это лучший обзор для новичка, которого я нашел по всему Интернету. Я также рекомендую это видео с конференции DefConn .

Роль апплета, загруженного на SIM-карту, различна: апплет больше не является пассивной сущностью. Телефон регулярно спрашивает ваш апплет: «Есть ли что-то новое, что я могу сделать для вас?» И ваш апплет может ответить: «Да, отправьте это SMS-сообщение» или «Скажите, в какое время это» и т. Д. Кроме того, ваш апплет может стать слушателем некоторых событий: входящего вызова, полученных SMS-сообщений, прошедшего интервала и т. Д. Да , SIM-карта кажется пассивной с технической точки зрения, но ее роль на самом деле является активной: SIM-карта отправляет команды на телефон.

Эти команды называются «проактивными командами» или командами SIM Application Toolkit. Структура такая же – CLA INS P1 P2 LC данные LE; Смысл другой.

Вы можете отправить их из своего апплета, используя классы в специальном пакете JavaCard под названием sim.toolkit .

(SIM Application Toolkit – это стандарт, который задает проактивные команды так же, как глобальная платформа определяет жизненный цикл апплета.)

Пример апплета SIM Toolkit:

 import sim.toolkit.ToolkitInterface; import sim.toolkit.ToolkitRegistry; ... import javacard.framework.ISOException; public class STKTest extends Applet implements ToolkitInterface { public static void install(byte[] bArray, short bOffset, byte bLength) { // GP-compliant JavaCard applet registration new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]); } //this method handles standard APDU commands public void process(APDU apdu) { // Good practice: Return 9000 on SELECT if (selectingApplet()) { return; } apdu.setIncomingAndReceive(); final byte[] buf = apdu.getBuffer(); switch (buf[ISO7816.OFFSET_INS]) { case (byte) 0x00: //do something break; } } //this method handles the SIM Toolkit commands public void processToolkit(byte event) throws ToolkitException { switch (event) { case ToolkitConstants.EVENT_TIMER_EXPIRATION: //do something break; } } } 

Да, вы должны изучить Android – вам понадобится использовать библиотеку SEEK. Ваш вопрос очень широк, пожалуйста, спросите меня о каких-либо деталях, если хотите.

Начиная с уровня API 22 (Android 5.1) есть еще один вариант, называемый «Привилегией оператора». Это позволяет несистемным приложениям отправлять APDU на SIM-карту с помощью Android TelephonyManager. См. https://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges ()

Например, приложения для мобильных операторов (MNO), распространяемые в Google Play, могут использовать это. Но снова это не для всех. В этом случае вам должен быть предоставлен доступ к SIM-карте. Правила доступа на SIM-карте управляются MNO, которые его выдали. См. Также: http://source.android.com/devices/tech/config/uicc.html

Intereting Posts
Потребитель закрыл входной канал или произошла ошибка. события = 0x8 Как создать переменное количество текстовых просмотров в android Почему команда SQLite 3 с использованием оболочки Android ADB возвращает «разрешение отклонено»? Запретить прокрутку для ввода при заполнении приложения Android Phonegap Полноэкранный вид на поверхность скрывает закусочную Клиент-сервер-связь с php и андроид Слушатели событий window.open не работают в Android 4.4.2 Отредактируйте или удалите разрешение со страницы информации о приложении во время установки приложения Asynctask из неини Что такое хороший способ зарегистрировать пользователей из телефонного приложения? Android Как получить фотографию picasa из встроенной галереи? Monodroid – Monodevelop вытирает пользовательские данные при развертывании на устройство Пользовательский Typface в android ListView с SimpleAdapter Сделайте FAB, чтобы отобразить / скрыть изменения в Soft Keyboard Универсальный загрузчик изображений перезагружает изображение после каждого прокрутки