Android设备硬件序列号(SN、串号)分析

2022-8-3----Android10.0(MTK)-----SN_Writer 写入 SN 注意事项 SN_Writer、写入SN 阅读详情
Android设备硬件序列号(SN、串号)的序列号是怎么获取的,以全志A64平台来一步步跟代码分析:

在设置-》关于设备-》状态信息中,显示的信息来自android.os.Build.SERIAL,代码位于:
frameworks/base/core/java/android/os/Build.java:
public static final String SERIAL = getString("ro.serialno");

frameworks/base/core/java/android/os/Build.java:
private static String getString(String property) {
return SystemProperties.get(property, UNKNOWN);
}

由此可见是通过key为"ro.serialno"的SystemProperties 获取到串号的,接下来看一下ro.serialno是如何赋值的:
先看init代码system/core/init/init.c
int main(int argc, char **argv)
{
.......
property_init();

get_hardware_name(hardware, &revision);

process_kernel_cmdline();
......

原来是从cmdline中获取的,import_kernel_cmdline把u-boot传给kernel的cmdline进行提取,然后回调import_kernel_nv进行处理
static void process_kernel_cmdline(void)
{
......
import_kernel_cmdline(0, import_kernel_nv);
if (qemu[0])
import_kernel_cmdline(1, import_kernel_nv);
......
export_kernel_boot_props();
}

import_kernel_nv将cmdline中androidboot.开头的全部转化为"ro.boot.%s"并设置到properties中,例如“androidboot.serialno”为“ro.boot.serialno”:
static void import_kernel_nv(char *name, int for_emulator)
{
......
} else if (!strncmp(name, "androidboot.", 12) && name_len > 12) {
const char *boot_prop_name = name + 12;
char prop[PROP_NAME_MAX];
int cnt;

cnt = snprintf(prop, sizeof(prop), "ro.boot.%s", boot_prop_name);
if (cnt < PROP_NAME_MAX)
property_set(prop, value);
}
}

再来看export_kernel_boot_props函数,将ro.boot.serialno赋值给ro.serialno了
static void export_kernel_boot_props(void)
{
......
} prop_map[] = {
{ "ro.boot.serialno", "ro.serialno", "", },
{ "ro.boot.mode", "ro.bootmode", "unknown", },
{ "ro.boot.baseband", "ro.baseband", "unknown", },
{ "ro.boot.bootloader", "ro.bootloader", "unknown", },
};

for (i = 0; i < ARRAY_SIZE(prop_map); i++) {
ret = property_get(prop_map[i].src_prop, tmp);
if (ret > 0)
property_set(prop_map[i].dest_prop, tmp);
else
property_set(prop_map[i].dest_prop, prop_map[i].def_val);
}

再来看看u-boot是如何获取串号的:
u-boot-2014.07/common/cmd_boota.c中有对androidboot.serialno的赋值:
void update_bootargs(void)
{
......
//serial info
str = getenv("sunxi_serial");
sprintf(tmpbuf," androidboot.serialno=%s",str);
......
}

其值来自于u-boot env sunxi_serial,sunxi_serial又是由DTS中的/soc/serial_feature定义的,由sys_config.fex转换的dts内容,sn.txt又是放在private分区中。
[serial_feature]
sn_filename = "sn.txt"

int sunxi_set_serial_num(void)
{
char serial[128] = {0};
if(get_serial_num_from_file(serial))
{
get_serial_num_from_chipid(serial);
}
printf("serial is: %s\n",serial);
if(setenv("sunxi_serial", serial))
{
printf("error:set variable [sunxi_serial] fail\n");
}
return 0;
}

就用private分区存放sn.txt这种方式来验证一下:
busybox mkfs.vfat /dev/block/by-name/private
busybox mount -t vfat /dev/block/by-name/private /private/
echo "XXXX2017030219360001">/private/sn.txt
sync

重启系统,发现串号变成了我们sn.txt里面的内容,重新刷机验证序列号没有被清掉。

另外根据android兼容说明,串号必须满足以下要求(主要是6~20长度的ASSCII编码字符)
A hardware serial number, which MUST be available and unique
across devices with the same MODEL and MANUFACTURER. The
value of this field MUST be encodable as 7-bit ASCII and match the
regular expression “^([a-zA-Z0-9]{6,20})$”.

Android 系统init进程启动流程 和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、启动流程概述二、Android启动分析三、init 进程启动分析四、init 启动脚本分析五、init 进程分析六、init 脚本执行七、init 进程守护八、init rc 脚本启动Zygote九、启动分析小结一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开... 阅读详情

相关推荐

Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

Android Q获取设备唯一ID(UDID\GUID\UUID)一、简介1.问题背景2.关键技术二、解决方案2.1 官方推荐方案 (4种)2.2 研究方案1——GUID方案2.3 研究方案2——数字版权管理(DRM)方案2.4 研究方案3——自定义ID硬件信息拼凑方案2.5 研究方案4——移动安全联盟方案2.6 研究方案5——数字联盟可信ID方案三、方案对比3.1 评估准则3.2 决策分析四、总结 一、简介 1.问题背景 **技术现状:**存储设备需要用唯一设备ID(Unique Device Iden

weixin_45371676的博客 3万+

Android sn获取&源码

Android sn获取分析

qq_38864737的博客 1479

烽火HG680-KB刷机实战:海思HI3798MV310通刷安卓9.0与三码修复全攻略

智能电视盒子作为家庭娱乐终端,常因运营商定制系统限制导致无法自由安装应用、存储空间不足,甚至因账号停用而失效。第三方固件通刷是恢复设备通用价值的有效手段。本文围绕海思HI3798MV310这一高性价比平台,讲解烽火HG680-KB等盒子刷入安卓9.0通刷固件的系统方法,涵盖工具准备、固件选型、短接烧录、驱动安装及首次开机调优等关键环节。针对刷机后最常见的设备标识丢失问题,重点剖析三码修复的原理与操作步骤,包括SN序列号、有线及无线MAC地址的备份与还原,帮助用户将运营商终端彻底改造为干净、可自由掌控的家用电

weixin_32770423的博客 333

Android硬件获取序列号sn适配Android9+

在Android 9及以上版本中,由于隐私和安全性的考虑,获取设备序列号(Serial Number)的方式发生了改变。在Android 9及以上版本中,可能会返回一个空字符串或者包含"unknown"等信息,而不再是设备的真实序列号。方法来获取设备的序列号。请注意,这个方法可能会抛出。在Android 9及以上版本,可以使用。,因此需要进行异常处理。

m0_49083276的博客 1649

Android设备序列号:如何获取和查找您的Android设备的序列号

需要注意的是,从Android 10(API级别29)开始,由于安全性和隐私问题,获取设备的序列号可能会受到限制。Android设备的序列号是一个唯一的标识符,用于区分不同设备。无论使用哪种方法,获取到设备的序列号后,您可以将其用于各种目的,例如设备管理、诊断和故障排除等。这种方式是最常见和最简单的方法来获取设备的序列号,适用于大多数Android设备。Android设备序列号:如何获取和查找您的Android设备的序列号。此命令将显示连接的Android设备的列表,其中包括每个设备的序列号。

ByteLegend的博客 4776

SN Write Tool 深度解析:MTK设备IMEI/SN/MAC地址写入原理与实战

在移动设备维修与生产领域,设备唯一标识信息的写入与修复是一项关键技术。其核心原理在于通过底层通信协议,访问并修改设备非易失性存储器(NVRAM)中的特定数据区域。这项技术的价值在于能够恢复因硬件更换或软件故障而丢失的设备“身份证”,如IMEI、序列号(SN)及蓝牙/Wi-Fi MAC地址,从而确保设备的网络接入与硬件功能正常。在工程实践中,这通常应用于安卓设备维修、产线灌装及物联网模块配置等场景。以联发科(MTK)平台为例,其专用的SN Write Tool工具通过Meta模式与设备建立通信,并依赖关键的B

weixin_29168813的博客 302

安卓改机无需 Root 一键硬改 IMEI/SN/MEID, 安卓一键新机环境

手机 改 人脸信息、IMEI、IMSI、MAC 地址、设备序列号、硬件序列号、SIM 卡序列号、ICCID;系统设置、系统属性、设备型号、设备品牌、操作系统;IP 地址、网络类型、运营商信息、Wi-Fi 状态、Wi-Fi 参数、Wi-Fi 列表;

z920981023的博客 6669

SN_Write_Tool使用全解析:从IMEI/SN写入原理到实战避坑指南

IMEI(国际移动设备识别码)和SN(序列号)是移动设备与网络设备的唯一身份标识,其写入与修复涉及底层硬件通信。其核心原理是通过fastboot等特殊模式,与设备的基带处理器或NV(非易失性存储)分区建立连接,完成关键数据的读写。这项技术的价值在于,它能解决因IMEI丢失导致的设备无法入网、或SN不匹配造成的运营商接入失败等硬件级故障,是设备维修、产线测试和二手翻新领域的必备技能。典型的应用场景包括修复因刷机失误导致的IMEI丢失、为更换主板的设备写入合法标识,或对特定网络设备(如光猫)进行合规调试。本文以

weixin_34122604的博客 481

RKDevInfoWriteTool写号工具详解:SN与MAC地址配置及常见问题排查

在嵌入式开发与量产测试中,设备身份信息的写入是保证每台硬件可识别、可管理的关键环节。SN序列号与MAC地址作为设备的唯一标识,其配置过程涉及底层分区写入、驱动加载与系统读取等多层链路。瑞芯微平台提供的写号工具用于将这类出厂参数固化到指定分区,与固件烧录工具职责不同。理解其工作原理、配置文件作用以及工具版本与芯片平台的匹配关系,有助于快速定位写入失败、系统读不到值或MAC异常等问题。本文从环境准备、参数填写到验证方法展开,并结合设备树配置、uboot环境变量与日志分析,梳理生产环境中常见的报错场景与排查顺序,

weixin_34056162的博客 1239

SN_Write_Tool深度解析:MTK设备IMEI/SN写入原理与实战指南

在安卓设备底层维护与硬件标识管理中,NVRAM(非易失性随机存取存储器)是关键概念,它负责存储设备断电后仍需保留的唯一标识信息,如IMEI和序列号。其原理在于,MTK芯片通过划分受保护的NVRAM分区,并利用CRC校验机制确保数据完整性。这项技术的核心价值在于解决设备因字库损坏、刷机失误导致的IMEI丢失问题,使设备恢复网络功能,在手机维修、二手设备合规翻新以及物联网设备生产环节具有重要应用。具体到操作层面,这通常涉及引导设备进入特殊的Meta模式或配合Fastboot模式,通过专用工具与驱动进行底层通信。

weixin_29163857的博客 266

MTK平台写号实战:SN Writer工具修复SN/IMEI全流程

手机串号(IMEI)和生产序列号(SN)是设备身份标识的“双证”,通常存储在MTK平台字库的NV保护分区中。一旦因换字库、搬板、刷底层固件或二手机翻新导致SN丢失、IMEI归零,设备便可能无法识别网络或通过系统检测。要修复这类数据,核心思路是理解MTK的BROM引导模式与NV分区读写机制,借助官方SN Writer工具配合对应平台的DA文件、数据库文件,通过VCOM驱动建立USB通道,即可直接改写保护分区内的SN、IMEI、WiFi MAC等信息。该方案广泛应用于手机维修、方案调试与售后校准场景。本文基于工

weixin_28727975的博客 299

android图片唯一性,Android设备唯一性

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?如何标识唯一的Android设备呢?硬件标识符IMEI国际移动设备身份码(International Mobile Equipment Identity),是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。IMEI所需权限:1MEID全球唯一的56bit CDMA制式移动终端标识号( Mob...

weixin_34803466的博客 315

SN_Write_Tool深度解析:从底层通信到IMEI/SN修改原理与实践

在移动设备维修与底层管理中,Fastboot模式和EDL/9008模式是两种关键的设备通信协议,它们构成了设备与计算机进行底层交互的基础。Fastboot作为通用的引导加载程序接口,常用于刷写系统分区;而EDL(紧急下载模式)或联发科的BROM模式则提供了更深层的访问能力,允许直接读写设备闪存。这些技术的核心价值在于能够绕过操作系统,直接操作存储设备关键信息的NVRAM分区或QCN文件,从而实现设备标识的修复与管理。在实际应用场景中,例如设备IMEI丢失恢复、批量设备初始化或特定行业设备标识管理,理解并掌握

weixin_34268310的博客 442

硬改,安卓手机改机软件介绍,手机硬改软件,hw改串软件工具,修改手机参数

基本上属于安卓设备被监控范围,封设备了必须改了

z920981023的博客 1万+

SN与IMEI重写工具原理与实战:从Fastboot/EDL模式到NV分区操作

在移动通信与智能设备维护领域,IMEI(国际移动设备识别码)和SN(序列号)是设备的核心身份标识,如同设备的“身份证”与“户口本”。其存储于基带处理器的非易失性存储(NV)区域,通常以NV项的形式存在,对于高通平台,这些数据常封装于QCN文件中。理解其底层原理,关键在于掌握设备的高权限引导模式,如Android通用的Fastboot模式和高通平台特有的EDL(紧急下载模式)。这些模式允许工具通过USB协议与设备引导程序或底层处理器通信,实现对NV分区的原始读写。这项技术的核心价值在于设备身份修复与数据恢复,

weixin_34049948的博客 514

记录汇川:自由口通信-梯形图

最常见的就是MODBUS通信协议,指令主要通过RS232和RS485端口进行报文发送,所以通信报文格式可以选择MODBUS RTU通信格式或MODBUS ASCII通信格式。255---Y10-Y17:ON(1111 1111)指令进行报文的发送与接收,但是报文内部的数据格式不是由主站PLC决定, 而是由。修改从站一个保持寄存器数据。修改从站多个保持寄存器数据。读取从站的输出信号状态。读取从站的输入信号状态。读取从站保持寄存器数据。读取从站输入寄存器数据。

m0_61837027的博客 4912

手机型号查询全攻略:看懂型号号码、IMEI与序列号,避开二手手机套路

每台手机都拥有一组唯一的设备标识,包括型号号码、序列号和IMEI。理解这些标识的原理,是识别手机真实身份的基础。通过查询型号号码的前缀与后缀,可判断设备来源与销售区域;核对序列号能获取激活与保修状态;用拨号指令读取IMEI并验证三码一致性,则能有效识别扩容机、改版机等风险。无论是购买配件、系统维护还是二手交易,掌握手机型号查询方法,都是规避陷阱、保障权益的关键技能。

weixin_29722783的博客 267

给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略

本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。

weixin_33749242的博客 417

IMEI,MEID,ESN,IMSI,android_id 之间的区别

/** * 1.IMEI * (国际移动设备识别码(IMEI:International Mobile Equipment Identification Number)是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。IMEI组成如下图所示,移动终端设备通过键入“*#06#” 即可查得。 * 其总长为15位,每位数字仅使用

饭糕的博客 1万+

Ansys CFX Pre 中 RGP 表的高级配置与优化策略

本文深入探讨了Ansys CFX Pre中RGP表的高级配置与优化策略,旨在帮助用户将仿真从“能用”提升至“精准好用”。文章重点解析了如何根据具体仿真场景,科学设定温度压力范围、选择流体类型,并针对相变等复杂工况实施网格加密与分离建表等关键优化技术,以显著提升计算精度与稳定性。

weixin_29216957的博客 1179

STM32与威纶通触摸屏RS485通信实战:Modbus RTU协议与避坑指南

在工业自动化与嵌入式系统开发中,串行通信是实现设备间数据交换的基础技术。RS485总线凭借其差分信号传输、抗干扰能力强、支持多点通信及长距离传输等特性,成为工业现场广泛应用的物理层标准。其核心原理是利用一对双绞线进行平衡传输,有效抑制共模噪声。在协议层,Modbus RTU作为开放、简洁的主从式应用层协议,定义了统一的数据模型(如线圈、寄存器)和功能码,极大简化了不同厂商设备间的互操作性。结合STM32微控制器的UART外设与威纶通(Weinview)人机界面(HMI),可以构建稳定可靠的监控与控制系统。本

weixin_33925615的博客 327

不拆机也能查IMEI?从Fastboot到云服务全套方法揭秘

IMEI是手机的唯一身份标识,在刷机变砖时尤为珍贵。不拆机查询IMEI的可行性依赖于手机底层分区(如persist/efs)和厂商云服务的同步机制:即使系统崩溃,引导程序或Recovery可能依然存活,通过Fastboot、ADB等底层命令即可读取系统属性,或直接从分区备份中提取编号。这一技术的价值在于,在卡Logo、无限重启等非硬件故障场景下,无需拆机即可恢复关键参数,为售后保修和参数修复提供支撑。本文系统梳理了从包装盒、卡托、云服务,到Fastboot命令、TWRP提取、售后SN查询的全路径,并针对驱动

weixin_29189987的博客 266

uniapp:解决微信小程序包体积超过2M的优化方案+详解分包问题,编译小程序体积大于2M不能上传和预览提示体积太大的处理教程,uniApp微信小程序主包过大问题如何解决(排查可疑点+分包+最小改动)

uniapp微信小程序开发,如何解决打包太大无法预览发布的问题,uniApp微信小程序包体积超过2M的优化方法,uni-app打包微信小程序主包超2M终极解决方案,使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法,UniApp开发的微信小程序主包过大问题及解决方案 编译小程序时Node-modules被打入主包,小程序体积大于2M不能上传和预览,怎么处理,解决微信小程序主包太大问题,微信小程序中主包和分包过大,详解分包问题,uni-app 微信小程序发布时,主包超

✅ 精选推荐文章 5066
上一篇: Android 关机、重启、recovery流程分析
下一篇: android 5.1 清除最近任务后将launcher强制关闭,再按返回键黑屏问题
D00PING
博客等级 码龄12年 96粉丝 48原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值