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

这篇具有很好参考价值的文章主要介绍了二,手机硬件参数介绍和校验算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

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

二,手机硬件参数介绍和校验算法,智能手机,算法文章来源地址https://www.toymoban.com/news/detail-720200.html

视频教程

到了这里,关于二,手机硬件参数介绍和校验算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unidbg实现淘宝请求参数算法,实现脱离模拟器/手机请求淘宝、闲鱼

    本篇文章仅适用于学习。 最近一直在研究阿里系的请求问题,原来一直都是hook请求端口,虽然和很多人的hook参数生成x-sign不一样,可以说更稳定一些。但总归是脱离不了安卓环境——或者用模拟器,或者用真机。 对于逆向来说,非常的没有档次,没有逼格。 相对于直接逆

    2024年02月11日
    浏览(51)
  • 【计算机硬件】1、计算机的硬件组成、校验码

    CPU主要是由运算器、控制器、寄存器组和内部总线等部件组成 1、程序控制 通过执行指令来控制程序的执行顺序 2、操作功能 一条指令的实现需要若干操作信号配合,控制相应的部件完成相对应的操作 3、时间控制 对各种操作进行时间上的控制,指令执行的过程中操作信号出

    2024年01月19日
    浏览(54)
  • 「专题速递」回声消除算法、低功耗音频、座舱音频系统、智能音频技术、低延时音效算法、手机外放增强算法...

    随着多媒体和通信网络技术的持续升级,以及新型音视频应用场景的不断涌现,音频处理技术正朝着更加智能化和沉浸化的方向迅猛发展。人们对音频听觉体验的要求也逐渐提高,无论是在何种场景下,都期望获得更加清晰的声音,并感受到身临其境的沉浸感。 在数字时代,

    2024年02月08日
    浏览(52)
  • 《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

    目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问

    2024年02月11日
    浏览(41)
  • STM32的SPI硬件CRC校验(个人学习记录)

    一、功能实现         为了保证SPI通信数据的准确性,需要通过对每个数据进行CRC校验,保证设备运行正常。 二、基本原理 SPI通信可以通过以下步骤使用CRC: ● 设置CPOL、CPHA、LSBFirst、BR、SSM、SSI和MSTR的值; ● 在SPI_CRCPR寄存器输入多项式; ● 通过设置SPI_CR1寄存器CRCEN位使

    2024年02月11日
    浏览(42)
  • java如何优雅的实现参数非空校验,快速实现参数非空校验,使用@valid实现参数非空校验

    在java项目接口中,有些必传参数需要进行非空校验,如果参数过多,代码会繁杂且冗余,如何优雅的对参数进行非空校验,下面是实现流程 用实体类接收参数,使用非空注解编辑参数内容 使用 @Valid 注解对参数进行拦截,整体进行非空校验 如果是SpringBoot项目,引入web开发包

    2024年02月08日
    浏览(49)
  • 接收来自客户端的参数使用【JSR303校验框架】进行校验参数是否合法

    目录 1:JSR303校验 1.1:统一校验的需求 1.2:统一校验实现 1.3:分组校验 1.4:校验规则不满足? 前端请求后端接口传输参数,是在controller中校验还是在Service中校验? 答案是都需要校验,只是分工不同。 Contoller中校验请求参数的合法性,包括:必填项校验,数据格式校验,

    2023年04月27日
    浏览(43)
  • 还在用 if else 做参数校验?快来学习高级参数校验吧

    在上一篇文章 Springboot实现优雅的参数校验(Spring Validation)和 if else说再见,我们介绍了 Spring Validation 的初级用法,在实际开发中,无论是 Bean Validation 定义的约束,还是 Hibernate Validator 附加的约束,都是无法满足我们复杂的业务场景。所以,我们需要自定义约束。开发自定

    2023年04月14日
    浏览(55)
  • 探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

    模型训练是指 使用算法和数据对机器学习模型进行参数调整和优化 的过程。模型训练一般包含以下步骤:数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 数据收集是指为机器学习或数据分析任务收集和获取用于训练或分析的数

    2024年02月12日
    浏览(59)
  • SpringBoot 使用validator进行参数校验(实例操作+注意事项+自定义参数校验)

    ①、引入依赖 ②、创建实体类 ③、建立控制层 ④、进行测试 作为测试demo,到这里就可以直接测试了 ①、@NotNull ,@NotEmpty 和 @NotBlank 三者的区别 @NotNull、@NotEmpty 和 @NotBlank 都是用于Java中进行参数校验的注解,它们之间的区别如下: @NotNull 注解用于限制参数不能为null。 @N

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包