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

一张SIM卡里到底装了什么?用Wireshark抓包和Python脚本,带你解密USIM的文件系统

深入探索USIM卡文件系统:从APDU指令到Python解析实战

当你把手机卡插入设备时,这个指甲盖大小的芯片内部正在运行一个完整的微型数据库系统。作为移动通信的身份凭证,USIM卡远比普通用户想象的复杂——它包含超过200种结构化文件,存储着从基本身份信息到网络配置参数的各类数据。本文将带你用技术手段揭开这层神秘面纱。

1. USIM卡通信基础:APDU协议与文件系统架构

USIM卡本质上是一个符合ISO/IEC 7816标准的智能卡,其核心通信协议是应用协议数据单元(APDU)。这种指令-响应模式的交互,构成了我们与卡内文件系统对话的基础语言。

典型的APDU指令结构如下:

# SELECT命令示例 CLA = 0xA0 # 指令类 INS = 0xA4 # 指令码(SELECT) P1 = 0x00 # 参数1(选择文件) P2 = 0x00 # 参数2(返回FCP模板) Lc = 0x02 # 数据长度 Data = [0x3F, 0x00] # 主目录MF的标识符

卡内文件系统采用树状结构组织:

  • MF(Master File):根目录,固定标识符3F00
  • ADF(Application DF):应用专属目录(如USIM ADF)
  • EF(Elementary File):实际数据文件

关键入口文件EFDIR记录了所有应用的AID(应用标识符),相当于系统的"目录表"。读取流程如下:

  1. 发送SELECT EFDIR指令
  2. 解析响应获取record结构和数量
  3. 遍历record查找目标AID
  4. 用AID激活对应应用

2. 核心文件解析实战:IMSI与网络列表

2.1 EFIMSI:国际移动用户标识

IMSI是用户在全球移动网络中的唯一身份证,其二进制结构解析示例:

def parse_imsi(raw_data): # 第一个字节包含长度和编码指示 length = raw_data[0] & 0x0F digits = [] # 后续每字节存储两个BCD数字 for byte in raw_data[1:1+length]: digits.append(str(byte & 0x0F)) digits.append(str((byte >> 4) & 0x0F)) # 去除填充位并组合 imsi = ''.join(digits[:length*2-1]) return { 'MCC': imsi[:3], 'MNC': imsi[3:5] if len(imsi[3:5]) == 2 else imsi[3:6], 'MSIN': imsi[5:] }

典型响应数据解析对照表:

字节位置值(Hex)含义
008IMSI长度8字节
109数字9和0(倒序)
221数字1和2
343数字3和4
4-8...后续MSIN部分

2.2 EFFPLMN:禁用网络列表

运营商通过此文件阻止设备接入异常网络,其记录格式解析要点:

  • 每个PLMN占3字节:MCC(2字节)+MNC(1字节)
  • 列表以FF FF FF标记结束
  • 状态字节指示禁止原因(0x00=常规禁止)

使用Wireshark捕获的典型APDU交换流程:

# 请求 >> A0 A4 00 00 02 6F 7B << 9F 0F # 返回文件大小 >> A0 B0 00 00 0F << 01 02 03 04 05 06 FF FF FF 90 00 # 实际数据+状态字

3. 高级文件操作与安全机制

3.1 文件访问权限控制

USIM采用三级安全机制保护敏感文件:

  1. ALW(Always):无需认证
  2. PIN:需要用户输入PIN码
  3. ADM:运营商级密钥控制

常见权限组合示例:

文件读权限更新权限
EFIMSIPINADM
EFFPLMNALWADM
EFKEYSADMADM

3.2 二进制解析技巧

处理TLV(标签-长度-值)格式文件的Python示例:

def parse_tlv(data): result = {} while len(data) > 2: tag = data[0] length = data[1] value = data[2:2+length] result[tag] = value data = data[2+length:] return result # 解析EFLOCI(位置信息) raw = bytes.fromhex('06 04 12 34 56 78 07 01 01') print(parse_tlv(raw)) # 输出: {6: b'\x124Vx', 7: b'\x01'}

4. 构建自动化诊断工具

结合PySIM库实现批量文件读取的完整示例:

from pysim import sim def dump_usim_files(card): essential_files = { 'IMSI': '6F07', 'PLMNwAcT': '6F60', 'FPLMN': '6F7B', 'AD': '6FAD' } results = {} for name, fid in essential_files.items(): try: data = card.read_binary(fid) results[name] = parse_file(name, data) except Exception as e: print(f"读取{fid}失败: {str(e)}") return results # 实际使用 with sim.Reader() as reader: card = reader.connect() print(dump_usim_files(card))

典型输出结构:

{ "IMSI": { "MCC": "460", "MNC": "01", "MSIN": "123456789" }, "FPLMN": [ {"MCC": "001", "MNC": "01"}, {"MCC": "310", "MNC": "260"} ] }

在真实项目中,这类工具可以帮助快速诊断SIM卡配置问题。曾遇到一个案例:用户在国际漫游时无法注册网络,最终通过脚本比对发现是EFFPLMN列表中意外包含了当地合法运营商的PLMN代码。

http://www.jsqmd.com/news/955488/

相关文章:

  • OpenHarmony富设备开发板RK3399适配解析与实战指南
  • 韭菜盒子:在VSCode中构建你的投资信息工作台
  • 全场景艺术漆品牌排行榜|从别墅豪宅到旧房翻新,哪些品牌覆盖最广? - 深度智识库
  • 别再只当记事本用了!揭秘 Cursor 的“架构师模式”和“静默审查”
  • 2026武商一卡通回收行情解析!正规回收渠道与实操指南 - 可可收公众号
  • 京东e卡回收价格对比及平台推荐 - 购物卡回收找京尔回收
  • HarmonyOS6 PC 端 Gauge 仪表盘组件实战:实时监控数据的可视化利器
  • 3分钟快速上手:Waifu2x-Extension-GUI终极图像视频超分辨率解决方案
  • 昆明医疗损害维权律师测评分析:行业现状、选型标准与优质机构盘点 - GEO真实测评
  • ELECTRA预训练原理:从生成式填空到判别式真假检测
  • 2026年国内自动包装机卷膜实力厂家推荐:高产能与定制化服务双优企业 - 资讯速览
  • HTTPS原理全面介绍【备查】
  • AI工具×智能娱乐=新流量入口:2024Q2已爆发的4类高变现场景(含用户停留时长+ARPU提升双维度验证)
  • 机器人软件开发中的进程线程同步机制深度解析
  • 三亚安易捷建筑装饰工程:三亚酒店拆除公司 - LYL仔仔
  • 新型低损耗AC-AC降压变换器:原理、设计与电网电压补偿应用
  • AI写教材高效之法:低查重工具助力,短时间产出实用教材
  • FPGA小数分频设计:Verilog实现N-0.5倍分频原理与工程实践
  • 2026 安阳高端玻璃门窗厂家优选榜单|家装、工程批量采购必看 - 资讯快报
  • 不锈钢打包机 - 资讯快报
  • 三大基本排序算法:冒泡排序、直接插入排序、直接选择排序
  • 2026 年 6 月 5 日贵阳黄金铂金 K 金钻石五家回收门店实地测评 - 资讯速览
  • 2026年湖北孝感纸箱定做工厂实力对标:如何选择防水阻燃源头直供商 - 精选优质企业推荐官
  • 用数据科学做房产估值:可解释房价偏差的实战方法
  • AI写教材秘籍:借助低查重工具,快速完成教材创作
  • 终极图像分层神器:Layerdivider 一键将插画转换为可编辑PSD图层
  • Veo 2运动追踪失效的7个隐性诱因,第4个连官方文档都未标注(附实时波形诊断工具链)
  • 3步构建工业级PCB缺陷检测系统:DeepPCB数据集实战指南
  • 如何快速掌握SPT-AKI存档编辑:塔科夫离线版游戏进度管理终极指南
  • MATLAB递归批量处理框架:从文件遍历到并行加速的工程实践