导航菜单
首页 >  » 正文

imei模拟器

imei模拟器

大家好,今天我来给大家讲解一下关于imei模拟器的问题。为了让大家更好地理解这个问题,我将相关资料进行了整理,现在就让我们一起来看看吧。

文章目录列表:

1.如何修改android模拟器上的IMEI,IMSI,SIM card serial number

2.在模拟器上有没有办法取得 IMEI

3.求安卓模拟器IMEI号码修改的具体教程方法。

4.安卓模拟器怎么实现修改imei跟更换IP

如何修改android模拟器上的IMEI,IMSI,SIM card serial number

手机使用IMEI和IMSI登录到GSM网络的,由GSM网络侧负责将IMSI和映射成手机号(MSISDN),以及执行相反方向的映射。

(一)、SIM card 号的修改:

SIM card号就是印制在SIM上的一串数字。

读SIM card号的AT命令为:AT+CRSM=176,12258,0,0,10

因此在andorid模拟其源码中找到该AT命令——在sim_card.c中:

c_t char*

asimcard_io( ASimCard sim, c_t char* cmd )

{

int nn;

#if ENABLE_DYNAMIC_RECORDS

int command, id, p1, p2, p3;

#endif

static c_t struct { c_t char* cmd; c_t char* answer; } answers[]=

{

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

{ "+CRSM=176,28436,0,0,20", "+CRSM: 144,0,416e64726f6964ffffffffffffffffffffffffff" },

{ "+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" },

...

...

因此用UE二进制方式打开emulator-arm.exe 或 emulator-x86.exe,并搜索字符串“98101430121181157002”,然后将其修改成需要的SIM card号。

比如

00209a00h: 31 30 00 00 2B 43 52 53 4D 3A 20 31 34 34 2C 30 ; 10..+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 30 32 00 2B 43 52 53 4D 3D 31 39 32 2C ; 57002.+CRSM=192,

(二)、IMEI、IMSI号的修改:

Java代码中获取手机的IMEI号与ISMI号途径为:

TelephonyManager manager=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String imei=manager.getDeviceId();

String imsi=manager.getSubscriberId();

在android的源码树中找到类TelephonyManager的实现:

成员函数getDeviceId:

/**

* Returns the unique device ID, for example, the IMEI for GSM and the MEID

* or ESN for CDMA phones. Return null if device ID is not available.

*

* <p>Requires Permission:

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

*/

public String getDeviceId() {

try {

return getSubscriberInfo().getDeviceId();

} catch (RemoteException ex) {

return null;

} catch (NullPointerException ex) {

return null;

}

}

成员函数getSubscriberId:

/**

* Returns the unique subscriber ID, for example, the IMSI for a GSM phone.

* Return null if it is unavailable.

* <p>

* Requires Permission:

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

*/

public String getSubscriberId() {

try {

return getSubscriberInfo().getSubscriberId();

} catch (RemoteException ex) {

return null;

} catch (NullPointerException ex) {

// This could h_en before phone restarts due to crashing

return null;

}

}

上面两个成员函数_终调用共同的一个私有成员函数getSubscriberInfo():

private IPhoneSubInfo getSubscriberInfo() {

// get it each time because that process crashes a lot

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

}

而上面私有函数getSubscriberInfo获取的手机IMSI和IMEI号被硬编码在文件android_modem.c中:

/* the Android GSM stack checks that the operator's name has changed

* when roaming is on. If not, it will not update the Roaming status icon

*

* this means that we need to emulate two distinct operators:

* - the first one for the 'home' registration state, must also correspond

* to the emulated user's IMEI

*

* - the second one for the 'roaming' registration state, must have a

* different name and MCC/MNC

*/

#define OPERATOR_HOME_INDEX 0

#define OPERATOR_HOME_MCC 310

#define OPERATOR_HOME_MNC 260

#define OPERATOR_HOME_NAME "Android"

#define OPERATOR_HOME_MCCMNC STRINGIFY(OPERATOR_HOME_MCC) \

STRINGIFY(OPERATOR_HOME_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)

/* a function used to deal with a non-trivial request */

typedef c_t char* (*Resp_eHandler)(c_t char* cmd, AModem modem);

static c_t struct {

c_t char* cmd; /* command coming from libreference-ril.so, if first

character is '!', then the rest is a prefix only */

c_t char* answer; /* default answer, NULL if needs specific handling or

if OK is good enough */

Resp_eHandler handler; /* specific handler, ignored if 'answer' is not NULL,

NULL if OK is good enough */

} sDefaultResp_es[]=

{

/* see onRadioPowerOn() */

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

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

...

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

{ "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL }, /* request internation subscriber identification number */

{ "+CGSN", "000000000000000", NULL }, /* request model_ersion */

{ "+CUSD=2",NULL, NULL }, /* Cancel USSD */

...

/* end of list */

{NULL, NULL, NULL}

};

因此用UE二进制方式打开emulator-arm.exe 或 emulator-x86.exe,并搜索字符串"+CGSN"修改为需要的IMEI号;搜索"+CIMI"修改为需要的IMSI号。需要注意的是 IMSI 号的头六个数字"310260"不能修改,否则模拟器无法与网络连接。

例如

001fc700h: 33 00 41 00 48 00 21 2B 56 54 53 3D 00 2B 43 49 ; 3.A.H.!+VTS=.+CI

001fc710h: 4D 49 00 33 31 30 32 36 30 30 30 30 30 30 30 30 ; MI.3102600000000

001fc720h: 30 30 00 2B 43 47 53 4E 00 30 30 30 30 30 30 30 ; 00.+CGSN.0000000

001fc730h: 30 30 30 30 30 30 30 30 00 2B 43 55 53 44 3D 32 ; 00000000.+CUSD=2

在模拟器上有没有办法取得 IMEI

我的做法是,通过宏:来判断是真实设备还是模拟器,如果是模拟器就直接写死一个IMEI.#ifdef __WINS__//模拟器#else//设备#endif我的做法是,通过宏:来判断是真实设备还是模拟器,如果是模拟器就直接写死一个IMEI.#ifdef __WINS__//模拟器#else//设备#endif

求安卓模拟器IMEI号码修改的具体教程方法。

新版本要修改emulator-arm.exe中的,你可先把emulator-arm.exe改成emulator.exe,用那个工具改后,再改成emulator-arm.exe

另一种方法:

模拟器二进制映像(android-sdk-linux_x86/tools/emulator-arm.exe)没有加密 也 没有被压缩,所以明文字符串可见。IMEI可以通过如下步骤修改:

1)备份模拟器映像  (注意是 emulator-arm, 而不是 emulator)

2)用二进制编辑器打开它 (比如Bless,Ultraedit)

3)搜索 +CGSN字符串, 后面跟着15个数字的IMEI

4) 编辑这些IMEI,然后保存

安卓模拟器怎么实现修改imei跟更换IP

模拟器修改IP的方法

_步:搜索:618IP 软件。下载手机版

第二步:免费注册账号

第三步:连接你要修改的目的节点

第四步:打开浏览器查询IP是你修改之后的IP

就可以解决你的问题了。

好了,今天关于“imei模拟器”的话题就讲到这里了。希望大家能够对“imei模拟器”有更深入的认识,并且从我的回答中得到一些帮助。