Программы для программирования карт
После перепрошивки появляются новые режимы: "Offset”, “CSN only” установки и др.
Имя файла: rwd145sk_disk5209_rev.e.rar
Размер файла: 116.82 МБ
Последние изменения: 13.01.2017 10:58:08
Имя файла: rfid_configure_v1.3r13.exe
Размер файла: 1.41 МБ
Последние изменения: 13.01.2017 10:57:54
Позволяет считать все настройки со считывателя на ПК, отредактировать их, и загрузить одним пакетом в считыватель заново.
Имя файла: fl20_fw_rom_t1277_v1.01r0.rar
Размер файла: 2.9 МБ
Последние изменения: 13.01.2017 10:57:54
Имя файла: pcr310_320_mifare_card_issue_v1.1r10_for_mf700.exe
Размер файла: 6.93 МБ
Последние изменения: 13.01.2017 10:57:48
Имя файла: pcr310_320_renew_v1.0r4.exe
Размер файла: 4.43 МБ
Последние изменения: 13.01.2017 10:57:48
Имя файла: pcr125.mfr135.msr123.disk5208_rev.n_beta.rar
Размер файла: 96.01 МБ
Последние изменения: 13.01.2017 10:57:42
Имя файла: gpw100_disk5069_v1_0r9.rar
Размер файла: 2.83 МБ
Последние изменения: 13.01.2017 10:57:41
Имя файла: mf5_pcr310_disk5189_rev.o_beta.rar
Размер файла: 98.23 МБ
Последние изменения: 13.01.2017 10:57:36
Имя файла: mf5sk_data_sheet_rev.a_tm970022.pdf
Размер файла: 389.91 КБ
Последние изменения: 13.01.2017 10:57:36
Имя файла: gp60_instruction_manual.pdf
Размер файла: 75.09 КБ
Последние изменения: 13.01.2017 10:56:36
Имя файла: gp30_instruction_manual.pdf
Размер файла: 25.92 КБ
Последние изменения: 13.01.2017 10:56:36
Имя файла: gp20_instruction_manual.pdf
Размер файла: 23.68 КБ
Последние изменения: 13.01.2017 10:56:36
Имя файла: gp8_instruction_manual.pdf
Размер файла: 603.08 КБ
Последние изменения: 13.01.2017 10:56:36
Имя файла: mifarecardissuer_usermanual_rev.i.pdf
Размер файла: 415.87 КБ
Последние изменения: 13.01.2017 10:56:29
Имя файла: pcr310.pwr106_cardissuesetup_v1.3r7_psw00018.exe
Размер файла: 6.57 МБ
Последние изменения: 13.01.2017 10:56:29
Имя файла: mifarereaderutility_v1.2r1_psw00083.exe
Размер файла: 7.01 МБ
Последние изменения: 13.01.2017 10:56:28
Имя файла: mf7xx_series_reader_user_manual_rev.e_11.2011.pdf
Размер файла: 586.13 КБ
Последние изменения: 13.01.2017 10:56:28
Имя файла: mf_appliccation_programming_guide_sdk_tm970014.pdf
Размер файла: 753.6 КБ
Последние изменения: 13.01.2017 10:56:14
Имя файла: pcr300_winloq_v1.2r0_disk5167_rev.l.rar
Размер файла: 18.22 МБ
Последние изменения: 13.01.2017 10:56:13
Имя файла: pcr300_disk5134_rev.h_.rar
Размер файла: 9.8 МБ
Последние изменения: 13.01.2017 10:56:12
Имя файла: mifare_demo_v1.6r0_psw00020.exe
Размер файла: 6.34 МБ
Последние изменения: 13.01.2017 10:56:12
Несмотря на то, что программа позиционируется как Demo - она полнофункциональна, и не имеет никаких ограничений.
Smart Card ToolSet Pro — программа для работы с чиповыми смарт картами на уровне APDU.
Принцип работы - посылать карте набор команд, оформленных в виде последовательности байтов (APDU), и анализировать ее ответы. Это самый низкий уровень работы со смарт картой для пользователя РС. Программа позволяет:
- работать с любыми ридерами стандарта PC/SC, управлять режимами их открытия, следить за изменениями их состояний;
- работать с любыми чиповыми смарт картами стандарта ISO7816 по протоколам T0 и T1;
- посылать в чиповые смарт-карты одиночные APDU и контролировать ответы на них;
- сканировать карты сериями APDU с заданием диапазона варьирования параметров и критериев успешного поиска;
- получать всю доступную службе PC/SC информацию о используемых ридерах или картах.
Smart Card ToolSet - это прямой доступ в GSM SIM-карты, а также в платежные и другие чиповые смарт карты.
На сайте программы доступна библиотека стандартов и спецификаций.
AggreGate Device Management Platform - система для контроля, конфигурирования и мониторинга различных электронных устройств, использующая современные сетевые технологии
Программа ведет учет печати и использования бумаги в принтере: точное число напечатанных страниц, имя документа, размер бумаги, время печати для каждого задания. Допускает управление очередью печати
WinScan2PDF — бесплатная программа для сканирования документов и их сохранения в формате PDF
VueScan — программа, которая расширяет возможности сканера или цифровой камеры для Windows и Linux
WinScan2PDF — бесплатная программа для сканирования документов и их сохранения в формате PDF
Программа, позволяющая на базе одного системного блока создать несколько рабочих мест
Программа для управления принтерами с копированием и просмотром заданий печати
Программа для работы со сканером: сканирование, редактирование, отправка на печать. Поддерживает любые TWAIN и WIA сканеры
AggreGate Device Management Platform - система для контроля, конфигурирования и мониторинга различных электронных устройств, использующая современные сетевые технологии
Сначала, на момент задумки, в 2014 году, данная статья планировалась как единая публикация, но, проработав материал (лень вынудила растянуть этот процесс), я понял, что необходимо её разделить на две части:
- Знакомство с библиотекой и написание/разбор кода специального командного процессора, который ее использует.
- Использование командного процессора из ч.1 для чтения содержимого файла с симки, которую я, однажды, подобрал на улице (никаких персональных данных раскрыто не будет). Узнаем, как отучить Windows встревать в наше взаимодействие с картой, а также, возможно, затронем тему выбора (активации) системного приложения на карте (если моя экспериментальная карта окажется UICC).
Думаю, для профи-карточников первая часть будет представлять бо́льший интерес, а вторая часть будет интересна, прежде всего, новичкам в этой теме (и будет иметь метку Tutorial).
Среди множества Python-библиотек, обзоры которых есть на Хабре, я не обнаружил pyscard — библиотеки для взаимодействия со смарт-картами.
В этой статье я постараюсь дать краткое описание основных фич pyscard, а на сладкое напишем простенький командный процессор, работающий с картой посредством APDU .
Прошу учесть, что для понимания того, как использовать эту библиотеку, и окружающей терминологии требуется знакомство со стандартом ISO 7816-4 или, хотя бы, GSM 11.11 . К GSM-стандарту проще получить официальный доступ, скачав его с сайта ETSI, впрочем и ISO 7816-4 (pdf, старенькая версия) гуглится, несмотря на то, что за него на оф. сайте хотят денег).
Pyscard существует с 2007 года и является кроссплатформенной (win/mac/linux) надстройкой над PC/SC API.
мой опыт использования на платформах, если интересно.Мое рабочее окружение, где я использую pyscard — Windows7
Материал данной статьи я тестировал, в основном, на mac OS, но на Windows7 тоже погонял, в виртуалке. Должен отметить, что, в отличие от XP , «семерка» и, вероятно, «десятка», с настройками по умолчанию, «ставит палки в колеса» при работе с картой в ридере:
- При помещении каждой карты в ридер эта карта считается устройством Plug&Play, для нее системой «ищутся драйверы».
- Если мы дождались окончания п. 1, то система начинает искать на карте сертификаты, при этом общаясь с ней своими APDU, эти APDU смешиваются с нашими и возникают коллизии, приводящие к сбоям в наших программах.
Эти факторы доставили мне много боли при переходе с XP, пока я их не победил. Как это сделать, расскажу во второй части.
Разработка начата под эгидой одного из ведущих (и на момент создания, и сейчас) игроков карточного рынка.
Поддерживаются обе ветки Python (2 и 3).
В рабочем окружении я использую связку pyscard + Python 2.7, но, для статьи, мне показалось правильным задействовать актуальную на сегодня ветку Python (3.6)
На мой взгляд библиотека pyscard спроектирована не особо pythonic и больше напоминает порт какого-то Java фреймворка, однако полезности её это не уменьшает, по крайней мере для меня, хотя имена модулей выглядят странно, конечно.
Точкой входа в библиотеку является пакет smartcard .
Отдельно стоит упомянуть пакет smartcard.scard , который отвечает за связь с карточным API операционной системы. Если не нужны все абстракции библиотеки, а только голый PC/SC , то вам сюда. Мы же на нём подробно останавливаться не будем.
Установка pyscard возможна следующими способами:
- с PyPi ( pip install pyscard ) — подходит для систем, настроенных на сборку артефактов из исходников, используется swig (ок для mac и, возможно, linux)
- Из бинарного дистрибутива, который можно забрать c appveyor или c sourceforge (великолепно прокатывает в Windows)
Pyscard имеет информативное руководство пользователя, которое доступно на официальном сайте, pydoc и примеры, поэтому не вижу смысла дублировать все это здесь. Вместо этого мы:
- Посмотрим на типовую структуру/шаблон программы;
- Бросим взгляд на, по моему мнению, важнейшие объекты библиотеки, что должно убедить пользоваться не низкоуровневым smartcard.scard , а именно smartcard ;
- Проиллюстрируем применение библиотеки на реальном примере — напишем командный процессор (шелл) на Python 3.6, где командами будут прямо «APDU в хексе» и ответ с карты будет выводиться в консоль. Также будут поддерживаться текстовые команды exit и atr.
Типовой шаблон программы
Пора уже сделать вброс порции кода, а то всё скучные вступительные «бубубу».
Какие задачи решает (практически любая) программа, работающая со смарт-картами в ридере? А вот эти:
- Выбор ридера, с которым мы будем взаимодействовать
- Определение момента, когда карта окажется в этом ридере
- Установка канала связи с картой
- Проверка карты на соответствие нашим критериям (мы можем захотеть работать не с каждой картой, которую пользователь нам подсунет)
- Обмен данными с картой посредством APDU
- Закрытие канала связи с картой
- Определение момента, когда карта будет извлечена из ридера
Замечу, что перечисленные задачи решает, например, прошивка мобильного телефона.
Важнейшие объекты пакета smartcard
В этом разделе все имена указаны относительно пакета smartcard .
Подклассы CardType
Позволяют нам указать точный тип карт, с которыми наше приложение собирается работать. Можно сделать так, чтобы наше приложение даже не реагировало на помещение в ридер карты, которая нам не подходит.
Примеры:
- CardType.ATRCardType (существует в библиотеке) — фильтрация карт по значению ATR. Наше приложение будет реагировать только на карты с определенным значением ATR.
- USIMCardType (я нафантазировал, можно реализовать) — допустимыми картами являются только USIM, внутри проверяем возможность выбора USIM-приложения.
CardRequest и его подклассы
Позволяют свести воедино все требования нашего приложения, касающиеся установления связи с картой:
- строго задать тип карты (см. выше)
- ограничить список допустимых ридеров (из уже установленных в системе)
- изменить таймаут ожидания карты в ридере
По умолчанию никаких ограничений в CardRequest не ставится.
CardConnection
Канал коммуникации нашего приложения с картой, позволяет отправлять на карту APDU и получать ответ, ключевой метод здесь — transmit() . Именно с его помощью происходит непосредственное взаимодействие нашего приложения с картой. Необходимо отметить, что метод transmit() всегда возвращает триплет (кортеж), состоящий из:
- Ответных данных (содержит реальные данные или None , в зависимости от типа APDU, не все APDU возвращают данные)
- Первого байта статуса (StatusWord) SW1
- Второго байта статуса (StatusWord) SW2
CardConnection является контекст-менеджером, что добавляет удобства при его использовании.
CardConnectionDecorator
Слово «декоратор» используется здесь в том же контексте, что и в Java, а не в том, к которому привыкли Python-разработчики.
Позволяет придать особые свойства объекту CardConnection . Библиотека предоставляет рабочие декораторы с говорящими названиями: ExclusiveConnectCardConnection и ExclusiveTransmitCardConnection . Лично я не ощутил эффекта от использования этих декораторов — если система (Windows) уж решила вклиниться со своими APDU в нашу сессию, то ни один из этих декораторов не спасет, но, возможно, я что-то не так делал.
Функция System.readers()
Позволяет получить список подключенных к системе кардридеров и установить связь с картой в определенном ридере.
sw.ErrorChecker , sw.ErrorCheckingChain
По умолчанию, в ходе обмена данными между картой и нашего приложением, никакие ошибочные значения StatusWord (SW1, SW2) не возбуждают исключений. Это можно изменить, задействовав потомков ErrorChecker , которые:
- объединяются в последовательности sw.ErrorCheckingChain
- привязываются к CardConnection и проверяют на отсутствие ошибок результат каждого вызова метода transmit() .
Встроенные в библиотеку «чекеры» позволяют получить в исключении подробную информацию о проблеме без необходимости залезать в спеки и искать необходимые значения SW1 , SW2 .
Потомки CardConnectionObserver
Вооруженные таким знанием, мы вполне можем замахнуться на написание командного процессора, использующего описываемую библиотеку.
Командный процессор с APDU (CLI)
Не буду подробно останавливаться на модуле cmd, который любезно предоставляет нам стандартная библиотека, о нем уже писали здесь, перейду к реализации.
Весь исходный код процессора находится на гитхабе.
Пройдемся по главным моментам, не размениваясь на мелочи.
Функция select_reader()
Возвращает первый ридер, подключенный к компьютеру или None , если подключенных ридеров нет.
Есть вариант этой функции (зависит от модуля msvcrt, т.е. только для Windows), который позволяет выбрать ридер, если их в компьютере несколько.
Класс APDUShell
Данный класс, помимо наследования от cmd.Cmd , реализует интерфейс обладает поведением наблюдателя smartcard.CardMonitoring.CardObserver
Данные экземпляра нашей оболочки
reader — устройство чтения, с которым будем работать.
card — объект карта, потребуется нам, чтобы определить момент смены карты в ридере.
connection — канал передачи APDU на карту и получения результата обработки.
sel_obj — строка, содержащая ID текущего объекта (файла или папки) выбранного командой SELECT . Эта строка меняется всякий раз, когда команда SELECT выполняется.
atr — здесь мы запоминаем ATR текущей карты, чтобы можно было вывести его на экран, не запрашивая карту каждый раз (такой запрос сбрасывает состояние выбора файла в карте).
card_connection_observer — наблюдатель, который привязывается к каждому connection, подробности ниже.
В конструкторе
Мы, помимо инициализации данных, добавляем себя в наблюдатели
smartcard.CardMonitoring.CardMonitor — объекта, который реагирует на события взаимодействия ридера и карты (карта помещена в ридер, карта извлечена из ридера) и оповещает об этих событиях smartcard.CardMonitoring.CardObserver , т.е. нас. Данный вид оповещения настраивается только один раз за время жизни нашей оболочки. CardMonitor является синглтоном, поэтому мы не заботимся о времени жизни его экземпляра.
Также обращаю внимание на экземпляр smartcard.CardConnectionObserver.ConsoleCardConnectionObserver — это готовый библиотечный объект-наблюдатель, отслеживающий состояние канала общения с картой и печатающий это состояние в консоль. Мы его будем навешивать на каждое новое соединение с картой.
update()
Это, собственно, поведение smartcard.CardMonitoring.CardObserver . Если наша текущая карта находится в списке removedcards , то мы очищаем состояние оболочки для текущей карты.
Если в нашем выбранном ридере (и в списке addedcards , заодно) появилась новая карта, то мы инициализируем новое состояние оболочки для этой карты.
default()
Здесь все введенные пользователем шестнадцатиричные APDU превращаются в списки байтов и отправляются на карту. Замечу, что единственное, что мы делаем с результатом здесь, это определяем, не является ли отправленная команда успешным SELECT -ом. Если да, то мы обновляем ID последнего выбранного объекта для печати в приглашении пользователю.
Всю остальную рутинную работу по интерпретации и отображению результата команды для пользователя выполняет наш ConsoleCardConnectionObserver .
Небольшое попутное отступление
лично мне не очень нравится, как ConsoleCardConnectionObserver отображает результат исполнения APDU — он не отделяет SW от результирующих данных так, как мне этого хотелось бы. Я использовал его только, чтобы не захламлять код примера маловажными деталями. Однако, если кому-то интересно, код метода update() моего наблюдателя есть в этом коммите.
_set_up_connection()
Трудяга, который помогает нам каждый раз, когда карта в ридере меняется. Он создает соединение с картой, навешивает на него ConsoleCardConnectionObserver , и запоминает ATR карты (чтобы команда atr могла вывести его на экран).
_clear_connection()
Антипод _set_up_connection() , «проводит зачистку», когда карта извлечена из ридера.
Заключение
До встречи во второй части, предполагаю, что там Python-а не будет (почти или совсем), но будут APDU и SW.
Программное обеспечение PhoenixCard используется для записи микропрограмм ("прошивок"), предназначенных для массового производства, на SD-карту через кардридер (устройство для чтения SD-карт).
Примечание. Данное руководство основано на текстах китайского и английского вариантов ааналогичного руководства пользователя, а также на результатах тестирования программы PhoenixCard версии 4.2.4 с модифицированной языковой конфигурацией.
1. Описание пользовательского интерфейса
После запуска исполняемого файла PhoenixCard.exe пользовательский интерфейс PhoenixCard выглядит следующим образом:
Основные кнопки пользовательского интерфейса (расположены в верхней части окна):
"Image (Образ)", "Тип карты: Product,Start Up, Key Card", "Burn (Запись)", "Restore (Восстановить)", "Refresh drive"
Кнопка Image - клик мышкой по этой кнопке позволяет открыть диалоговое окно выбора файла в папке ПК. Здесь пользователь может выбрать файл образа прошивки (filename.img) для записи на карту.
Примечания.
1. Путь к выбранному файлу образа .img сохраняется в файле config.cfg
2. На основе выбранного файла образа .img в папке создается служебный файл card.scj
Один из трех режимов программирования карт выбирается кликом мышкой по соответствующему флажку в окне "Тип карты":
- "Product" - запись SD-карты для установки прошивки на устройство в его внутренюю память
- "Start Up" - запись SD-карты для тестовой (пробной) загрузки ОС с этой внешней карты
- "Key Card" - запись SD-карты для программирования серийного номера (Прим. - не используется)
Кнопка Burn ("Запись") - по щелчку мышкой начинается программирование карты памяти. В процессе программирования до его завершения нельзя выполнять другие операции
Кнопка Restore ("Восстановление") - восстановление карты памяти после её использования для установки прошивки на устройство. По щелчку мышкой карта форматируется, чтобы её можно было использовать как обычную карту памяти. При этом удаляется специально созданная структура разделов и на карте создается один раздел, отформатированный в FAT32.
Примечание. Эту процедуру можно выполнить таже утилитой rufus.exe
Кнопка Refresh (или Refrech Drive) - обновить букву диска.
По щелчку мышкой выполняется проверка: вставлена ли новая карта памяти в компьютер. Если карта вставлена, то в окне "Список" будет обновлена соответствующая информация.
Когда пользователь вставляет карту, то для проверки, распознает ли компьютер карту, можно нажать кнопку Refresh для подтверждения. Если ПК видит карту, соответствующая информация будет отображаться в окне списка устройств. В противном случае в списке информации буква диска этой карты будет отсутствовать.
ВНИМАНИЕ. Программное обеспечение PhoenixCard позволяет записывать несколько карт памяти одновременно
В окне "Список устройств" автоматически отображаются все запоминающие устройства, подключенные к USB-портам компьютера (одна или несколько карт памяти в кардридерах, USB-флешки и т.п.)
Пользователю нужно только проверить соответствующую букву диска для записываемой карты.
ВНИМАНИЕ. Рекомендуется отключить от ПК USB-диски, а также другие карты, которые не предназначены для программирования с помощью PhoenixCard (чтобы случайно не удалить с них информацию).
Окно "Message" - в этом окне во время процесса записи карты будет отображаться информация о текущих результатах программирования.
Вспомогательные кнопки пользовательского интерфейса (расположены в нижней части окна):
"Очистить (Clean)", "Помощь (Help)", "Версия (Update)", "Закрыть (Close)"
2. Процедура записи карт
Внимание. Если на карте памяти, которая будет использована для программирования, хранится важная информация, сделайте резервную копию данных перед операцией с картой. Т.к. при программировании все данные на карте будут удалены
Внимание. Вы не можете завершить приложение пока запущенный процесс записи не завершится
В процессе программирования окна интерфейса выглядят следующим образом:
1. Интерфейс во время программирования (записи карт памяти)
2. Интерфейс при удачном завершении записи карты.
3. Интерфейс при обнаружении ошибок во время записи карты.
При записи карты F произошел сбой, который обозначен полоской тёмно-красного цвета.
3. Процедура восстановления записанной карты
Эта операция необходима для восстановления работоспособности использованной карты памяти в качестве обычного хранилища данных.
4. Меры предосторожности
1. Если во время записи карты для выхода из программы PhoenixCard до завершения записи карты нажать кнопку Закрыть (или крестик в верхнем правом углу), то появится окно с предупреждением :
You can't terminate the application for the thread is running
(Вы не можете завершить приложение из-за запущенного потока)
2. Вставление и извлечения карты во время процесса программирования вызовет сбой в работе программы.
5. Информация к размышлению
В процессе программирования карты по кнопке Burn в текущей папке (с пакетом PhoenixCard) на основе файла образа прошивки .IMG создаются или модифицируются служебные файлы, часть из которых после закрытия программы из папки удаляются.
Список таких файлов:
Из анализа приведенного списка файлов следует, что программа PhoenixCard перед программированием карты распаковывает файл IMG-образа прошивки, извлекает из неё часть файлов и использует их в своей дальнейшей работе. Таким образом, какие-то некорректности (например, отсутствие нужных файлов) в сборке образа прошивки могут привести к неправильной работе самой программы записи карты или к каким-то сбоям в её работе.
6. Смарт-карта, разрещающая просмотр определенного пакета каналов.
1.Антенна. Размер антенны должен быть подобран под спутник, который вы собираетесь смотреть.Слишком маленькая антенна сделает невозможным просмотр любимых программ, а слишком большая антенна - нагрузка на крышу, балкон и ваш карман. 2. Конвертер - преобразует сигнал принятый антенной и передает в ресивер. Лучше выбирать универсальный, частоты которого используются наиболее популярными провайдерами. В основном применяется линейная поляризация передаваемого сигнала , но НТВ использует круговую.
4. Для соединения конвертера и ресивера используется семидесяти пяти омный коаксиальный кабель типа RG-6, имеющий центральную медную токопроводящую жилу диаметром 1 мм, покрытую сверху вспененным полиэтиленом, экраном в виде луженой медной оплетки и оболочки из ПВХ пластиката. В целом – это обыкновенный телевизионный антенный кабель не обязательно RG-6 или его модификация, но с цельной центральной жилой. С каждой стороны кабеля устанавливается высокочастотный разъем (F коннектор) типа F56.
5. CI/CAM - термины CI and CAM часто используются как взаимозаменямые, хотя это не совсем так. CAM - это PCMCIA-модуль, такой же как используют в ноутбуках, только специально адаптированный для работы в спутниковых ресиверах . А CI - это слот в ресивере, куда вставляется САМ. Однако САМ не всегда вставляется в ресивер используя CI. Иногда САМ бывает встроен внутрь ресивера. В этом случае САМ называют встроенным (embedded CAM). Основная задача САМ - декодирование сигнала, закодированного в какой либо кодировке. Основные виды кодировок - Alphacrypt, Conax, Cryptoworks, Irdeto, Nagravision, Seca и Viaccess. Есть еще несколько видов кодировок типа Videoguard или Power Vu, которые пока неактуальны.Для каждой кодировки существуют свой САМ, но есть также и универсальные САМ способные принимать как все,так и несколько видов кодированных сигналов.
6. Смарт-карта: Провайдер, для защиты от несанкционированного просмотра использует одну из основных систем кодирования, которая универсальна для всех, использующих эту систему. Однако в самом конце процесса каждый провайдер использует свою систему скрэмблирования (от англ. scrambler - шифровать). И в эту систему включена смарт-карта. Она содержить ключ(и) которые нужны для расшифровки сигнала. То есть сигнал, передаваемый без всякого кодирования может быть принят любым ресивером и преобразован для просмотра, Кодированный сигнал, но не шифрованный, может быть увиден если у вас есть ресивер совместимый с выбранной системой кодирования. И если сигнал закодирован и зашифрован, то только смарт-карта с правильным ключом может вам помочь.Как работает карта.
Смарт-карта - это последний элемент системы кодирования. САМ отвечает за декодирование основной кодировки, но ему также необходима добавочная информация, которая содержится в смарт-карте. Эта информация (ключи, информация о классах подписки и т.п.) у каждого провайдера различна. Изменение ее происходит с различной периодичностью от 1 часа до нескольких месяцев. Таким образом смарт-карта - это процессор, с некоторым количеством дополнительной памяти. Процессор содержит программму, которая работает по запросу. Данные, которые нужны для работы (ключи т.п.) запрашиваются из памяти карты. Программа процессора статична и неизменяется. А память нуждается в постоянном апдейте, который производится или автоматически вместе с сигналом со спутника или вручную. Оригинальная карта (MOSC-Manufacturer's Original Smart Card) производит вычисление новых ключей сама. Это так называемы автоапдейт (Auto Update). Если у вас нет кодов автоапдейта, то вам нужно редактировать операционные ключи вручную.
В настоящее время используются различные типы карт, различающиеся типом процессора, обьемом памяти и видом исполнения. Однако самое широкое применение получили: GoldWafer (Pic1), Silver (Pic2 или DS9) и Fun. Из них карты Fun сейчас наиболее предпочтительнее (по соотношению: цена/качество/наличие софта/стоимость программатора).Вот классификация различных карт по типу памяти и процессора:
Смарт-карты на основе микропроцессоров PIC:
Wafercard (16C84, 16F84, 16F84A)
Goldwafer (16F84(A) + 24(L)C16)
Silvercard (16F876/16F877 + 24(L)C64)
Greencard (16F876/16F877 + 24C128)
Greencard 2 (16F876/16F877 + 24C256)
Bluecard (16F84A + 24C64)
Canarycard (16F628 + 24C16)
Singlepic (16F876, 16F627, 16F628).
На основе процессоров AVR:
Funcard (AT90S8515 + 24C64)
Prussiancard (AT90S8515 + 24C128)
Prussiancard 2 (AT90S8515 + 24C256)
Jupitercard (AT90S2343 + 24C16)
FunCard ATmega161 (ATmega161 + 24C64)
FunCard ATmega163 (ATmega163 + 24C256) .
ПРОГРАММИРОВАНИЕ СМАРТ-КАРТЫ И ТИПЫ ПРОГРАММАТОРОВ.
Прежде чем приступить к программированию смарт-карты необходимо пояснить несколько важных моментов для смарт-карт на основе процессоров PIC.
Так как нет возможности напрямую запрограммировать память карты, то сначала используя специальную программу - загрузчик (обычно называемую Loader.hex) программируют ПИК, а потом через него программируют ЕЕПРОМ. И затем программируют снова ПИК но уже настоящей прошивкой.
Учитывая это стандартный программатор должен иметь режим JDM (для программирования PIC в GoldWafer карте), Phoenix (для программирования EEPROM через PIC). Можно добавить еще режим Smartmouse (тот же Phoenix, но работающий на частоте 6Мгц) для работы с оригинальными картами и режим программирования Fun-карт и это вполне достаточно для работы.
Цена таких программаторов 35-60 долларов, в зависимости от способа изготовления и комплектации.
Если есть опыт работы с паяльником , то можно собрать самому. Схем таких программаторов достаточно в интернете.
1. Программирование Gold Wafer или Silvercard (Pic2)
Для программирования карты Вам понадобится:
- Компьютер с COM-портом
- Программатор с кабелем и блоком питания
- Файлы для программирования
- Программа для работы с программатором - ICProg для записи в карту загрузчика и самой программы (pic)
- Программа WinPhoenix для записи в карту данных (памяти) 24C16
1. Установите программы ICProg и WinPhoenix. Укажите в настройках программы COM-порт, к которому подключен Ваш программатор. В ic_prog можно выбрать язык интерфейса - русский.
2. Скачайте файлы, которые необходимо запрограммировать в карту. Файлы обычно имеют расширение hex (для чипов PIC16F84) и bin (для микросхем памяти 24С16). Для пик2 файлы несколько иные, например, ds9_16F876.hex и память - ds9_24lc64.hex. Прошивка обычно состоит из 2-х файлов. Вам нужно 3. Третий - это WinPhoenixLoader.
3. Переключите программатор в режим "JDM". После подключения программатора к компьютеру запустите ICProg и вставьте карту в программатор. Блок питания для этого, в принципе не нужен.
4. Укажите программе микросхему для программирования ("Настройки\Микросхемы\. ") - PIC16F84 (или PIC16F876). Затем откройте файл loader.hex и нажмите кнопку "Команды\Программировать всё (F5)". Если у Вас обнаружена ошибка записи по адресу 0000, скорее всего у Вас ничего не вышло. Проблема может быть из-за:
1. стоит галочка "CP" - защита от считывания - программатор не может прочитать то, что записал. Снимите ее
2. неисправен программатор
3. неисправен шнур от программатора до компьютера
4. неправильно стоят переключатели на программаторе
5. неправильно стоят переключатели в программе (всякие там инверсии и прочая чушь по-умолчанию должна быть выключена)
6. выбран не тот тип микросхемы
7. выбран не тот ком-порт
8. отсутствует или неправильно вставлена карта или карта не 16F84 & 24C16 (например, пытаетесь вшить ds9 прошивку в GW :-))
9. в панели задач Windows (справа внизу, где время показывает) запущена какая-либо резидентная программа типа факса, Palm DeckTop и т.п., которая "садится" на ком-порт.
10. если у Вас Win2000, WinXP - они не пускают напрямую к портам. Инструкцию по устранению этого недоразуменя можно взять здесь .
11. нерабочая версия ICProg или WinPhoenix
12. ещё миллион причин.
Если ничто не помогает - попробуйте на другом компьютере.
5. После программирования процессора карты PIC16F84 (16F876) можно приступать к программированию памяти карты 24С16 (24LC64). Для этого необходимо переключить программатор в режим Phoenix, подключить блок питания (если этого не было сделано раньше) и запустить программу WinPhoenix. Поскольку напрямую запрограммировать память пластиковой карты невозможно, программа WinPhoenix передаёт данные процессору карты, а процессор (предварительно загруженный программой ..Loader) сам записывает эти данные в память карты. Для GW будет показано, что считано 2048 байт, для PIC2 - 8 кБ. В нашем случае данные - файл ключей eeprom.bin. Проверьте, правильно ли указан порт компьютера, загрузите файл ключей и запустите программу: Card - Program. Если вам выдало "Falied" - либо в карте нерабочий загрузчик, либо не тот ком-порт, либо неправильно стоят мычки на программаторе либо забыли подключить блок питания.
6. Итак, данные в память карты занесены, теперь остаётся запрограммировать процессор рабочей программой. Переключаем снова программатор в режим JDM , загружаем файл рабочей прошивки pic16f84.hex (ds9_16f876) и программируем карту (F5). (См. пункт 4)
Если при прошивке будут возникать ошибки, попробуйте поиграться с настройками типа I/O Delay (меню "Settings - Hardware"). Для считывания прошивки из pic'а воспользуйтесь кнопкой Read All (F8).
Существует еще множество программ для программирования смарт-карт. Все они в принципе похожи и отличаются различными сервисными возможностями, наличием встроенного загрузчика, редактора и т.п. Бывает так, что в некоторых случаях просто не удается запрограммировать смарт-карту IcProg и WinPhoenix, и тогда просто стоит попробовать другие программы: ChipCat, CardWriter или JGProg.
ПРОГРАММИРОВАНИЕ FUN-КАРТЫ ПРОГРАММОЙ FUNPROM
Эта программа предназначена только для работы с Atmel/Fun-картами и программатором Fun. С ее помощью можно программировать Fun-карту и редактировать ее. Но редактор работает только с одной определенной кодировкой, а не Х в 1 .
1. Запускаем программу FunProm, при первом запуске проверяем наличие в программе необходимых для работы dll файлов,
если все на месте , то загружаем необходимые для прошивки карты файлы:
flash.hex , ee_ext.hex и ee_int.hex. Если мы программируем Х в 1 прошивку то ee_int.hex не загружаем.
Теперь жмем кнопку Erase , чтобы убедиться что карта полность стерта и чиста и жмем кнопку Program,
появляется табличка Confirm: "Verify eeprom while programing?"' на нее отвечаем No и карта программируется.
после чего начинается непосредственная запись нашей карты (все этапы происходят автоматически - без вашего дальнейшего участия).
После окончания процесса программирования внизу программы появляется надпись, что девайс запрограммирован: Device programmed
Редактирование ключей (только для одной кодировки)
Когда мы загрузим все три файла прошивки во втором окошке появиться надпись "SECA keys" (или ViaKey)
Здесь можно вручную менять ключи.
Если у нас есть файл с автоапдейтом, то двойным щелчком мыши открываем провайдера и вводим все детали необходимые для автоапдейта.
SA (Shared Address) - часть PPUA. Это первые 3 байта.
CUSTWP (Customer Word Pointer) - последний байт PPUA
UA (Unique Address)- серийный номер вашей оригиналки. Это одно из свойств автоапдейта Fun-карты, позволяющее вводить индивидуальный UA для каждого провайдера.
Provider Matrix пересылает нас к Package Bit Map (PBM)
Читайте также: