Должны получить ответ вида 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-модулем и стандартным кард ридером читайте здесь .
В заключении хочу сказть, что используя софтину и пиремы описанные в этой статье можно разблокировать любую сим карту. Ниже пущу сыллочки на софт для работы с симкой.
прогу можно найти тут
http://www.scardsoft.com
p.s. очень интересный ресурс для любителей клона симок