当前位置: 首页 > news >正文

二,手机硬件参数介绍和校验算法

系列文章目录

第一章 安卓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  -  有效范围 999897,全国统一管理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&#xff0c;粉丝朋友们&#xff1a; 闲鱼50块钱淘到了一个开源平板&#xff0c;注意这个平板是有源码的&#xff0c;可以进行相关的编译修改。哈哈哈&#xff0c;马哥这边就体验了一下50块钱平板是否可以拿来做framework呢&#xff1f; 哈哈&#xff0c;说好就开干了&#x…...

tauri vue vite

准备 rust 根据 https://www.rust-lang.org/tools/install&#xff0c;安装 rust 执行 cargo --version 检查安装是否完成nodejs 安装 nodejstauri cargo install create-tauri-app --lockedcargo create-tauri-app 选择&#xff1a; ✔ Project name tauri-app ✔ Choose wh…...

名词解析与经验分享(前端)

目录 1.什么是sass产品 2.下面我想说说事件循环 3. cmd窗口的一些快捷键 4. 组件与插件的区别 5. vue项目嵌入app后调用app方法 6.点击编辑按钮直接回到顶部&#xff0c;输入框光标闪动聚焦 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开源协议是一个给于使用者很大自由的协议。可以自由的使用&#xff0c;修改源代码&#xff0c;也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码&#xff0c;或者以BSD协议代码为基础做二次开发自己的产品时&#xff0c;需要满足三个条件&…...

【网络教程】揭秘Windows SSH服务端免密登录:告别繁琐,享受安全连接

文章目录 开启Windows下的SSH服务端图形界面安装手动下载安装Windows如何查看系统用户名Windows如何查看本机IP开启免密登录Window生成秘钥Linux下生成秘钥配置公钥视频讲解开启Windows下的SSH服务端 这篇文章演示的环境是Windows11Windows的SSH服务端默认情况下是没有安装的,…...

使用键盘控制Franka机械臂运动

功能说明 使用键盘按键&#xff0c;可以控制franka机械臂7个关节角&#xff0c;已在真机上验证。 代码 主要使用的是官方包内的 franka_example_controllers 1、修改 include下的 joint_position_example_controller.h, 改为如下&#xff1a; // Copyright (c) 2017 Frank…...

力扣第45天----第392题、第115题

# 力扣第45天----第392题、第115题 文章目录 一、第392题--判断子序列二、第115题--不同的子序列 一、第392题–判断子序列 ​ 挺简单的&#xff0c;思路跟以前的都差不多。 class Solution { public:bool isSubsequence(string s, string t) {vector<vector<int>&g…...

扔掉你的开发板,跟我玩Mcore-全志h616

本文转载自WhyCan Forum(哇酷开发者社区)&#xff1a; https://whycan.com/t_10024.html 作者leefei 这是一个1.69寸触摸小电视。使用全志H616芯片&#xff0c;板上硬件有mpu6050陀螺仪&#xff0c;USB转ttl调试串口&#xff0c;一个USB接口&#xff0c;WIFI&蓝牙&#x…...

【Linux】网络篇:UDP、TCP 网络接口及使用

文章目录 socket 及 相关补充0. netstat - - 查询当前服务器上网络服务器1. 端口号&#xff08;port&#xff09;2. 网络字节序3. sockaddr 结构体 一、socket 常见 APIUDP0. IP 地址转化 函数1. socket 函数&#xff1a;创建 socket 文件描述符 (TCP/UDP, 客户端 服务器)2. b…...

卡尔曼滤波(Kalman Filter)原理浅析-数学理论推导-2

目录 前言数学理论推导卡尔曼增益超详细数学推导结语参考 前言 最近项目需求涉及到目标跟踪部分&#xff0c;准备从 DeepSORT 多目标跟踪算法入手。DeepSORT 中涉及的内容有点多&#xff0c;以前也就对其进行了简单的了解&#xff0c;但是真正去做发现总是存在这样或者那样的困…...

SQL 性能优化总结

文章目录 一、性能优化策略二、索引创建规则三、查询优化总结 一、性能优化策略 1. SQL 语句中 IN 包含的值不应过多 MySQL 将 IN中的常量全部存储在一个排好序的数组里面&#xff0c;但是如果数值较多&#xff0c;产生的消耗也是比较大的。所以对于连续的数值&#xff0c;能用…...

MYSQL事务隔离级别分析

MYSQL事务隔离级别分析 不可重复读和幻读的区别&#xff1f; 不可重复读和幻读的区别&#xff1f; 先理解几个概念 不可重复读 一个事务中&#xff0c;后续查询结果得到不同的数据&#xff0c;可被重复读隔离级别解决幻影 出现在查询结果集中但不出现在较早查询的结果集中的行幻…...

学习javaEE初阶的第一堂课

学习金字塔 java发展简史 Java最初诞生的时候是用来写前端的!! 199x年 199x年,互联网还处在比较早期的阶段,当时主流的编程语言是 C/C, 有个大佬要搞个"智能面包机",觉得用C来做太难了 于是就基于C搞了个简单点的语言,Java 就诞生了~~ 遗憾的是项目流产了,没做成…...

请问一下就是业务概念模型和业务逻辑模型有啥关系

请问一下就是业务概念模型和业务逻辑模型有啥关系&#xff1f; 业务概念模型和业务逻辑模型是业务建模的两个关键组成部分&#xff0c;两者密切相关但又有所不同。 1.业务概念模型&#xff1a;这是对业务术语、定义和关系的一种抽象表示。它是从业务专家那里获得的知识&#…...

3.2 Android eBPF程序类型

写在前面 为什么要先了解eBPF程序类型? 从帮助函数中,我们可能基于内核的eBPF开放API,对eBPF的能力有一个比较细致的认识,但是这并不能让我们从全局,或者更概括的认识eBPF。eBPF程序类型能够更宏观的告诉我们,eBPF能做哪些事情(除网络相关)。 一,eBPF程序类型 内核…...

多目标优化算法:基于非支配排序的小龙虾优化算法(NSCOA)MATLAB

一、小龙虾优化算法COA 小龙虾优化算法&#xff08;Crayfsh optimization algorithm&#xff0c;COA&#xff09;由Jia Heming 等人于2023年提出&#xff0c;该算法模拟小龙虾的避暑、竞争和觅食行为&#xff0c;具有搜索速度快&#xff0c;搜索能力强&#xff0c;能够有效平衡…...

Linux学习第13天:嵌入式LinuxLED驱动开发:一字一符总见情

在正式写这篇笔记前&#xff0c;有一个事情必须要说一下。昨天更新的基于API函数的字符设备驱动开发按照正常的教程来说应该在本笔记后一天更新才对。但是由于我一时的疏忽&#xff0c;跳过了本笔记。在昨天学习基于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’...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...