如何修改android模拟器上的IMEI、IMSI、SIM card serial number
SIM card号就是印制在SIM上的一串数字。
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号的修改:
TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = manager.getDeviceId();
String imsi = manager.getSubscriberId();
在android的源码树中找到类TelephonyManager的实现:
/** * 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
这个是我在老外的博客里翻出来,百度基本找不到,尤其是修改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相关推荐
- 【Android】修改Android 模拟器IMEI
修改Android 模拟器IMEI 在.....\android_sdk\tools文件下找到emulator-arm.exe,使用UltraEdit文本编辑器打开,搜索CGSN关键字,把000000 ...
- 【Android 逆向】Frida 框架 ( Frida 2 种运行模式 | Frida 12.7.5 版本相关工具下载地址 | 在 Android 模拟器上运行 Frida 远程服务程序 )
文章目录 一.Frida 2 种运行模式 二.Frida 12.7.5 版本相关工具下载地址 三.在 Android 模拟器上运行 Frida 远程服务程序 1.启动雷电模拟器 2.上传 frida- ...
- 如何在Android模拟器上安装和卸载APK程序包
如何在Android模拟器上安装和卸载APK程序包 Android, 程序包, APK, 卸载, 模拟 一,安装APK 安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废 ...
- Android 开发 关于APP无法安装到Android模拟器上的问题
Android 开发 关于APP无法安装到Android模拟器上的问题 我们在创建一个app后,打算安装到Android模拟器上.可能会出现无法安装,或者提示已经安装无法卸载的问题.这个时候需要添加兼 ...
- 在 Android 模拟器上运行 ARM 应用
随着 Android 11 开发者预览版的发布,我们同时也推出了 Android 11 系统映像.新的系统映像在执行 ARM 二进制文件方面取得了显著的性能提升.此前,依赖 ARM 库且无法构建 x8 ...
- 在Android模拟器上安装Google Play
问题 我想在模拟器上安装Google Play. 问题是网上没有指南可以准确地告诉我该怎么做. 我不知道为什么,似乎他们使用的是旧版Android Market(3版之前的版本),或者至少有人展示了一 ...
- android模拟器webservice,计数值显示在Android模拟器上,通过soap webservice
我已经尝试在Android中显示一个值,该值是通过soap调用检索的.但我无法让它工作.如果我运行我的应用程序,计数值显示在我的tomcat-apache上.但计数值不显示在我的Android模拟器上 ...
- Android官方模拟器root,在Android模拟器上如何获得root权限?
我需要在Android模拟器中获得root权限,从而使用'iptables'和'busybox'功能. 尝试安装了z4root应用程序, 但需要很长时间,且没有完成获取root就卡住了.有人说如果我们 ...
- 手动修改android模拟器system.img
所用工具已经打包上传:http://download.csdn.net/detail/asmcvc/6281473 参考文章: <android 修改 system.img 方法>:htt ...
- 在 Android 模拟器上设置 Sencha Touch
作为你开发的一部分,为安卓设备开发的 Sencha Touch框架应该在安卓虚拟机中被测试.这篇博客讨论如何安装和使用安卓虚拟机,使用命令行或者Sencha Architect构建器来进行 Sench ...
最新文章
- 第四章 分支结构实验
- 交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块
- 数据结构与算法—单源最短路径dijkstra算法
- NYOJ 106 背包问题
- JSON.toJSONString
- 使用nodejs和art-template模板引擎实现apache的部分功能
- 计算机教育应用3t模式,开题报告样例--初中语文说明文阅读教学整合模式研究.doc...
- tensorflow计算图_通过从头开始模仿其API来了解TensorFlow
- Linux系统下使用iftop结合iptables服务解决带宽被恶意请求的问题
- 仿listBox写了一个Control控件为item的列表集合
- 中国移动云能力中心 高薪诚聘各路运维技术专家
- matlab波浪力的数值模拟,【干货】二维波浪水槽以及波浪传播变形的数值模拟(附详细步骤)...
- 用C#,SQL Server编写的音乐播放软件
- Cubase Elements v11.0.0 WiN 23GB含音色库 中文完整版编曲录音软件
- (五十七)方差分析与相关分析
- python 删除pdf页面_删除PDF其中几页的方法
- 微信小程序云函数请求接口
- 109:vue+openlayers 定位动画(平移-弹性平移-飞行 示例代码)
- 通过ADB命令行卸载或删除你的Android设备中的应用
- 部署-Mycat-Server-1.6.7.4安装与配置(CentOS 7.7)
热门文章
- 解析AI漫画系统CariGAN:这效果让漫画师颤抖!
- 简单学习Infopath
- 拟合美国人口matlab编码,美国人口数据的阻滞增长模型拟合分析
- Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState
- 基于FPGA的数字视频信号处理器设计(上)
- 3ds Max 2014破解版安装中遇到的问题及解决
- 多元统计分析最短距离法_多元统计分析方法 -
- c语言编译器官网,C语言编译器app_c语言编译器app官网下载_c语言编译器手机版app-多特软件站安卓网...
- 一、安卓系统源码下载
- RangeError: Maximum call stack size exceeded