Copy Link
Add to Bookmark
Report
SET 028 0x09
-[ 0x09 ]-------------------------------------------------------------------
-[ Moviles - 2 ]------------------------------------------------------------
-[ FCA00000 ]-------------------------------------------------------SET-28--
Aqui estoy de nuevo para contaros mas cosas sobre mi maravilloso telefono movil.
Al parecer mi anterior articulo fue instructivo para alguno de vosotros, asi
que voy a conter un par de detalles mas.
El primero se refiere al comando AT+CKPD
Definido en ETSI TS 100 916 V7.6.0 (2001-03), este comando sirve para emular
el teclado del terminal enviando cada pulsacion como caracteres.
Los parametros son:
+CKPD=<keys>[,<time>[,<pause>]]
Donde <time> es el tiempo, en decimas de segundo, que cada tecla es mantenida
pulsada, y <pause> es el tiempo, tambien en decimas de segundo, que hay que
esperar entre una pulsacion y otra.
<keys> es una cadena de caracteres que representa las teclas, segun el listado
siguiente:
Char IRA (dec) Commentario (y algunos simbolos)
# 35 hash
% 37 signo de porcentaje (P)
* 42 estrella(*)
0... 9 48... 57 teclas de numeros
: 58 caracter de escape para teclas especificas del fabricante
; 59 caracter de escape para cadenas de caracteres
< 60 flecha izquierda
> 62 flecha derecha
@ 64 tecla alfa (a/ABC)
A/a 65/97 canal A (A)
B/b 66/98 canal B (B)
C/c 67/99 limpiar pantalla (C/CLR)
D/d 68/100 bajar volumen
E/e 69/101 terminar conexion (END)
F/f 70/102 funcion (FCN)
L/l 76/108 bloquear telefono (LOCK)
M/m 77/109 menu (MENU)
P/p 80/112 alimentacion (PWR)
Q/q 81/113 silencio/mudo (MUTE)
R/r 82/114 rellamar numero anterior (R/RCL/MR)
S/s 83/115 empezar conexion (SEND)
T/t 84/116 guardar/ memoria (STO/M/M+)
U/u 85/117 subir volumen
V/v 86/118 flecha abajo
W/w 87/119 pausa
X/x 88/120 auxiliar (AUX)
Y/y 89/121 borrar ultimo caracter (C)
[ 91 tecla 1
] 93 tecla 2
^ 94 flecha arriba
Como se ve, son bastante graficos.
El caracter 58 ":" se usa para indicar una unica tecla que no esta en esta
tabla, mientras que el 59 ";" es usado para indicar un conjunto de tales
caracteres. Los caracteres que le siguen seran tratados como numeros, y no
convertidos a sus teclas correspondientes, hasta encontrar un caracter
finalizador 59 .
Hasta aqui, lo que dice el libro. Vamos a ver como funciona.
Enciendo el movil, lo conecto al puerto serie, arranco el hyperterminal,
escribo
AT
y me responde
OK
Ahora escribo
at+ckpd=0
responde
OK
y en la pantalla me aparece el caracter "0". Esto marcha.
at+ckpd=630111111
y escribe esos numeros en la pantalla.
?Como sera para iniciar la llamada?
Normalmente yo pulso la tecla verde, que quiere decir SEND, asi que pruebo
at+ckpd=s
Y empieza a llamar ! Sorprendente.
Para cortar la llamada deberia ser END
at+ckpd=e
y funciona. Aunque tambien podria haber usado
at+ckpd=c
A ver si con este grafico os haceis una idea de como es mi movil:
/-----------\
| +-------+ |
| | | |
= | | |
| +-------+ =
= |
| ---/^\--- |
| [ < > ] |
| ---\v/--- |
| S C |
| --------- |
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
| * 0 # |
| |
\-----------/
Por supuesto que los caracteres que he usado son los de la tabla anterior. Por
ejemplo, la tecla verde de SEND esta encima del '1'.
Seguramente tu telefono tiene estas teclas, y quizas alguna mas. Las unicas
tecla que no he podido localizar y que no se usar son las '='. Creo que es algo
del manos libres.
Tambien hay muchas de las teclas de la lista anterior que no se aplican a mi
movil. Por ejemplo, la tecla LOCK ('L') no esta en mi teclado, y por eso
at+ckpd=L
devuelve
ERROR
Por ejemplo, pulsando la tecla de Menu ']' y luego 3 veces la flecha abajo yo
accedo al menu 'Surf&Fun'. Pulsando de nuevo Menu ']' y flecha abajo accedo al sub-menu de juegos, donde pulso de nuevo Menu para elegir el juego.
at+ckpd=]
OK
at+ckpd=v
OK
at+ckpd=v
OK
at+ckpd=v
OK
at+ckpd=]
OK
at+ckpd=v
OK
at+ckpd=]
OK
Perfecto. Ahora podria jugar desde el hyperterminal, ya que la emulacion de
teclas funciona siempre, independientemente del menu en el que se encuentre.
Otro ejemplo: para escribir un SMS accedo al Menu ']', luego al primer submenu
'1', despues al primer sub-sub-menu '1' y empiezo a escribir. Esto lo emulo
con:
at+ckpd=]
OK
at+ckpd=1
OK
at+ckpd=1
OK
Ahora hay que escribir las letras. En la tecla '5' se encuentran las letras 'j',
'k' y 'l'. Para escribir la 'j' solo tengo que hacer
at+ckpd=5
Pero para escribir la 'k' tengo que pulsar 2 veces seguidas el '5'. Para ello
se usa
at+ckpd=55
Para confirmar que esa es la letra que quiero que aparezca, simplemente espero
que pase un tiempo antes de mandar el siguiente comando. Para ello se usa el
parametro <pause>
at+ckpd=55,,8
Todo junto:
at+ckpd=44,,8
at+ckpd=666,,8
at+ckpd=555,,8
at+ckpd=2,,8
at+ckpd=1,,8
at+ckpd=6,,8
at+ckpd=88,,8
at+ckpd=66,,8
at+ckpd=3,,8
at+ckpd=666,,8
Cuando lo pruebes, debes dejar una pausa antes de teclear cada uno de los
comandos porque el telefono no es muy rapido al responder.
Hay algunos comandos que necesitan que las teclas permanezcan pulsadas durante
mas de un tiempo dado. Por ejemplo, para marcar un numero internacional que
empieza por '+' lo que hay que hacer es pulsar el '0' durante mas de medio
segundo. Para eso se usa el parametro <time> :
at+ckpd=0,6
El telefono se bloquea pulsando la tecla '#' durante mas de medio segundo:
at+ckpd=#,6
Y se desbloquea pulsando esto otra vez, y luego la tecla de menu ']':
at+ckpd=#,6
at+ckpd=]
El unico comando que parece no funcionar es el de apagar el movil. Normalemente
yo pulso la tecla roja 'e' durante 3 segundos. Pero no pasa nada cuando hago
at+ckpd=e,30
Como veis, hay todo un mundo escondido tras estos pequenios y utiles
dispositivos.
--------------------------------------------------------
El segundo tema se refiere al acceso a la tarjeta SIM a traves del telefono.
El comando AT+CSIM permite acceso generico al SIM :
AT+CSIM=<length>,<command>
Lamentablemente mi movil (o mi tarjeta SIM) no permite usar este modo que
parece ser el mas potente.
Asi que hay que conformarse con la version restringida
AT+CRSM=<command>[,<fileid>[,<P1>,<P2>,<P3>[,<data>]]]
En este caso, es el propio ME quien gestiona el interface SIM-ME y las rutinas
de seleccion de datos.
Segun dice la documentacion 3GPP TS 07.07 - ETSI TS 100 916, el valor de
<command> puede ser:
176 READ BINARY
178 READ RECORD
192 GET RESPONSE
214 UPDATE BINARY
220 UPDATE RECORD
242 STATUS
(El valor de la primera columna esta dado en decimal)
Pero segun 3GPP TS 11.11 - ETSI TS 100 977 esta lista se amplia a:
'A4' SELECT
'F2' STATUS
'B0' READ BINARY
'D6' UPDATE BINARY
'B2' READ RECORD
'DC' UPDATE RECORD
'A2' SEEK
'32' INCREASE
'20' VERIFY CHV
'24' CHANGE CHV
'26' DISABLE CHV
'28' ENABLE CHV
'2C' UNBLOCK CHV
'04' INVALIDATE
'44' REHABILITATE
'88' RUN GSM ALGORITHM
'FA' SLEEP
'C0' GET RESPONSE
'10' TERMINAL PROFILE
'C2' ENVELOPE
'12' FETCH
'14' TERMINAL RESPONSE
a los que hay que agregar en la fase administrativa:
'2A', 'D0', 'D2', 'DE', 'C4', 'C6', 'C8', 'CA', 'CC', 'B4', 'B6', 'B8', 'BA' y
'BC'.
y para la fase operacional de GSM:
'16', '18', '1A', '1C', y '1E'
(El valor de los comandos viene dado en hexadecimal)
El parametro <fileid> es un identificador de fichero. Mide 2 bytes y, aunque la
documentacion dice que se debe especificar en notacion hexadecimal, en mi movil
esto no es asi, sino que debe transformarse a decimal.
El primer byte especifica el tipo de archivo, y para GSM es:
3F Archivo maestro (MF)
7F archivo dedicado (DF) de 1er nivel
5F archivo dedicado (DF) de segundo nivel
2F archivo elemental (EF) bajo archivo maestro
6F archivo elemental (EF) bajo archivo de 1er nivel
4F archivo elemental (EF) bajo archivo de segundo nivel
Siguiendo esta estructura:
MF----\
/\ EF1
/ \
DF1 DF2
/ \ / \
/ EF2 EF3 EF4
DF3
/ \
EF5 EF6
Notar que solo existen 2 niveles de DFs.
Los parametros P1 y P2 indican el inicio desde donde hay que leer datos,
mientras que P3 indica cuantos datos hay que leer. Este numero depende de cada
archivo.
Por ejemplo, uno de estos archivos EF seria 6F05, llamado EF_LP. Cada archivo
especificado en la documentacion ETSI 3GPP TS 11.11 - ETSI TS 100 977 tiene un
proposito, y el de este archivo es indicar el lenguaje preferido. La respuesta
mide 4 bytes.
El valor en decimal de 6F05 es 28241 y el comando para leer el dato (READ
BINARY) es 176
con lo que
AT+CRSM=176,28421,0,0,4
nos devuelve el contenido de este fichero:
+CRSM: 144,0,0403FFFF
que quiere decir, segun la ISO 639, que mi lenguaje preferido, cuando uso este
SIM, es 04 (Espanol) pero que si no esta disponible entonces quiero usar 03
(Ingles) . En ausencia de los dos, que use el primero que encuentre (FF).
Los tipos de archivo pueden ser:
-dedicados. En realidad es una agrupacion de archivos. Consta solo de una
cabecera. En cierto modo actuan como directorios.
Hay 4 tipos de archivos dedicados de 1er nivel:
-DF_GSM
-DF_IS41
-DF_TELECOM
-DF_FP_CTS
Todos ellos son hijos del archivo maestro.
Los archivos dedicados de segundo nivel son hijos de DF_GSM
-elementales. Estan compuestos de una cabecera y un cuerpo. Pueden ser de 3
estructuras:
-transparente. Es una secuencia de bytes referenciada por una direccion
relativa. Se leen con READ BINARY.
-lineal. Es una secuencia de registros todos de la misma longitud. Cada
registro puede ser direccionado relativa o absolutamente. Se leen con READ
RECORD.
-ciclico. Sirve para almacenar registros en orden cronologico. Cuando se
llenan todo, el mas antiguo es sobre-escrito. Solo se puede modificar uno de
ellos aunque es posible leerlos todos, bien relativa o absolutamente. Se leen
con READ RECORD.
La diferencia entre transparente y los otros (registro) es que los registros
son mini-tablas con varios objetos del mismo tipo, mientras que el
transparente no tiene una estructura.
Para leer un archivo es necesario posicionarse en el archivo dedicado que lo
contiene.
Cada archivo EF tiene sus propias condiciones de acceso para cada comando. No
hay condiciones para MF ni DF.
Los niveles de acceso son:
0: ALW-siempre, cualquier usuario
1: necesario CHV1 (tambien llamado PIN1)
2: necesario CHV2 (tambien llamado PIN2)
3: RFU-reservado. No utilizado
4-14: ADM-administrador
15: NEVER-nunca se puede ejecutar a traves del interface SIM/ME, aunque el SIM
puede realizar esta accion internamente.
Notar que el acceso 1 se cumple en cuanto el telefono esta encendido y se ha
introducido el codigo de acceso.
Por ejemplo, el archivo llamado EF_ICCID proporciona un numero de identificacion
del SIM. Cualquiera (ALW) lo puede leer, nadie (NEVER) lo puede escribir. Esta
en la posicion 2FE2 (12258 en decimal) Mide 10 bytes (20 caracteres en formato
BCD)
AT+CRSM=176,12258,0,0,10
+CRSM: 144,0,581360110040653702F1
que es lo mismo (reorganizando los digitos de 2 en 2) que el comando
at^scid
Otro archivo: EF_IMSI, el numero internacional de movil. Esta en la posicion
6F07 (28423 en decimal) y mide 10 caracteres, aunque el primero dice realmente
cuantos caracteres mide.
AT+CRSM=176,28423,0,0,9
+CRSM: 144,0,087941306411191182
que es lo mismo (reorganizando los digitos de 2 en 2 empezando por el final) que
at+cimi
714034611911128
Vamos con otro ejemplo mas gracioso. El mecanismo de autentificacion y cifrado
que se realiza entre la red y el SIM se basa en la clave criptografica Ki del
SIM usada por el algoritmo A5. La red envia un numero aleatorio RAND al ME
(Mobile Equipment, o sea, el movil) que a su vez es pasado al SIM mediante el
comando RUN GSM ALGORITHM. El SIM devuelve los valores SRES y Kc al ME que son
derivados de otro algoritmo que explicare luego. El ME envia SRES a la red,
quien lo compara con el que habia calculado. Si coinciden, esta autentificado.
El valor Kc se puede usar a partir de entonces entre el ME y la red para
cualquier comunicacion cifrada.
La clave Ki de autentificacion del usuario se usa en este procedimiento. Mide
128 bits y se guarda en el SIM.
El algoritmo A3 autentifica el MS (ME+SIM) en la red, mientras que el algoritmo
A8 se usa para generar la clave de cifrado.
Los parametros de entrada son Ki en el SIM, y RAND en la red.
Los valores de salida son SRES y Kc.
Es conocido, y ampliamente documentado en Internet, un algoritmo para deducir
Ki a partir de un monton de pruebas con distintos SRAND y analizando la salida
Kc. De hecho existen programas para clonar tarjetas SIM , pero, me pregunto yo:
?para que quiero yo clonar mi propia tarjeta SIM? Por supuesto que duplicar la
de otra persona tiene sentido, pero no mi tarjeta. Al parecer las tarjetas
construidas a partir de 1999 tienen una limitacion por la que solo se puede
ejecutar RUN GSM ALGORITHM un numero maximo de veces para evitar este ataque.
Ademas las nuevas tarjetas 3G tienen esta funcionalidad mucho mas desarrollada.
El fichero EF_KC en la posicion 6F20 (28448) almacena esta clave Kc. Para
leerlo hace falta acceso 1, lo mismo que para modificarlo! y mide 9 bites, de
los cuales el ultimo indica la secuencia:
AT+CRSM=176,28448,0,0,9
+CRSM: 144,0,FB0661EC8BDDA40001
Y deberia cambiar cada vez que a la red le apetezca.
Otro mas:
El archivo EF_SST de la posicion 6F38 indica la lista de servicios instalados y
activos. Asi, algunas tarjetas SIM vienen con algunas posibilidades limitadas.
Cualquiera puede leerlo, pero solo el administrador puede modificarlo, lo cual
es una lastima.
AT+CRSM=176,28472,0,0,10
+CRSM: 144,0,FF3FFF3F3C003FF3000C
Cada uno de los datos hay que separarlo en 4 doble-bits. Por ejemplo, el primer
byte "FF" indica que tengo disponibles y activados los servicios
1: posibilidad de no usar el PIN1
2: puedo marcar numeros abreviados
3: puedo tener una lista de numeros
4: tengo SMS
y asi hasta 50 servicios definidos en el SIM. Hay que tener en cuenta que hay
otros muchos servicios definidos en la red.
Otro fichero 6F46 guarda el nombre del proveedor del servicio:
AT+CRSM=176,28486,0,0,17
+CRSM: 148,4
?y esto que significa?
La respuesta a los comandos AT+CRSM=
es del tipo
+CRSM: SW1,SW2,DATA
donde SW1 y SW2 marcan el codigo de error y DATA es el resultado si es
satisfactorio.
Los codigos de error (en hexadecimal) son:
90+00 exito
91+XX exito, con informacion extra. XX es la longitud de DATA
9E+XX fallo, por transferencia de datos
9F+XX exito, longitud de la respuesta
93+00 ocupado
92+0X exito, pero tras X intentos
92+40 problema de memoria
94+00 no se ha seleccionado un EF
94+02 direccion invalida, fuera de rango
94+04 archivo no encontrado
94+08 comando no apropiado para ese archivo
98+02 necesita PIN1
98+04 acceso no autorizado
98+08 en contradiccion con el status del PIN
98+10 en contradiccion con el status de la invalidacion
98+34 error. SSD fuera de secuencia
98+40 acceso no autorizado. bloqueado
98+50 no se puede incrementar mas ese fichero
67+XX parametro incorrecto P3.
6B+XX parametro incorrecto P1 o P2
6D+XX codigo de instruccion desconocida
6E+XX codigo de instruccion incorrecta
6F+00 error, parametros de entrada erroneos para la autentificacion
6F+XX problema tecnico
En este caso hemos obtenido error 148+4 (94+04 en Hex) lo que quiere decir que
hemos elegido un fichero que no existe en mi SIM, debido a que su
implementacion es opcional.
Hasta ahora hemos venido usando el comando AT+CRSM=176 , es decir, 'B0' READ
BINARY.
Existe otro comando complementario AT+CRSM=214 , es decir, 'D6' UPDATE BINARY
Primero leemos el archivo EF_LP que contiene el idioma:
AT+CRSM=176,28421,0,0,4
+CRSM: 144,0,030504FF
y lo escribimos con nuevos datos:
AT+CRSM=214,28421,0,0,4,08FFFFFF
+CRSM: 144,0
Todo correcto. A partir de ahora, nuestro lenguaje preferido de cara a la red
sera griego (08).
Por supuesto hemos sido capaces de escribirlo porque el nivel de acceso es 1
(PIN1). La mayoria de ficheros interesantes tienen nivel 4-14, es decir,
administrador, por lo que solo el creador de la tarjeta SIM los puede modificar
con una clave super-secreta.
Otro de los comandos nos sirve para ver las propiedades de los ficheros, aun
sin ver su contenido. Todo el mundo tiene acceso a esta informacion, aunque el
cuerpo del archivo necesite un nivel superior de acceso. Este comando es 242
'F2' STATUS
La respuesta al comando STATUS es una cadena con los siguientes bytes para un
archivo elemental EF:
1-2 reservado
3-4 tamanio del archivo
5-6 identificador del archivo
7 tipo: 00=reservado 01=MF 02=DF =4=EF
8 reservado
9-11 condiciones de acceso; permisos
12 status.
b1=0 : invalidado b1=1 : no invalidado
b2 reservado
b3=1 : legible y modificable aunque este invalidado
b4-b8 : reservado
13 longitud de los siguientes datos
14 estructura del EF: 00=transparente 01=lineal 03=ciclico
15 longitud del registro
16-fin reservados
Los permisos en los bytes 9-11 se parten en 6 trozos de medio byte (4 bits)
con los valores:
0: ALW-todos
1: PIN1
2: PIN2
3: RFU-reservado
4-E: ADMinistrador
F: NEW-nuevo. (No significa NEVER)
y
el primer medio-byte indica permisos de lectura
el segundo medio-byte indica permisos de modificacion
el tercer medio-byte no se usa. Reservado
el cuarto medio-byte indica permisos de incremento (si tiene sentido)
el quinto medio-byte indica permisos de invalidacion
el sexto medio-byte indica permisos de re-habilitacion
Mira el ejemplo 01FFBB anterior para entenderlo mejor.
Y esta es la respuesta al comando STATUS es una cadena con los siguientes
bytes para un archivo elemental MF o DF:
1-2 reservado
3-4 memoria que no esta asignada a ningun archivo
5-6 identificador del archivo
7 tipo: 00=reservado 01=MF 02=DF =4=EF
8-12 reservado
13 longitud de los siguientes datos
14-34 datos especificos de GSM
14 caracteristicas del fichero, indicando si detiene el reloj
15 numero de DFs
16 numero de EFs
17 numero de CHVs y codigos administrativos
18 Reservado
19 status del CHV1 (PIN1)
20 status del desbloqueo de CHV1 (PIN1)
21 status del CHV2 (PIN2)
22 status del desbloqueo de CHV2 (PIN2)
23 Reservado
24-34 Reservado para administracion
Vamos con ello:
at+crsm=242,28421
+CRSM: 144,0,000000046F05040001FFBB01020000
Todo este lio de datos se parte en trozos:
0000 No usado
0004 tamanio
6F05 identificador
04 tipo de archivo: EF
00 sin uso
01FFBB acceso: todos leen(0), PIN1 escribe(1), reservado(F), nadie
incrementa(F), ADM invalida(B), ADM re-valida(B)
01 status: no invalidado
02 longitud de los siguientes datos
00 estructura de EF
00 longitud del registro
con otra tarjeta SIM diferente:
at+crsm=242,28421
+CRSM: 144,0,000000046F05040101F0FF01020000
Lo unico que cambia son los permisos de acceso:
01F0FF: todos leen, PIN1 escribe, reservado(0), nadie incrementa, ADM invalida,
ADM re-valida
Es decir, que esta otra tarjeta SIM el dato reservado esta inicializado a 0.
Es curioso, porque la especificacion dice claramente que los datos reservados
deberian se inicializados a 'F'
Aqui esta la lista de ficheros.
Primer columna: Identificacion del fichero
Segunda: Descripcion
Tercera: Posibilidad de que la red haga cambios. Valores:
'2F05' Extended Language preference -Si
'2FE2' ICC identification -No
'4F20' Image data -Si
'4Fxx' Image Instance data Files -Si
'6F05' Language preference -Si
'6F07' IMSI -Cuidado (nota)
'6F20' Ciphering key Kc -No
'6F2C' De-personalization Control Keys -Cuidado
'6F30' PLMN selector -Cuidado
'6F31' HPLMN search period -Cuidado
'6F32' Co-operative network -Cuidado
'6F37' ACM maximum value -Si
'6F38' SIM service table -Cuidado
'6F39' Accumulated call meter -Si
'6F3A' Abbreviated dialling numbers -Si
'6F3B' Fixed dialling numbers -Si
'6F3C' Short messages -Si
'6F3D' Capability configuration parameters -Si
'6F3E' Group identifier level 1 -Si
'6F3F' Group identifier level 2 -Si
'6F40' MSISDN storage -Si
'6F41' PUCT -Si
'6F42' SMS parameters -Si
'6F43' SMS status -Si
'6F44' Last number dialled -Si
'6F45' CBMI -Cuidado
'6F46' Service provider name -Si
'6F47' Short message status reports -Si
'6F48' CBMID -Si
'6F49' Service Dialling Numbers -Si
'6F4A' Extension 1 -Si
'6F4B' Extension 2 -Si
'6F4C' Extension 3 -Si
'6F4D' Barred dialling numbers -Si
'6F4E' Extension 4 -Si
'6F50' CBMIR -Si
'6F51' Network's indication of alerting -Cuidado
'6F52' GPRS Ciphering key KcGPRS -No
'6F53' GPRS Location Information -Cuidado
'6F58' Comparison method information
'6F60' User controlled PLMN Selector with Access Technology
'6F61' Operator controlled PLMN Selector with Access Technology -Cuidado
'6F62' HPLMN Selector with Access Technology -Cuidado
'6F63' CPBCCH information -No
'6F64' Investigation scan -Cuidado
'6F65' RPLMN last used Access Technology -No
'6F74' BCCH information -No
'6F78' Access control class -Cuidado
'6F7B' Forbidden PLMNs -Cuidado
'6F7E' Location information -No (nota)
'6FAD' Administrative data -Cuidado
'6FAE' Phase identification -Cuidado
'6FB1' Voice Group Call Service -Si
'6FB2' Voice Group Call Service Status -Si
'6FB3' Voice Broadcast Service -Si
'6FB4' Voice Broadcast Service Status -Si
'6FB5' Enhanced Multi Level Pre-emption and Priority -Si
'6FB6' Automatic Answer for eMLPP Service -Si
'6FB7' Emergency Call Codes -Cuidado
Hay una nota muy inquietante para el archivo 6F07 que dice:
Si el EF_IMSI se cambia, el SIM deberia mandar un comando REFRESH tal como esta
definido en 3GPP TS 11.14 - ETSI TS 101 267 y actualizar EF_LOCI.
O sea, nosotros no podemos, pero la red si puede cambiar el IMSI. Dado que el
IMSI es equivalente a nuestro numero de telefono, cambiarlo equivale a hacernos
pasar por otro movil. Es logico que la red pueda cambiarlo: es el tipico
servicio mediante el que decidimos cambiar nustro numero de telefono,
manteniendo el SIM. Esta provision la hace la red, pero tiene que quedar
almacenada en el SIM. Segun dice la documentacion, esto se hace mediante un SMS
o una aplicacion de SIM Toolkit. Este segundo metodo parece relativamente
sencillo de hacer con un lector/escritor de tarjetas SIM (de hecho existe un
paquete para Linux que lo hace) pero el primer metodo quiere decir que tambien
un SMS permite un cambio de IMSI.
El primer requisito es que la tarjeta SIM permita el servicio 28 (Data download
via SMS-CB) o 29 (Data download via SMS-PP).
AT+CRSM=176,28472,0,0,10
+CRSM: 144,0,FF3FFF3F3C003FF3000C
y miramos el byte 7(=28/4), que vale 3F=0011.1111 y el 8(=29/4), que vale
F3=1111.0011
que nos dice que el servicio 28 esta activado, y tambien el 29. Nos olvidamos
del servicio de transferencia de datos mediante Cell Broadcast (no lo pensaba
usar) y miramos el de Point-to-Point que esta usable.
Nota: la documentacion ETSI TS 131 102 V3.7.0 (2001-09) dice que estos
servicios estan en las posiciones 28 y 29, pero la TS 100 977 V6.2.0 (1999-05)
dice 25 y 26.
Vamos a las especificaciones TS 11.14 seccion 7 y encontramos 2 posibilidades:
-identificador de protocolo='SIM data download' y esquema de codificacion de
datos='clase2', esto es, F6 o 16
-identificador de protocolo='ANSI-136 R-DATA' y esquema de codificacion de
datos='clase2' y no gestionado por el ME.
Entonces el mensaje se pasa del ME al SIM usando el comando ENVELOPE 'C2'
Los parametros y tamanio del comando ENVELOPE serian:
1-etiqueta de SMS-PP, o sea, 'D1'
1-longitud: A+B+C
A-identidad del dispositivo: Red->SIM, pero el propio ME los establece :-)
byte 1: etiqueta de 'identidad de dispositivo'=02 o 82
byte 2: longitud=2
byte 3: origen. 83=red
byte 4: destino 81=SIM
B-direccion del centro de servicio, que es opcional
byte 1: etiqueta de direccion de 'centro de servicio'=06 o 86
byte 2: tamanio. normalmente 9
byte 3: TON y NPI, que se encuentra en el fichero EF_ADN
byte 4: numero llamante, normalmente de 9 cifras. Deberia ser el SMSC.
C-SMS TPDU (SMS-deliver)
byte 1: etiqueta de direccion de 'SMS TPDU'=0B o 8B
byte 2: longitud=X
bytes N: SMS TPDU, segun se especifica en 3GPP TS 23.040
Pero como digo, no tenemos que preocuparnos de esta encapsulacion porque el
propio movil ME lo construira para nosotros.
La parte fundamental se encuentra en el dato SMS TPDU. Hay mas informacion en
el anterior articulo en el que explico los datos con los que se forma un
SMS-DELIVER, pero lo importante es que se compone de:
TP-MTI 2 bits - Tipo de mensaje = 00
TP-MMS 1 bits - Mas mensajes para enviar? = 0
TP-RP 1 bits - Existe camino de retorno? = 0
TP-UDHI 1 bits - Contiene cabecera? = 1
TP-SRI 1 bits - Necesita informe de status? = 0
TP-OA 2-12 bytes - Direccion de origen = da_igual
TP-PID 1 bytes - Identificador de protocolo superior. Segun 9.2.3.9, para SIM
Data download debe ser 0 1 111111, esto es, 7F
TP-DCS 1 bytes - Esquema de codificacion de datos = 11110110 o 00010110
TP-SCTS 7 bytes - Tiempo de recepcion = da_igual
TP-UDL 1 entero - Longitud de los siguientes datos = calcular_luego
TP-UD N bytes - Datos de usuario
Y una vez mas la parte fundamental se encuentra dentro del dato TP-UD. Buscamos
la 3GPP TS 23.040 y en la seccion 9.2.3.24 encontramos que es otra estructura:
UDHL 1 octeto - Longitud de la cabecera de datos de usuario
IEIa 1 octeto - Informacion del Elemento 'A'
IEDLa 1 octeto - Longitud de la informacion del elemento 'A'
IEDa Na octetos - Elemento de Informacion 'A'
IEIb 1 octeto - Informacion del Elemento 'B'
IEDLb 1 octeto - Longitud de la informacion del elemento 'B'
IEDb Nb octetos - Elemento de Informacion 'B'
......
IEIx 1 octeto - Informacion del Elemento 'X'
IEDLx 1 octeto - Longitud de la informacion del elemento 'X'
IEDx Nx octetos - Elemento de Informacion 'X'
Para no complicar la cosa supongamos que usamos datos de 8 bits sin comprimir.
El dato IEIn puede tener, entre otros, estos valores:
00 Mensajes concatenados, referencia de 8 bits
01 Indicacion de SMS especial
06 Parametros de control del SMSC
08 Mensajes concatenados, referencia de 16 bits
09 Mensaje de control Wireless
0A Formateo de texto
0B Sonido predefinido
0C Sonido definido por el usuario
0D Animacion predefinido
0E Gran animacion (16*16 veces 4 = 32*4 =128 bytes)
0F Pequenia animacion (8*8 veces 4 = 8*4 =32 bytes)
10 Gran dibujo (32*32 = 128 bytes)
11 Pequenio dibujo (16*16 = 32 bytes)
12 Dibujo de tamanio variable
20 RFC 822 cabecera de E-Mail
21-6F Reservado
70-7F (U)SIM Toolkit Security Headers
Este es el dato que nos interesa. Asi que TP-UD es asi:
UDHL=01
IEIa=70
IEDLa=N
IEDa=xxx
donde xxx es el cuerpo del comando del SIM Toolkit.
De nuevo tenemos que encapsular los datos dentro de una estructura, aunque aqui
las cosas son mas sencillas: elegimos el comando IMEI tal como dice el apartado
12.20 del 3GPP TS 11.14 - ETSI TS 101 267 , esto es:
byte 1: etiqueta de IMEI = 14
byte 2: longitud = 08
byte 3-10 : IMEI del ME; el nuevo numero.
Eso es todo. Cuidado a la hora de escibir el numero, ya que los datos van
intercambiados de 2 en 2.
Bueno, pues lanzamos el programa PDUSpy y escribimos con mucho cuidado todo ese
SMS
Y cuando lo recibimos, el telefono se resetea (ya que el SIM manda el comando
REFRESH al ME) y cuando se enciende de nuevo, oh, sorpresa, hemos cambiado de
MSISDN. Notar que esto hace exactamente eso, y no hace lo que estas pensando.
Un detalle importante es el formato del SMS-TPDU . Si el tamanio especificado
no es correcto no se realiza el cambio y es dificil detectar los errores, ya
que el movil se los envia a la red, donde son perdidos para siempre.
Seria todo mas facil si el comando ENVELOPE permitiera el cambio, pero al
parecer el SIM no se fia del ME (movil) , aunque se cree todo lo que le viene
de la red.
Mis pruebas con el dato B-centro_de_servicio parecen indicar que, tiene que
estar reconocido por el SIM.
Esta informacion esta en el archivo EF_SMSP, posicion 6F42. Es un registro, asi
que hay que usar la instruccion 'B2' READ RECORD
at+crsm=178,28482,1,2,44
+CRSM: 144,0,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9FFFFFFFFFFFFFFFFFFFFFFFF079143360
60040345A3F0D0000FFFF
la parte util es 433606004034 5A
O sea, que mi centro de mensajes es +34 63 60 00 04 43 (el ultimo dato es de
relleno) y el identificador de protocolo por defecto es 3F.
Nada tan sencillo como usar el comando 'DC' UPDATE RECORD para modificarlo.
Asi, de paso, hemos visto estos 2 comandos.
Notar que at+crsm=178,... puede devolver la respuesta
+CRSM: 103,44
si la longitud del registro no esta bien especificada.
En mis primeras prueba, hice
at+crsm=178,28482,1,2,28
porque el manual me dice que la longitud del registro en 6F42 es de 28 bytes. Y
obtenia la respuesta
+CRSM: 103,44
Es decir, tamanio incorrecto; asi que use
at+crsm=178,28482,1,2,44
Lo que estaba yo calculando mal es los primeros datos Alpha-Identifier. Pero
como ya tenia la respuesta, poco me importa.
Por ultimo querria contar las opciones del SIM Toolkit, pero mi movil no parece
ser muy amistoso para ello asi que tendre que esperar a probarlo con un lector
de tarjetas SIM.
Espero que hayais disfrutado.
--------------------------------------------------------
Para finalizar, y como nota curiosa, incluyo las parte de normas ITU-T P.50 que
define las frases que se deben usar para comprobar la calidad de las
transmision de voz telefonica en redes locales. El nombre del fichero es
P0050p1e.pdf
Para los que sepan noruego o conozcan alguien que lo hable, recomiendo que lean
la seccion correspondiente. La frases en italiano tambien son graciosas.
44 Recommendation P.50/Appendix I (02/98)
Language: Spanish
File Name Sentence
SP1M01
Bajo el vello de una barba de una semana, se distinguia confusamente el perfil
de la mandibula y del menton, y habia manchas oscuras debajo de sus ojos.
SP1M02
Esa seniora venia mucho a mi casa y, a veces, me ayudaba a blanquear y limpiar
los armarios de la cocina.
SP1F03
Un jinete se separo de la sombra que formaban los arboles junto a la carretera y
se dirigio lentamente hacia la choza.
SP1F04
En aquella llanura habia 12 rebanios con un total de 25 carneros, 4.763 ovejas y
1982 corderos lechales.
SP2M05
La Ecologia es la rama de la Biologia que trata de las relaciones entre los
seres vivos y el medio ambiente.
SP2M06
En la fotosintesis, los vegetales toman la energia de la luz mediante la
clorofila para formar su materia organica.
SP2F07
Despues de unos 340 días de gestacion, la yegua da a luz a un potro que es capaz
de seguir a su madre al cabo de muy poco tiempo.
SP2F08
Joaquin no se daba cuenta del gran papel que su hijo desempeniaba en aquellos
momentos.
SP3M09
En varias de las cabanias unos ninios de pecho rompieron a llorar con unos
chillidos tales que nada parecia poder parar.
SP3M10
La habitacion da a una plaza antigua en la que se levanta un edificio grande y
rectilineo rodeado de casas bajas.
SP3F11
Dentro del baul y en bolsas de celofan, tenia queso manchego, vino aniejo de la
tierra y botellas de leche.
SP3F12
La ciguenia es una ave zancuda, con pico y patas muy largas, que se alimenta de
pequenios vertebrados e insectos.
SP4M13
La gangrena es la muerte local de tejidos por falta de oxigeno, producida por
causas fisicas, quimicas, circulatorias, nerviosas o infecciosas.
SP4M14
El elefante es el mayor de los mamiferos terrestres y dispone de una trompa que
es el resultado de la prolongación de la nariz y del labio superior.
SP4F15
Se llaman fosiles a los restos o huellas de animales o plantas que existieron
antiguamente y se conservan petrificados.
SP4F16
La flor es el organo reproductor de las plantas fanerogamas y de ellas se
originan los frutos y las semillas.
*EOF*