手机使用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中:
const char*
asimcard_io( ASimCard  sim, const char*  cmd )
{    int  nn;
#if ENABLE_DYNAMIC_RECORDS
    int  command, id, p1, p2, p3;
#endif
    static const struct { const char*  cmd; const 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 happen 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 const char*  (*ResponseHandler)(const char*  cmd, AModem  modem);static const struct {    const char*      cmd;     /* command coming from libreference-ril.so, if first
                                 character is '!', then the rest is a prefix only */    const char*      answer;  /* default answer, NULL if needs specific handling or
                                 if OK is good enough */    ResponseHandler  handler; /* specific handler, ignored if 'answer' is not NULL,
                                 NULL if OK is good enough */
} sDefaultResponses[] =
{    /* 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 version */
    { "+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
附录:
http://blog.codepainters.com/2010/09/06/android-emulator-and-the-sim-card-serial-number/
http://blog.codepainters.com/2009/12/11/android-imei-number-and-the-emulator/
https://www.anywi.com/3g/wiki/AtCommandIccid
AT+CGSN   获取GSM模块的IMEI号(国际移动设备标识)
AT+CIMI      获得ISMI(国际移动签署者标识)

这个是我在老外的博客里翻出来,百度基本找不到,尤其是修改sim卡号(安卓模拟的)和手机号码

用二进制编辑软件打开emulator程序,对应的x86,arm,硬件都是不同的后缀,

寻找sim卡号,模拟器默认的字段98101430121181157002,查询时ascii码选中,安卓模拟器的规则是2个号码为一组,互相换位,比如默认的98101430121181157002,其实sim码是87014103211118510720,要修改成你要的sim码,就先两两换位子再写入。

修改imei,查询 +CGSN,

修改IMSI 查询 +CIMI,模拟器的310260开头不可以改。

修改手机号码  查询515525%d1 同理,手机号码在模拟器里面显示是1555521****,也是两两对换,不过后面四位号码目前不可以改,有检查范围,从5554到5584.改了就无法启动,

如何修改android模拟器上的IMEI、IMSI、SIM card serial number相关推荐

  1. 【Android】修改Android 模拟器IMEI

    修改Android 模拟器IMEI 在.....\android_sdk\tools文件下找到emulator-arm.exe,使用UltraEdit文本编辑器打开,搜索CGSN关键字,把000000 ...

  2. 【Android 逆向】Frida 框架 ( Frida 2 种运行模式 | Frida 12.7.5 版本相关工具下载地址 | 在 Android 模拟器上运行 Frida 远程服务程序 )

    文章目录 一.Frida 2 种运行模式 二.Frida 12.7.5 版本相关工具下载地址 三.在 Android 模拟器上运行 Frida 远程服务程序 1.启动雷电模拟器 2.上传 frida- ...

  3. 如何在Android模拟器上安装和卸载APK程序包

    如何在Android模拟器上安装和卸载APK程序包 Android, 程序包, APK, 卸载, 模拟 一,安装APK          安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废 ...

  4. Android 开发 关于APP无法安装到Android模拟器上的问题

    Android 开发 关于APP无法安装到Android模拟器上的问题 我们在创建一个app后,打算安装到Android模拟器上.可能会出现无法安装,或者提示已经安装无法卸载的问题.这个时候需要添加兼 ...

  5. 在 Android 模拟器上运行 ARM 应用

    随着 Android 11 开发者预览版的发布,我们同时也推出了 Android 11 系统映像.新的系统映像在执行 ARM 二进制文件方面取得了显著的性能提升.此前,依赖 ARM 库且无法构建 x8 ...

  6. 在Android模拟器上安装Google Play

    问题 我想在模拟器上安装Google Play. 问题是网上没有指南可以准确地告诉我该怎么做. 我不知道为什么,似乎他们使用的是旧版Android Market(3版之前的版本),或者至少有人展示了一 ...

  7. android模拟器webservice,计数值显示在Android模拟器上,通过soap webservice

    我已经尝试在Android中显示一个值,该值是通过soap调用检索的.但我无法让它工作.如果我运行我的应用程序,计数值显示在我的tomcat-apache上.但计数值不显示在我的Android模拟器上 ...

  8. Android官方模拟器root,在Android模拟器上如何获得root权限?

    我需要在Android模拟器中获得root权限,从而使用'iptables'和'busybox'功能. 尝试安装了z4root应用程序, 但需要很长时间,且没有完成获取root就卡住了.有人说如果我们 ...

  9. 手动修改android模拟器system.img

    所用工具已经打包上传:http://download.csdn.net/detail/asmcvc/6281473 参考文章: <android 修改 system.img 方法>:htt ...

  10. 在 Android 模拟器上设置 Sencha Touch

    作为你开发的一部分,为安卓设备开发的 Sencha Touch框架应该在安卓虚拟机中被测试.这篇博客讨论如何安装和使用安卓虚拟机,使用命令行或者Sencha Architect构建器来进行 Sench ...

最新文章

  1. 第四章 分支结构实验
  2. 交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块
  3. 数据结构与算法—单源最短路径dijkstra算法
  4. NYOJ 106 背包问题
  5. JSON.toJSONString
  6. 使用nodejs和art-template模板引擎实现apache的部分功能
  7. 计算机教育应用3t模式,开题报告样例--初中语文说明文阅读教学整合模式研究.doc...
  8. tensorflow计算图_通过从头开始模仿其API来了解TensorFlow
  9. Linux系统下使用iftop结合iptables服务解决带宽被恶意请求的问题
  10. 仿listBox写了一个Control控件为item的列表集合
  11. 中国移动云能力中心 高薪诚聘各路运维技术专家
  12. matlab波浪力的数值模拟,【干货】二维波浪水槽以及波浪传播变形的数值模拟(附详细步骤)...
  13. 用C#,SQL Server编写的音乐播放软件
  14. Cubase Elements v11.0.0 WiN 23GB含音色库 中文完整版编曲录音软件
  15. (五十七)方差分析与相关分析
  16. python 删除pdf页面_删除PDF其中几页的方法
  17. 微信小程序云函数请求接口
  18. 109:vue+openlayers 定位动画(平移-弹性平移-飞行 示例代码)
  19. 通过ADB命令行卸载或删除你的Android设备中的应用
  20. 部署-Mycat-Server-1.6.7.4安装与配置(CentOS 7.7)

热门文章

  1. 解析AI漫画系统CariGAN:这效果让漫画师颤抖!
  2. 简单学习Infopath
  3. 拟合美国人口matlab编码,美国人口数据的阻滞增长模型拟合分析
  4. Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState
  5. 基于FPGA的数字视频信号处理器设计(上)
  6. 3ds Max 2014破解版安装中遇到的问题及解决
  7. 多元统计分析最短距离法_多元统计分析方法 -
  8. c语言编译器官网,C语言编译器app_c语言编译器app官网下载_c语言编译器手机版app-多特软件站安卓网...
  9. 一、安卓系统源码下载
  10. RangeError: Maximum call stack size exceeded