BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 👇 este 📰 artículo ⏎
  • 🔍 en 💬 foros ⏎
Regístrate Regístrate Identifícate Identifícate

Cómo funcionan y de dónde salen los códigos secretos para acceder a funciones ocultas en el móvil

Joshua Llorach
Códigos MMI USSD

Probablemente en alguna ocasión te ha tocado marcar en el móvil un extraño código compuesto por asteriscos, almohadillas y números. Estos códigos tan poco amigables y difíciles de recordar dan acceso a funciones ocultas en el terminal y permiten modificar el comportamiento de la red o cambiar parámetros en la SIM.

Encontrar una lista que reúna todos estos códigos es imposible, puesto que solo algunos de ellos están estandarizados. Cada operadoras tiene libertad para definir los suyos propios y lo mismo ocurre con los fabricantes y sistemas operativos.

En este artículo, más que hacer una recopilación de códigos que puedas usar, vamos a intentar desmitificarlos entendiendo cómo funcionan y qué ocurre en el terminal una vez los tecleas.

Estructura de los códigos MMI

El nombre técnico genérico para este tipo de códigos es MMI (Man-Machine-Interface). Su estructura está estandarizada1 desde los tiempos del 2G, pero solo algunos de los códigos son universales.

Todos los códigos se inician con el asterisco *, la almohadilla # o una combinación de ambos. Esta combinación indica qué acción se está ejecutando. Por ejemplo, es seguro ejecutar cualquier código que empiece con *#, como *#21#, ya que su función es consultar el estado de algo, en este caso con el código de servicio 21, que hace referencia al desvío de llamadas incondicional.


AcciónEjemplo
*Activar*21*número# desvía todas la llamadas a un número
#Desactivar#31# desactiva la ocultación del identificador de llamada
*#Consultar*#06# muestra el IMEI del móvil
**Registrar**04*viejo_pin*nuevo_pin*nuevo_pin# cambia el PIN de la SIM
##Suprimir##21# Retira el desvío de llamadas

Tras la combinación de asteriscos y almohadillas, le sigue a continuación el Service Code (SC) y hasta 3 valores o parámetros Supplementary Information (SI) separados por asteriscos. Finalmente siempre tenemos una almohadilla y en la mayoría de los casos hay que pulsar el botón de llamar para ejecutarlo.

*SC*SI1*SI2*SI3#

Códigos SS para gestionar la SIM y la red

Dentro de los códigos MMI tenemos varios tipos, dependiendo de a quién van dirigidos.

  • Lo primero que comprueba el móvil es si se trata de un código SS (Supplementary Service), que son universales para todas las redes y móviles, como el *31# con el que se indica a la red que oculte nuestro número al llamar. Estos códigos los interpreta el móvil y genera una petición a la la red para modificar su comportamiento.
  • Algunos de los códigos tienen como destinatario la tarjeta SIM, como el **04*viejo_pin*nuevo_pin*nuevo_pin# con el que cambiamos el PIN y en este caso la petición no sale del móvil.

Códigos USSD para la operadora, sistema operativo y fabricante

El segundo tipo de códigos son los USSD (Unstructured Supplementary Service Data), que el móvil envía directamente a la red sin interpretarlos.

  • Cada operadora pueden implementar sus propios códigos, como el *133# que Movistar utiliza para que los clientes de prepago puedan consultar el saldo que queda en su tarjeta. Puesto que estos códigos no están estandarizados, son diferentes en cada compañía.
  • Finalmente tenemos los códigos definidos por el fabricante del móvil y por las apps instaladas. La peculiaridad es que en este caso tras escribir el número no es necesario pulsar llamada, ya que el móvil dispara la acción al introducir el último carácter.

Solo hay un código USSD estandarizado y es obligatorio que todos los móviles soporten. Es el *#06# con el que se muestra el IMEI del terminal. A partir de ahí cada sistema operativo implementa los suyos, además de los fabricantes, por lo que te encontrarás que los códigos que funcionan en un terminal no lo hacen en otro.

  • En iPhone el más famoso es el *3001#12345#*con el que se abre la aplicación Field Test, que muestra numerosos parámetros internos sobre la cobertura móvil utilizada por el terminal, como la fuerza de la señal, bandas de frecuencias y tipo de cobertura.
  • El equivalente en Android sería el *#*#4636#*#* con el que se abre el menú Prueba.

Echando un vistazo al código de la app Telefóno en AOSP2 puedes entender qué ocurre entre bambalinas al marcar uno de estos códigos secretos. Básicamente, cualquier app puede registrar su propio código que el dialer se encargará de invocar cuando lo marque el usuario.

static boolean handleSecretCode(Context context, String input) {
        // Secret codes are in the form *#*#<code>#*#*
        int len = input.length();
        if (len > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) {
            Intent intent = new Intent(TelephonyIntents.SECRET_CODE_ACTION,
                    Uri.parse("android_secret_code://" + input.substring(4, len - 4)));
            context.sendBroadcast(intent);
            return true;
        }
        return false;
    }
  1. etsi.org/deliver/etsi_ts/122000_122099/1…v100000p.pdf
  2. ed512180b13d58/src/com/Android/dialer/SpecialCharSequenceMgr.java#131

Actualizado