Red de conocimiento informático - Material del sitio web - Cómo cambiar IMEI, IMSI, número de serie de la tarjeta SIM en el emulador de Android

Cómo cambiar IMEI, IMSI, número de serie de la tarjeta SIM en el emulador de Android

El teléfono móvil utiliza IMEI e IMSI para iniciar sesión en la red GSM. El lado de la red GSM es responsable de asignar el IMSI al número de teléfono móvil (MSISDN) y realizar la asignación inversa.

(i) Modificación del número de tarjeta SIM:

El número de tarjeta SIM es una cadena de números impresos en la tarjeta SIM.

El comando AT para leer el número de la tarjeta SIM es AT CRSM=176, 12258, 0, 0, 10

Por lo tanto, busque este comando AT en la simulación de Android de su fuente código - En sim_card.c:

const char*

asimcard_io(ASimCard sim, const char* cmd)

{

int nn;

#if ENABLE_DYNAMIC_RECORDS

int comando, id, p1, p2.p3;

#endif

estructura estática constante { const char* cmd; const char* respuesta; } respuestas[] =

{

{" CRSM=192, 28436, 0, 0, 15", "CRSM: 144, 0,000000146F1404001AA0AA01020000 "},

{" CRSM = 176,28436,0,0,20 "," CRSM: 144,0,416E64726f69644fffffffffffffffffffffffffffffffffffffffffffffffff. "CRSM=192,28433,0,0,15","CRSM:144,0,000000016f11040011a0aa01020000"},

{"CRSM=176,28433,0,0,1","CRSM : 144, 0, 55" },

{" CRSM=192, 12258, 0, 0, 15", " CRSM: 144, 0, 0000000a2fe204000fa0aa01020000" },

{ " CRSM=176, 12258, 0, 0, 10", " CRSM: 144, 0.98101430121181157002" },

...

...

Abrir emulator-arm.exe o emulator-x86.exe en el binario UE, busque la cadena "98101430121181157002" y cámbiela al número de tarjeta SIM deseado.

Por ejemplo:

00209a00h: 31 30 00 00 2b 43 52 53 4d 3a 20 31 34 34 2c 30... CRSM: 144, 0

00209a10h: 2C 39 38 31 30 31 34 33 30 31 32 31 31 38 31 31; , 981014301211811

00209a20h: 35 37 30 32 00 2b 43 52 5 3 4d 3d 31 39 32 2c; CRSM=192,

(2), IMEI, modificación del número IMSI:

Obtenga el código Java del número IMEI del teléfono móvil y el número de enrutamiento ISMI:

Administrador de TelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

String imei = manager.getDeviceId()

String imsi = manager.getSubscriberId(); String imsi = manager.getSubscriberId();

String imsi = manager.getSubscriberId()getSubscriberId();

Busque la implementación de la clase TelephonyManager en el árbol de código fuente de Android:

Función miembro getDeviceId:

/**

* Devuelve el ID único del dispositivo, por ejemplo, IMEI y MEID de GSM

* Devuelve el ID de dispositivo único, por ejemplo, el IMEI y MEID de GSM

* o el ESN de un teléfono CDMA. Si el ID del dispositivo no está disponible, se devuelve nulo.

*

* lt;pgt;Permiso requerido:

* {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}

*/

cadena pública getDeviceId() {

intenta {

return getSubscriberInfo().getDeviceId();

} catch ( RemoteException ex) {

return null;

} catch (NullPointerException ex) {

return null;

}

}

Función miembro getSubscriberId:

/**

* Devuelve un ID de usuario único, como el IMSI de un teléfono GSM.

* Devuelve nulo si no está disponible.

* lt;pgt;

* Permisos necesarios:

* {@link android.Manifest.permission# READ_PHONE_STATE READ_PHONE_STATE}

*/

cadena pública getSubscriberId() {

intenta {

return getSubscriberInfo().getSubscriberId();

} catch ( RemoteException ex) {

return null;

} catch (NullPointerException ex) {

// Esto puede suceder antes de que el teléfono se reinicie debido a una congelación

} p>

return null;

}

}

Las dos funciones miembro anteriores finalmente llaman a la misma función miembro privada getSubscriberInfo () :

private IPhoneSubInfo getSubscriberInfo() {

// Consíguelo cada vez porque el proceso a menudo falla

return IPhoneSubInfo.asInterface(ServiceManager.getService( " iphonesubinfo"));

}

Los números IMSI e IMEI del teléfono móvil obtenidos a través de la función privada getSubscriberInfo antes mencionada están codificados en el archivo android_modem.c:

/* La pila GSM de Android comprueba si el nombre del operador ha cambiado cuando el roaming está activado

*. Si no, no actualizará el estado de roaming. Si no, no actualizará el ícono de estado de roaming.

*

* Esto significa que necesitamos simular dos operadores diferentes:

* - El primero es el estado de registro "local", y también debe ser el estado de registro "local".

Corresponde al IMEI del usuario suplantado

*

* - el segundo es el estado de registro "roaming" y debe tener

* un nombre y MCC diferente /MNC

*/

#define OPERATOR_HOME_INDEX 0

#define OPERATOR_HOME_MCC 310

#define OPERATOR_HOME_MNC260

#define OPERATOR_HOME_NAME " Android"

#define OPERATOR_HOME_MCCMNC STRINGIFY(OPERATOR_HOME_MCC) (

STRINGIFY(OPERATOR_HOME_MNC)MNC)

#define OPERATOR_ROAMING_INDEX 1

#define OPERATOR_ROAMING_MCC 310

#define OPERATOR_ROAMING_MNC 295

#define OPERATOR_ROAMING_NAME"TelKila"

#define OPERATOR_ROAMING_MCCMNC STRINGIFY(OPERATOR_ROAMING_MCC)

STRINGIFY(OPERATOR_ ROAMING_MNC)

/* Funciones utilizadas para manejar solicitudes no triviales*/

typedef const char* (*ResponseHandler)(const char* cmd, AModem modem

);

static const struct {

const char* cmd; /* El comando proviene de libreference-ril.

Entonces, si el primer carácter

es '! entonces el resto es sólo el prefijo */

const char* respuesta; /* Respuesta predeterminada, NULL si se requiere un manejo específico o

si OK es lo suficientemente bueno */

Controlador ResponseHandler; /* Controlador específico, ignorado si 'respuesta' no es NULL,

NULL si OK es lo suficientemente bueno */

} sDefaultResponses[ ] =

{

/* Ver onRadioPowerOn() */

{ "CPHS=1", NULL, NULL },

{ "CTZV =1", NULL, NULL },

...

{ "! VTS=", NULL, handleSetDialTone },

{ "CIMI", OPERATOR_HOME_MCCMNC "000000000" , NULL }, /* Solicitar un número de identificación de usuario internacional*/

{ " CGSN", "000000000000000", NULL }, /* Solicitar una versión de modelo*/

{ " CUSD=2", NULL, NULL }, /* Cancelar USSD */

...

/* Finalizar lista */

{NULL , NULL, NULL}

};

Por lo tanto, abra emulator-arm.exe o emulator-x86.exe en el archivo binario UE, busque la cadena "CGSN" y reemplácelo Cambie al número IMEI deseado; busque la cadena "CIMI" y cámbiela al número IMSI deseado. Cabe señalar que los primeros seis dígitos del número IMSI "310260" no se pueden cambiar, de lo contrario el emulador no podrá conectarse a la red.

Por ejemplo:

001fc700h: 33 00 41 00 48 00 21 2b 56 54 53 3d 00 2b 43 49; VTS=. /p>