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

2024-02-14 15:50

本文主要是介绍二,手机硬件参数介绍和校验算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

第一章 安卓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

在这里插入图片描述

视频教程

这篇关于二,手机硬件参数介绍和校验算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708934

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否