UICC Send USSD 加密信息解析

已以下指令为例

已知发送 USSD 的格式为:
Send USSD aaaxxxxxxxxxxxx*yyyyyyy#

复制代码
;Fetch:==:SEND USSD
SEND 801200001F
ASSERT D01D81030112008202818305008A100F2A5C0DA782C564335ACDA6CAE57223 9000

;命令类型: Send USSD
;设备标识: SIM==>Network
;α标识符=()
;DCS=(0F)
;USSD String=(2A5C0DA782C564335ACDA6CAE57223)
;           =(2A3835382A303132333435362A39393923)
复制代码

首先对ASSERT指令进行拆解:

复制代码
ASSERT D01D81030112008202818305008A100F2A5C0DA782C564335ACDA6CAE57223

Proactive command
命令类型  12 : SEND USSD
============================
命令细节
----------------------------
    命令细节标记    81
    长度="03"        03
    命令代码        01
    命令类型        12
    命令限定符        00  RFU
============================
设备标识
----------------------------
    设备标识标记    82
    长度="02"        02
    起始端设备标识    81:UICC;
    目的端设备标识    83:Network;
============================
α标识符
----------------------------
    α标识符标记    05
    长度            00
    α标识符        
============================
USSD字符串
----------------------------
    USSD字符串标记    8A
    长度            10
    TON和NPI        0F
    USSD字符串        2A5C0DA782C564335ACDA6CAE57223
复制代码

然后对USSD 字符串使用7bit解码方式进行解析,即可得到发送的原始数据:

USSD字符串        2A5C0DA782C564335ACDA6CAE57223
解析后的字符串    *858*0123456*999#

注:
GSM默认采用7bit编码,实际上,7位编码是种压缩算法,因为,ASCII码(不包括扩展ASCII),其值小于0x80,最高位bit8是0,被忽略了;而7bit编码就利用了这一位来存储数据;其编码时,依次将下一7位编码的后几位逐次移至前面,形成新的8位编码。

 

posted @   禅主  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示