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

2023-09-16 18:15:14

系列文章目录

第一章 安卓aosp源码编译环境搭建
第二章 手机硬件参数介绍和校验算法
第三章 修改安卓aosp代码更改硬件参数
第四章 编译定制rom并刷机实现硬改(一)
第五章 编译定制rom并刷机实现硬改(二)
第六章 不root不magisk不xposed lsposed frida原生修改定位
第七章 安卓手机环境检测软件分享
第八章 硬改之设备画像
第九章 修改Art虚拟机对指定app的指定函数进行拦截(一)
第十章 修改Art虚拟机对指定app的指定函数进行拦截(二)



前言

傻瓜式操作, 人人都能编译操作系统, 每个感兴趣的人都可以基于谷歌安卓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);
        else
        addValue += result;
        }
        else 
          addValue += Convert. ToInt32(imeilimei. Lngth - i — 1]. ToString());
        }
if (addValue % 10 == 0)
  checkDigit = 0;
 else
  checkDigit = 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-7980097098
    MCC:移动国家码,三个数字,如中国为460
    MNC:移动网号,两个数字,中国移动:00,02,04,07,08,13
    MSIN:移动客户识别号
    
MSIN组成:CC+MOM1M2M3+ABCD
    CC由不同运营商分配,其中的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-78C3E7
        99-001788-698930
      MEID由14个十六进制字符标识,第15位为校验位
      
RR-XXXXXXZZZZZZ-C
  RR:范围A0-FF   TIA组织进行分配管理的
  XXXXXX:范围000000-FFFFFF000000-FFFFFF,厂商分配给每台终端的流水号   
  C/CD:0-F,校验码

这些字段被定义为10进制时,有以下格式:
   RR  -  有效范围 999897,全国统一管理
   XXXXXX  -  有效范围 000000--999999
   ZZZZZZ  -  有效范围 000000--999999
   C  -  有效范围 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进制字符串

示例: c3a1d2fe

APP通过 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

在这里插入图片描述

视频教程

更多推荐

华为云云耀云服务器L实例评测|使用华为云云耀云服务器L实例部署 GitLab Runner实现GitLab CI/CD,项目的DevOps

应用场景GitLabRunner介绍GitLabRunner是一个用于执行GitLabCI/CD任务的工具,它可以在Linux、macOS和Windows上使用,并且可以通过包管理器、二进制文件或Docker镜像进行安装。它与GitLabCI结合使用,能够在最少的手动干预下帮助团队实现CI/CD流程的自动化。GitLa

《PostgreSQL中的JSON处理:技巧与应用》

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

靠差异化上了短剧“牌桌”后,百度准备怎么做生态?

从最初的野蛮生长到如今的百花齐放,短剧市场已然进入了质量与创意的竞争。据《中国网络视听发展研究报告》数据显示,行业内重点网络微短剧上线数量从2021年的58部,飙升到2022年的172部。相比起前几年处于风口时的爆发式增长,“分账走低、竞争激烈、流量下滑”成为当下短剧市场的关键词。回顾近两年短剧赛道的发展,“古风”“霸

想要精通算法和SQL的成长之路 - 戳气球

想要精通算法和SQL的成长之路-戳气球前言一.戳气球1.1记忆化搜索前言想要精通算法和SQL的成长之路-系列导航一.戳气球原题链接首先我们看一下题干:对于超出了数组边界的,就当做它是一个数字为1的气球。遇到这种的,我们可以考虑给数组边界添加哨兵。其值为1。//左右各加一个哨兵节点publicintmaxCoins(in

spring boot+redis整合基础入门

文章目录前言准备依赖项配置文件redis模板类注入设置序列化方式实施基础字符串操作、超时设置Hash操作hash的使用场景以及优缺点列表操作列表操作的应用场景以及优缺点Set的基础操作Set类型的业务场景以及优缺点Demo地址总结前言最近项目中有用到redis进行一些数据的缓存,于是就想写一篇springboot集成r

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

Java线程池ThreadPoolExecutor应用(Spring Boot微服务)

记录:475场景:在SpringBoot微服务中使用Java线程池ThreadPoolExecutor。实现Runnable接口提交线程任务到线程池。版本:JDK1.8,SpringBoot2.6.3。1.使用注解配置线程池ThreadPoolExecutor(1)说明ThreadPoolExecutor,全称:jav

RIS 系列 Semantics-Aware Dynamic Localization and Refinement for Referring Image Segmentation 论文阅读笔记

RIS系列Semantics-AwareDynamicLocalizationandRefinementforReferringImageSegmentation论文阅读笔记一、Abstract二、引言三、相关工作ReferringimagesegmentationDynamicconvolutionMulti-mod

RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏镜像+支持hdmi屏镜像)

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132686096红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

AI 编码助手 Codewhisperer 安装步骤和使用初体验

文章作者:为了自己加油最近亚⻢逊云科技推出了一款基于机器学习的AI编程助手AmazonCodeWhisperer,可以实时提供代码建议。在编写代码时,它会自动根据现有的代码和注释给出建议。AmazonCodeWhisperer与GitHubCopilot类似,主要的功能有:代码补全注释和文档补全代码安全问题的辅助定位亚

CSS 字体:Font

文章目录CSS字体serif和sans-serif字体之间的区别CSS字型字体系列字体样式字体大小设置字体大小像素用em来设置字体大小使用百分比和EM组合CSS字体属性CSS字体CSS字体属性可以定义文本的字体系列、大小、加粗、风格(如斜体)和变形(如小型大写字母)。具体来说,CSS字体属性包括以下这些:font-fa

热文推荐