Сканирование сим-карт источник : phreak.ru Вступление Данной статьей я хочу приоткрыть занавес таинственности над процессом создания SIM-карт. Вы увидете весь процесс персонализации, с детальным описанием и приведением примеров APDU на каждом ее шаге. SIM карта - это просто! Фазы GSM-смарт карт Прежде, чем перейти к описанию процесса персонализации SIM-карт, хочется кратко вспомнить эволюцию связи GSM, поскольку это имеет непосредственное отношение к содержимому симки. Всего на сегодня зафиксировано три технологические фазы развития связи GSM. Фаза 1 Реализация начата в 1991 году и полностью завершена в 1993 году. SIM-карта 8 Кбайт. Функции - входящие и исходящие звонки, переадресация вызова, запрет вызова, ожидание вызова, блокировка карточки, выбор сети PLMN (ф-ция роуминга), SMS (только прием), ускоренный набор номеров, отправка и прием факсимильных сообщений, запрет работы в сетях без роумингового соглашения - FPLMN. Фаза 2 Реализация начата в 1994 году и полностью завершена в 1997 году. SIM-карта 8 Кбайт. Поддержка всех функций фазы 1 плюс дополнительные - PIN2 (защита полей данных), "совет по оплате", фиксированный набор номеров, SMS (добавлена возможность отправки), статус SMS, автонабор последнего номера, выбор языка меню, персонализация сообщений, поддержка нескольких номеров (голосовая, цифровая, факсимильная связь), повтор последнего набранного номера, длинные номера (более 20 цифр), отображение провайдера услуг, АОН, антиАОН, групповой вызов, создание закрытой группы до 10 абонентов, голосовые сообщения. Фаза 2+ Спецификации на реализацию этой фазы до сих пор нет. Новые услуги внедряются сразу после утверждения в ETSI. На сегодня количество таких услуг перевалило отметку в полсотни. Среди них (наиболее интересные и перспективные) - SIM Application Toolkit, Enhanced Full Rate, а также взаимодействие GSM и DECT. SIM-карта с пониженным напряжением питания 3 В, емкостью от 16 Кбайт и поддержкой Java. Файловая система Вначале несколько слов о том, что же такое GSM SIM-карта. GSM SIM-карта представляет собой обычную смарт карту, соответствующую стандарту ISO7816 (1-4), функциональность которой расширена GSM-специфичной функциональностью, как к примеру наличие криптоалгоритмов A3, A5 и A8. Теперь о файловой системе GSM-карты. Сразу оговорюсь, что Вам в руки может попасться как карточка-болванка, с уже сгенерированной файловой системой GSM, так и вовсе пустая карта, все файлы на которой нужно создавать. Последний вариант неприятен, но вполне осуществим, если Вы любите своего оператора ;-). Итак, карточка-болванка. Предоставляемые сетью GSM услуги жестко привязаны к содержимому карточки. Каждая услуга отображается на карте одним или несколькима файлами, содержимое которых несет необходимую информацию для получения этой услуги. Если не понятно, перечитайте еще раз ;-). Ниже будут рассмотрены только те файлы, содержимое которых необходимо создать, перед тем как использовать SIM-карту для подключения к сети. Эта процедура называется персонализация карты. Остальные файлы (не упомянутые здесь) могут быть изменены с помощью клавиатуры Вашего телефона или самой сетью (естественно посредством Вашего же телефона) без ведома владельца телефона. Я рассчитываю, что у Вас есть карта-болванка, посему перечислю только минимально необходимый набор файлов, которые необходимы для того, чтобы получить функционирюющий модуль. Начнем с корня - 3F00. В корневом каталоге у нас находятся файлы 0011 (админовские ключи, которые известны априори), 0000 (CHV1), 0100 (CHV2), а также некоторые другие, которые нам не понадобятся. Поддиректория GSM - 7F20. Файлы - 0001 (тот самый Ki ;-)), 6F07 (IMSI), 6F05 (Language Preference), 6F20 (Kc), 6F31 (HPLMN), 6FAD (Administrative Data), 6F38 (Service table), 6F74 (Broadcast Control Channels). Поддиректория Telecom - 7F10. Файл - 6F42 (SMS parameters). GSM команды Что касается GSM команд, то это набор ISO7816 команд для работы с файлами плюс специфичные для GSM SIM-карт команды. Здесь следует сделать небольшую но существенную оговорку - класс команд GSM карточек A0, обратите на это внимание! Ниже приведены APDU некоторых команд GSM SIM-карты. Часть из приведенных в таблице команд в дальнейшем будут использованы в примерах. Command Cla Ins P1 P2 P3 Verify Key A0 2A 00 key num Len Verify CHV A0 20 00 key num 08 Select File A0 A4 00 00 02 Get Response A0 C0 00 00 Len Status A0 F2 00 00 Len Read Binary A0 B0 Offset High Offset Low Len Read Record A0 B2 Record nb Mode Len Update Binary A0 D6 Offset High Offset Low Len Update Record A0 DC Record nb Mode Len Run GSM Alg. A0 00 00 00 10 Terminal Profile A0 10 00 00 Len Fetch A0 12 00 00 Len Terminal Response A0 14 00 00 Len Обратите внимание, что последние три команды предназначены для работы с SIM Application Toolkit и имеют место быть только на карточках фазы 2+.
Необходимый минимум Предполагаем, что у нас есть файловая система GSM (это чертовски облегчает жизнь). Посему незамедлительно приступим к персонализацтт (заполнению на нашей карте файлов, перечисленных в разделе Файловая система). Для наглядности примера примем за исходные данные такие значения: НАЧАЛЬНЫЕ ЗНАЧЕНИЯ ADM0 = ADM1 (Hex) 00 00 00 00 00 00 00 00 PIN1 = PIN2 (Hex) 31 31 31 31 FF FF FF FF (ASCII) "1111" PUK1 = PUK2 (Hex) 31 32 33 34 35 36 37 38 (ASCII) "12345678" Итак, вставив карточку в ридер, подав на нее питание и получив ATR (Answer To Reset - ответ карточки на подачу питания или команду СБРОС/RESET), выполняем по шагам ... Шаг 1. Предъявляем админовские пароли. Cla Ins P1 P2 P3/Lc Le Data In A0 2A 00 00 08 00 00 00 00 00 00 00 00 Чисто случайно получаем ответ 90 00 и невозмутимо продолжаем - Cla Ins P1 P2 P3/Lc Le Data In A0 2A 00 01 08 00 00 00 00 00 00 00 00 Не путайте пароли администратора с PIN и PUK-кодами, которыми Вы пользуетесь в процессе эксплуатации своего телефона. Чтобы исключить возможную путаницу понятий в дальнейшем, разграничим понятия PIN-кодов и паролей администратора. Пароли администратора позволяют получить неограниченный доступ к содержимому карточки, в то время, как PIN и PUK-коды это всего лишь определенные в файловой системе GSM файлы (CHV1 и CHV2), содержащие эти самые коды, плюс сопутствующая информация. Эти файлы (CHV1 и CHV2) используются Вашим телефоном для запроса ввода PIN и PUK кодов. Верификация кодов происходит путем сверки введенного с содержимым файла. Предъявление PIN/PUK кодов ни в коей мере не позволит Вам вносить изменения на карте, как то - создание, запись или удаление файла. А вот пароли администратора позволяют подобные манипуляции. К примеру, ели вы заблокировали Вашу карту, в том числе и PUK-код, то зная пароли администратора, просто перезапишите определенные области в файле CHV1 (или CHV2, первый или второй PIN/PUK коды соответственно). Шаг 2. Записываем PIN'ы и PUK'и. Начинаем с CHV1 - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 00 00 Теоретически получаем 90 00. Обновляем содержимое (всего файла) - Cla Ins P1 P2 P3/Lc Le Data In A0 D6 00 00 17 01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A Здесь сделаю краткое отступление с целью объяснить формат содержимого CHV файла: Byte Parameter/Description Mandatory-Optional Length 1 Байт активации - 00 - не используется - 01 - нужно предъявлять при включении трубки 1 2-3 RFU, заполняется нулями 2 4-11 PIN (ASCII коды символов в HEX; значения FF - нет символов). Пин-код в нашем случае: 1111 8 12 Предустановленное к-во попыток ввода пин-кода 1 13 Оставшееся к-во попыток ввода пин-кода 1 14-21 PUK (ASCII коды символов разблокировки пина в HEX). PUK в нашем случае: 12345678 8 22 Предустановленное к-во попыток ввода кода разблокирования 1 23 Оставшееся к-во попыток ввода кода разблокирования 1 В данном примере пин-код, это четыре единицы - "1111" с ограничением количества попыток неправильного ввода равного трем, а PUK - "12345678" с соответствующим количеством попыток равным десяти. Аналогичным образом записываем CHV2 - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 01 00 Должны получить 90 00. Обновляем содержимое (делаем пин и пак-коды одинаковыми) - Cla Ins P1 P2 P3/Lc Le Data In A0 D6 00 00 17 01 00 00 31 31 31 31 FF FF FF FF 03 03 31 32 33 34 35 36 37 38 0A 0A Проверить корректность записи пин-кодов можно командой - Cla Ins P1 P2 P3/Lc Le Data In A0 20 00 01 08 31 31 31 31 FF FF FF FF Это обычная проверка пин-кода. Именно такой APDU формируется Вашим телефоном и отсылается карточке, когда, после включения телефона, вводится пин-код. Результат должен быть 90 00.
Шаг 3. IMSI или Ваш персональный логин в сеть. IMSI (International Mobile Subscriber Identity) - это глобально уникальный идентификатор абонента. Формируется из 3 частей: код страны + код сети оператора GSM + внутрисетевой код абонента. Сопоставляется в биллинговой и коммуникационной системе оператора с выделенным абоненту телефонным номером, собственно поэтому IMSI и выполняет роль логина в сеть ;-). Формат IMSI, который используется оператором, отличается от хранимого на SIM-карте. Допустим, к примеру, что оператор видит IMSI как - 123456789012345 (15 цифр). Тогда на карточку нужно заносить IMSI в виде - 08 19 32 54 76 98 10 32 54. Правило преобразования следующее: к IMSI а-ля оператор приписываем 809 слева, в результате чего получаем - 809123456789012345 (18 цифр); считаем, что полученное на предыдущем этапе число в BCD формате (т.е. каждые две цифры представляют один байт). Переставляем старший и младший ниблы каждого байта местами. В результате должны получить что-то подобное этому - 081932547698103254. Первый байт отражает количество значащих байт (исключая байт длины - себя), необходимых для IMSI. Длина IMSI не может превышать 8 байт. Но иногда иператоры могут использовать укороченную нотацию, когда IMSI меньше 15 цифр. В таком случае, необходимо IMSI от оператора дополнить справа шестнадцатеричными F до длины в 15 цифр и подвергнуть описанному выше преобразованию. Естественно, не забудте скорректировать первый байт, там уже не будет 8, а цифра поменьше. Запишем наш IMSI. Перейдем в директорию GSM - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 7F 20 Должны получить ответ вида 9F XX, где XX - длина доступных данных для команды Get Response. Мы в директории GSM. Выбираем файл IMSI - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 07 Снова получаем 9F XX. Выполняем запись содержимого файла IMSI - Cla Ins P1 P2 P3/Lc Le Data In A0 D6 00 00 09 80 91 23 45 67 89 01 23 45 Должны получить 90 00. IMSI записан. Шаг 4. Ki - пароль доступа к сети. KI (Mobile Subscriber Identification Key) - идентификационный ключ абонента. Используется для аутентификации абонента в сети оператора GSM. Формат Ki, используемый оператором, представляет шестнадцатеричное число, длиной 16 байт, например: 12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF. Файл на карточке, содержащий Ki, имеет следующий формат - 00 LL 00 Ki ....... Ki ZZ YY 00 Byte Parameter/Description Mandatory-Optional Length 1 RFU - зарезервировано 1 2 LL - длина Ki (HEX) 1 3 RFU - зарезервировано 1 4 - 19 значение Ki (HEX) 16 20 Предустановленное к-во попыток ввода 1 21 Оставшееся к-во попыток ввода 1 22 RFU - зарезервировано 1 Длина Ki может быть ментше 16 байт. В таком случае используется выравнивание влево, а неиспользуемые байты заполняются значениями FF. После преобразования к необходимому виду, получаем - 00 10 00 12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF 08 08 00 Это значение и будем заносить на карточку. Мы все еще в директории GSM. Поэтому сразу выбираем нужный файл - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 00 01 Отет вида 9F XX нас как всегда устраивает. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 22 00 10 00 12 34 56 78 90 AB CD EF 12 34 56 78 90 AB CD EF 08 08 00 И как всегда должны получить ответ карты - 90 00. Шаг 5. Инициализируем необходимые файлы поддиректории GSM. Файл Language Preference содержит коды одного или более языков в порядке предпочтения. Формат файла очень простой - каждый байт обозначает один из языков. Для простоты будем работать только с английским языком. Выбираем нужный файл - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 05 Отет вида 9F XX нас как всегда устраивает. Обновляем содержимое (только первый байт) - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 01 01 И как всегда должны получить ответ карты - 90 00. Файл Ciphering key Kc содержит сессионный ключ. Формат - первые 8 байт есть, собственно, сам ключ. Последний, девятый байт, обозначает порядковый номер ключа, причем старшие 5 бит этого байта всегда должны быть выставлены в 0. Последний байт имеет специальное значение - 07 (в двоичном представлении - 00000111), что указывает на отсутствие ключа (ключ будет сгенерирован самой картой в процессе работы). Выбираем нужный файл - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 20 Отет должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 09 FF FF FF FF FF FF FF FF 07 И как всегда должны получить ответ карты - 90 00. Обратите внимание! В качестве значения ключа переданы байты FF. Это не есть тот ключ, который будет использоваться. Значения FF всегда используются в качестве заполнителя непроинициализированных полей файлов на смарт-карте, если дополнительно ничего не оговорено. О том, что ключа еще нет, также говорит и последний байт - 07. Файл HPLMN search period - содержит итнервал времени между поисками HPLMN (изучайте матчасть, если интересно ;-) ). Формат файла - 1 байт, кодирующий время как (16Y+Z)n минут. Причем Y - старший, а Z - младший ниблы байта. Значение 00 - поиск не осуществляется. Выбираем нужный файл - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 31 Отет должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 01 04 И как всегда должны получить ответ карты - 90 00. Файл Administrative data. Не вдаваясь в подробности обновим содержимое файла - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F AD Отет должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 03 00 FF FF И как всегда должны получить ответ карты - 90 00.
В данном случае был установлен нормальный режим работы (первый байт равен 00) без дополнительных параметров (байты 2 и 3 равны FF). Файл SIM servicу table отображает список сервисов, указывая какие из них доступны и активны. За дополнительной информацией обращайтесь к GSM 11.11. Вкратце - каждый байт отвечает за определенные четыре сервиса, указывая, который из них реализуется самой картой и активен. Я только заполню необходимые значения - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 38 Отет должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 04 FF 3F FF 0F И как всегда должны получить ответ карты - 90 00. Последний файл поддиректории GSM, с которым мы будем возиться - Broadcast control channels. Этот файл длиной 16 байт. Заполним его значениями по умолчанию - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 74 Отет должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 В6 00 00 10 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF И как всегда должны получить ответ карты - 90 00. Перейдем в поддиректорию Telecom - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 7F 10 Отет должен быть 9F XX. Здесь нас интересует только файл SMSP (Short message service parameters). Файл состоит из одной или нескольких записей, содержащих набор SMS параметров. Первая запись (возможно единственная) содержит набор параметров по умолчанию. Структура записи - Byte Parameter/Description Mandatory-Optional Length 1-Y Alpha-Identifier O Y Y+1 Parameter Indicators M 1 Y+2 ... Y+13 TP-Destination Address M 12 Y+14 ... Y+25 TS-Service Centre Address M 12 Y+26 TP-Protocol Identifier M 1 Y+27 TP-Data Coding Scheme M 1 Y+28 TP-Validity Period M 1 Колонка M/O таблицы указывается на обязательное/опциональное присутствие поля в записи (M - mandatory, O - optional). Единственное необязательное поле - альфа-идентификатор. Значение длины Y может быть равно нулю. Следующее поле - индикатор параметров длиной 1 байт. Индикатор является битовой маской, указывающей наличие/отсутсвие следующих пяти полей в записи (если бит установлен в 1 - параметр присутствует) - Byte Parameter/Description Mandatory-Optional Length 1 TP-Destination Address 2 TS-Service Centre Address 3 TP-Protocol Identifier 4 TP-Data Coding Scheme 5 TP-Validity Period 6 зарезервирован, установлен в 1 7 зарезервирован, установлен в 1 8 зарезервирован, установлен в 1 Поле Destination Address оставляем незаполненным (поле заполняется непосредственно при отправке SMS-сообщения). Поле Service Centre Address заполняется специфичным для конкретного оператора значением - номером сервис центра. Предположим, что номер сервис центра нашего оператора +38050-123-45-67 ;-). В таком случае поле TS-Service Centre Address будет иметь вид: 07 91 83 50 10 32 54 76 FF FF FF FF Первый байт (07) указывает количество байт данный, содержащихся в поле. Неиспользуемые байты заполняются значениями FF. Второй байт (91) представляет тип закодированного адреса сервис-центра (GSM 3.40 Version5.3.0:July1996 страница 33). В нашем случае он указывает, что адрес сервис-центра представлен в виде международного номера телефона (не забудьте переставить местами старшие и младшие ниблы каждого байта!). Следующее поле - TP-Protocol Identifier. Значение этого поля установим в 00. Подробное описание формата этого поля в документе GSM 3.40 (GSM 3.40 Version5.3.0:July1996 страница 47). Поле TP-Data Coding Scheme тоже оставим нулевым - 00 (GSM 3.38 страница 8). Поле TP-Validity Period (GSM 3.40 Version5.3.0:July1996 страница 33) указывает период времени, в течение которого будут предприниматься попытки доставить SMS-сообщение абоненту, недоступному в сети. Значение 168 (hex: A8) соответствует двум дням. Как уже упоминалось, файл SMSP состоит из записей, то есть его структура - linear fixed. Длина одной записи - 44 байта (hex:2C). Согласно вышеописанной структуре, первая запись в нашем случае будет выглядеть следующим образом - 4B 56 53 4D 53 30 31 FF FF FF FF FF FF FF - alpha-identifier E1 - Parameter indicators FF FF FF FF FF FF FF FF FF FF FF FF - TP-Destination Address 07 91 83 50 10 32 54 76 FF FF FF FF - TS-Service Centre Address 00 - TP-Protocol Identifier 00 - TP-Data Coding Scheme A7 - TP-Validity Period FF - RFU FF - RFU Теперь выполним команду Select для нашего файла - Cla Ins P1 P2 P3/Lc Le Data In A0 A4 00 00 02 6F 42 Ответ должен быть 9F XX. Обновляем содержимое - Cla Ins P1 P2 P3/Lc Le Data In A0 DC 01 04 2C 4B 56 53 4D 53 30 31 FF FF FF FF FF FF FF E1 FF FF FF FF FF FF FF FF FF FF FF FF 07 91 83 50 10 32 54 76 FF FF FF FF 00 00 A7 FF FF И как всегда должны получить ответ карты - 90 00. На данном этапе инициализация SIM -карты завершена. Вставив карточку в телефон и включив писание, должны увидеть приглашение ввода пин-кода. Введите "1111" (вспомните шаг 2). Телефон должен начать поиск сети и, при условии заполнения реальными значениями соответствующих файлов, должен подключиться. Попробуйте сделать звонок ;-). Заключение Подведем краткий итог. Аккумулируя опыт, изложенный в данной статье, можно легко понять, что: GSM SIM карта - это обычная смарт-карта, соответствующая стандарту ISO-7816, но использующая в качестве класса команд значение CLA = A0 SIM-карта содержит два пароля администратора ADM0 и ADM1, открывающие почти неограниченные возможности манипуляции информацией на карточке. Если Вам изветны эти пароли, то перезаписать/изменить содержимое карточки (в том числе пин и пак-коды) уже дело одной минуты Производители карт проводят предперсонализацию карты, то есть формируют на карте файловую систему GSM, оставляя конечному пользователю (оператору мобильной связи) внести только сетезависимые параметры Большинство рассмотренный в статье параметров могут быть считаны с реальных SIM-карт, для чего необходимо знать всего-лишь пин-код этой карты Наверное единственный параметр, который может быть получен только от оператора - Ki (пароль доступа в сеть ;-) ) О том, как изготовить контейнер для работы с действующим SIM-модулем и стандартным кард ридером читайте здесь . В заключении хочу сказть, что используя софтину и пиремы описанные в этой статье можно разблокировать любую сим карту. Ниже пущу сыллочки на софт для работы с симкой.
Это точно... Я тоже до конца не смог. И если я когда нить соберусь таким заниматься, то я просто куплю сканер
Номер записан в мультисим,когда с другой симки включаються меня отрубает из сети,приходиться перезагружать телефон.Можно зделать так чтоб пока я на своей мультисимке сижу,с другой небыло доступа в сеть,то есть зделать приоритет одной симки над другой с одним и тем-же номером?