-[ 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 das 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 prolongacin 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*