二,手机硬件参数介绍和校验算法
系列文章目录
第一章 安卓aosp源码编译环境搭建
第二章 手机硬件参数介绍和校验算法
第三章 修改安卓aosp代码更改硬件参数
第四章 编译定制rom并刷机实现硬改(一)
第五章 编译定制rom并刷机实现硬改(二)
第六章 不root不magisk不xposed lsposed frida原生修改定位
第七章 安卓手机环境检测软件分享
第八章 硬改之设备画像
第九章 修改Art虚拟机对指定app的指定函数进行拦截(一)
第十章 修改Art虚拟机对指定app的指定函数进行拦截(二)
文章目录
- 系列文章目录
- 前言
- 一、IMEI
- 二、IMSI
- 三、MEID
- 四、ANDROID_ID
- 五、设备序列号
- 六、MAC地址 && 蓝牙地址
- 补充
- 视频教程
前言
傻瓜式操作, 人人都能编译操作系统, 每个感兴趣的人都可以基于谷歌安卓aosp源码定制自己的系统
一、IMEI
由14位16禁制字符和第15位校验位标识组成,而且该码是全世界唯一的,双卡手机有两个码,可通过拨号键盘输入*#06#查看,手机有,平板无,国内开头为86,第15位校验位的计算方法通过C-SHARP实现
APP读取示例:
读取需要android.permission.READ_PHONE_STATE权限TelephonyManager telephonyManager =(TelephonyManager) context. getSystemService (Context. TELEPHONY SERVICE);String imei = telephonyManager.getDeviceId0; // getImei()IMEI定义以869818-02-253461-9为例:
TAC[6位] + FAC[2位] + SNR[6] + SP[1]
计算第15位校验位算法(c#)
public bool VerifyImei(string imei) {int checkDigit = 0; int addValue = 0; for (int i = 1; i < imei.Length; i++){if (i % 2 == 1){int result = Convert. ToInt32(imei[imei. Length - i - 1]. ToString()) * 2; if (result > 9) addValue t= (result — 9);elseaddValue += result;}else addValue += Convert. ToInt32(imeilimei. Lngth - i — 1]. ToString());}
if (addValue % 10 == 0)checkDigit = 0;elsecheckDigit = 10 — addValue % 10;
return (checkDigit - Conver.ToInt32(imei[imei.Length - 1].ToString())) == 0;
}
1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
2).将奇数位数字相加,再加上上一步算得的值
3).假设得出的数个位是0则校验位为0,否则为10减去个位数
二、IMSI
用于区分不同用户在移动蜂窝网络中的识别码,大部分情形下手机和网络之间的通信,会使用随机产生的临时移动用户识别码
IMSI是区别移动用户的标志,储存在SIM卡中。同样使用0~9的数字,它由MCC+MNC+MSIN三部分组成:例如:460-02-7980097098MCC:移动国家码,三个数字,如中国为460MNC:移动网号,两个数字,中国移动:00,02,04,07,08,13MSIN:移动客户识别号MSIN组成:CC+MOM1M2M3+ABCDCC由不同运营商分配,其中的MOM1M23和MDN号码中的HOH1H2H3可存在对应关系,ABCD四位为自由分配。MNC:中国移动使用00(号段135 136 137 138 139)、02(150 151 152 134 158 159)中国移动TD系统(147 187 188 157号段)使用07中国联通使用01(131 132 155 156),03(133 134 180 153 189)IMSI与IMEI权限相同,获取代码://权限<uses-permissionandroid:name="android.permission. READ_PHONE_STATE” />
TelephonyManager telephonyManager=(TelephonyManager)context. getSystemService(Context.TELEPHONY SERVICE);
string imsi=telephonyManager.getSubscriberId();
三、MEID
CDMA移动终端识别码,双卡手机通常是两个IMEI一个MEID
格式举例:A0-00005E-78C3E799-001788-698930MEID由14个十六进制字符标识,第15位为校验位RR-XXXXXXZZZZZZ-CRR:范围A0-FF TIA组织进行分配管理的XXXXXX:范围000000-FFFFFF000000-FFFFFF,厂商分配给每台终端的流水号 C/CD:0-F,校验码这些字段被定义为10进制时,有以下格式:RR - 有效范围 99,98,97,全国统一管理XXXXXX - 有效范围 000000--999999ZZZZZZ - 有效范围 000000--999999C - 有效范围 0 -- 9
四、ANDROID_ID
它是一串16禁制字符串,当设备不是手机的时候,例如平板设备,这个值也存在,但是在设备恢复出厂设置后,这个值会改变,不同的设备可能会产生相同的值
import android.provider.Settings;
String ANDROID_id = Settings.system.getString(getContentResolver(),Settings.System.ANDROID_ID);
五、设备序列号
Serial Number 或SN,又叫产品序列号、机器码,由手机厂家自定义通常为不超过16位的16进制字符串
示例: c3a1d2feAPP通过 android.os.BuildgetSerial0 获取该值,也需要申请READ PHONESTATE权限:private String get Serial() {if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.0) {}else {return Build.SERIAL;}}
六、MAC地址 && 蓝牙地址
MAC地址格式:AA:BB:CC + DD:EE:FF
AA:BB:CC由IEEE组织注册给网络设备的生产商,每个厂商都拥有一个或多个
DD:EE:FF则是由网络设备生产商分配给自己生产的每个拥有MAC地址的设备,互不重复APP获取该值,需要申请ACCESS WIFI STATE 权限
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager)context.getSystemService Context.WIFI SERVICE);
String mac Address = wifi.getConnectionInfo().getMacAddress();
Android 6.0之后,用此方法获取到的Wi-Fi mac地址都为02:00:00:00:00:00 已无效替代方案是通过读取系统文件/sys/class/net/wlan0/address来获取mac地址
private String getMacAddress(){return new BufferedReader(new FileReader(new File("/sys/class/net/wlan0/address"))).readLine();
} 绝大多数情况下该方法也无法获取到MAC地址目前通行的方式是遍历网络接口:
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {if (!nif.getName () .equalsIgnoreCase("wlan0")) {continue;}byte[] macBytes = nif. getHardwareAddress () ;if(macBytes == null) {return "";}蓝牙地址:
/frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java
publicString getAddress(){try{return mManagerService.getAddress();} catch (RemoteException e) Log.e(TAG,"",e);}return null;
}
补充
除了MAC地址 && 蓝牙地址,还要另外的标识符,可以无视:
UUID,ICCID,OAID,GAID

视频教程
相关文章:
二,手机硬件参数介绍和校验算法
系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...
ubunutu20/18/22 编译android 5相关的问题汇总-千里马framework开源代码平板编译过程
hi,粉丝朋友们: 闲鱼50块钱淘到了一个开源平板,注意这个平板是有源码的,可以进行相关的编译修改。哈哈哈,马哥这边就体验了一下50块钱平板是否可以拿来做framework呢? 哈哈,说好就开干了&#x…...
tauri vue vite
准备 rust 根据 https://www.rust-lang.org/tools/install,安装 rust 执行 cargo --version 检查安装是否完成nodejs 安装 nodejstauri cargo install create-tauri-app --lockedcargo create-tauri-app 选择: ✔ Project name tauri-app ✔ Choose wh…...
名词解析与经验分享(前端)
目录 1.什么是sass产品 2.下面我想说说事件循环 3. cmd窗口的一些快捷键 4. 组件与插件的区别 5. vue项目嵌入app后调用app方法 6.点击编辑按钮直接回到顶部,输入框光标闪动聚焦 7.短轮询与长轮询 短轮询 长轮询 8.前端moment库 9.移动端-触底刷新实现核心…...
【前端】js下载url文件
不打开新窗口进行下载 function download(res) { var elemIF document.createElement("iframe"); elemIF.src res; elemIF.style.display "none"; document.body.appendChild(elemIF); } window.open(url, _blank); a标签 const ele …...
什么是 BSD 协议?
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件&…...
【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接
文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥视频讲解开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,…...
使用键盘控制Franka机械臂运动
功能说明 使用键盘按键,可以控制franka机械臂7个关节角,已在真机上验证。 代码 主要使用的是官方包内的 franka_example_controllers 1、修改 include下的 joint_position_example_controller.h, 改为如下: // Copyright (c) 2017 Frank…...
力扣第45天----第392题、第115题
# 力扣第45天----第392题、第115题 文章目录 一、第392题--判断子序列二、第115题--不同的子序列 一、第392题–判断子序列 挺简单的,思路跟以前的都差不多。 class Solution { public:bool isSubsequence(string s, string t) {vector<vector<int>&g…...
扔掉你的开发板,跟我玩Mcore-全志h616
本文转载自WhyCan Forum(哇酷开发者社区): https://whycan.com/t_10024.html 作者leefei 这是一个1.69寸触摸小电视。使用全志H616芯片,板上硬件有mpu6050陀螺仪,USB转ttl调试串口,一个USB接口,WIFI&蓝牙&#x…...
【Linux】网络篇:UDP、TCP 网络接口及使用
文章目录 socket 及 相关补充0. netstat - - 查询当前服务器上网络服务器1. 端口号(port)2. 网络字节序3. sockaddr 结构体 一、socket 常见 APIUDP0. IP 地址转化 函数1. socket 函数:创建 socket 文件描述符 (TCP/UDP, 客户端 服务器)2. b…...
卡尔曼滤波(Kalman Filter)原理浅析-数学理论推导-2
目录 前言数学理论推导卡尔曼增益超详细数学推导结语参考 前言 最近项目需求涉及到目标跟踪部分,准备从 DeepSORT 多目标跟踪算法入手。DeepSORT 中涉及的内容有点多,以前也就对其进行了简单的了解,但是真正去做发现总是存在这样或者那样的困…...
SQL 性能优化总结
文章目录 一、性能优化策略二、索引创建规则三、查询优化总结 一、性能优化策略 1. SQL 语句中 IN 包含的值不应过多 MySQL 将 IN中的常量全部存储在一个排好序的数组里面,但是如果数值较多,产生的消耗也是比较大的。所以对于连续的数值,能用…...
MYSQL事务隔离级别分析
MYSQL事务隔离级别分析 不可重复读和幻读的区别? 不可重复读和幻读的区别? 先理解几个概念 不可重复读 一个事务中,后续查询结果得到不同的数据,可被重复读隔离级别解决幻影 出现在查询结果集中但不出现在较早查询的结果集中的行幻…...
学习javaEE初阶的第一堂课
学习金字塔 java发展简史 Java最初诞生的时候是用来写前端的!! 199x年 199x年,互联网还处在比较早期的阶段,当时主流的编程语言是 C/C, 有个大佬要搞个"智能面包机",觉得用C来做太难了 于是就基于C搞了个简单点的语言,Java 就诞生了~~ 遗憾的是项目流产了,没做成…...
请问一下就是业务概念模型和业务逻辑模型有啥关系
请问一下就是业务概念模型和业务逻辑模型有啥关系? 业务概念模型和业务逻辑模型是业务建模的两个关键组成部分,两者密切相关但又有所不同。 1.业务概念模型:这是对业务术语、定义和关系的一种抽象表示。它是从业务专家那里获得的知识&#…...
3.2 Android eBPF程序类型
写在前面 为什么要先了解eBPF程序类型? 从帮助函数中,我们可能基于内核的eBPF开放API,对eBPF的能力有一个比较细致的认识,但是这并不能让我们从全局,或者更概括的认识eBPF。eBPF程序类型能够更宏观的告诉我们,eBPF能做哪些事情(除网络相关)。 一,eBPF程序类型 内核…...
多目标优化算法:基于非支配排序的小龙虾优化算法(NSCOA)MATLAB
一、小龙虾优化算法COA 小龙虾优化算法(Crayfsh optimization algorithm,COA)由Jia Heming 等人于2023年提出,该算法模拟小龙虾的避暑、竞争和觅食行为,具有搜索速度快,搜索能力强,能够有效平衡…...
Linux学习第13天:嵌入式LinuxLED驱动开发:一字一符总见情
在正式写这篇笔记前,有一个事情必须要说一下。昨天更新的基于API函数的字符设备驱动开发按照正常的教程来说应该在本笔记后一天更新才对。但是由于我一时的疏忽,跳过了本笔记。在昨天学习基于API函数的时候造成了一定程度的困扰。今天重翻教程的时候才发…...
ModuleNotFoundError: No module named ‘omni‘
install isaac sim on linux open the isaac sim folder in /home//.local/share/ov/pkg/isaac_sim-2022.1.1 source setup_python_env.sh ./python.sh standalone_examples/replicator/offline_generation.pyNo module named ‘omni.isaac’...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
