东信和平USIM卡破解原理及Linux下智能卡渗透笔记
本帖最后由 dswqgu 于 2025-10-21 02:52 编辑本帖所发布的资源和文章均来自网络,仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负!
### 背景
查找东信和平USIM资料时看到这篇《利用东信和平卡可编辑的技术,改iccid用有锁iphone手机》
> 14年东信和平的usim卡被暴出可以读取卡片的信息
> 读取出卡的数据,重新写入白卡中使用
此处“读取出卡的数据”至少能够读出IMSI, Ki, (https://diameter-protocol.blogspot.com/2013/06/usage-of-opopc-and-transport-key.html), 而Ki在普通鉴权等级(PIN/PUK)下是无法读出的,至少需要ADM鉴权。
### 分析
下载附件“USIM_Explorer改iccid软件.zip”,里面有`dx.exe`, `DesDLL.dll`和`USIM_Explorer.exe`三个可执行文件。
根据里面某张截图的提示,修改东信和平USIM卡的ICCID需要使用`USIM_Explorer.exe`执行以下命令
```
0020000A08 + 使用`dx.exe`计算出的ADM
00A4000C02 + 3F00
00A4000C02 + 2FE2
00D600000A + ICCID(20个十六进制数字)
```
#### APDU
关于Smart Card Communication
- Card Acceptance Device(CAD): supply the cards with power
- half-duplexed communication model
- master-slave mode: CAD is the master, Card is the slave
- Application Protocol Data Unit(APDU): ISO 7816-4
- Command APDU(C-APDU): from CAD to Card
- Response APDU(R-APDU): from Card to CAD
根据APDU规范,每行C-APDU命令的前8个十六进制数字分别对应CLA INS P1 P2,每个字段占一字节,称为Mandatory Header即
| CLA| INS| P1 | P2 |
| ---- | ---- | ---- | ---- |
| 00 | 20 | 00 | 0A |
| 00 | A4 | 00 | 0C |
| 00 | D6 | 00 | 00 |
CLA: Class of Instruction
INS: Instruction
P1, P2: Parameter 1, 2
后面的字段称为Optional Body,根据Header中的命令需求,分别有:
LC: Length of Command Data
Command Data
LE: Length of Expected Response
例如
```
00A4000C02 + 3F00
```
`00`表示CLS,`A4`表示`SELECT FILE`命令,`00`表示`select EF, DF or MF by file identifier`,`0C`表示`File Control Information(FCI) returned in response`,
`02`是LC,表示Command Data长度为两字节,`3F00`即MF。
R-ADPU
SW: Status Word
例如`9000`时表示SELECT FILE OK
#### TPDU
Transmission Protocol Data Unit
APDUs are transmitted by TPDUs
Defined in ISO 7816-3
#### ATR
Answer To Reset
After smart card is powered up, it sends ATR message to the host
Up to 33 bytes
#### 逆向dx.exe
`dx.exe`大小为614,400 bytes,简单分析后发现,该程序进行了以下操作
```
00A40000023F00
00A40000022F50
00B000002C
00A40000022F51
00B000000F
```
`2F50`和`2F51`都不是标准的USIM文件EF,猜测为东信和平私有实现。
推测`dx.exe`的工作流程为:点击`USIM专用工具单次授权版`后:
1. 程序先检查电脑是否连接PS/SC读卡器,否则报错;
2. 尝试与USIm卡建立通信,发送`00A40000023F00`等指令,读取卡上存储的私有信息(2F50/2F51处的),如果不成功,报错;
3. 根据读取的信息,通过计算模块(IDA中看到一处结构很像加解密模块)计算出ADM key。
简单来讲,ADM(Administrative) key是智能卡(Smart Card)文件权限控制中最高级别的key,类似还有PIN(Personal Identification Number), PUK(PIN Unblocking Key),权限递增。
如果获得了USIM卡的ADM key,则可以读出Ki,这便是东信和平USIM卡的破解原理: 使用“内部流出”的ADM计算工具获得USIM卡的ADM key,通过ADM key读取卡中的关键信息,如Ki。
由于时间有限,未完整逆向出ADM key的计算流程。“USIM_Explorer改iccid软件.zip”下载链接在[此](https://mega.nz/#!HCYEDZCa!-4StlPXfVnOGYnBlczn5WA0lztzse4StWbTNYTgI5Js),如果你有兴趣逆向`dx.exe`,欢迎留言或邮件交流。
## Linux下智能卡渗透笔记
Linux系统通过(https://pcsclite.apdu.fr/)支持使用PC/SC(Personal Computer/Smart Card)标准。
个人主要使用基于Python的(https://pyscard.sourceforge.io/)及基于此的(https://osmocom.org/projects/pysim/wiki)与USIM卡交互。
### pySim
pySim支持串口与PC/SC两种读卡器
| Option | Parameter |
| ------ | --------------------------------------------------- |
| -d | Serial Device fo SIM Access |
| -p | Which PS/SC number for SIM access |
注意PS/SC number是执行`pcsc_scan`后得到的,如:
```
Scanning present readers...
0: Identiv SCR35xx USB Smart Card Reader (xxxxxxxxxxxxxx) 00 00
```
中的**0**。
### ADM key
之前的博文(https://forum.naixi.net/thread-6192-1-1.html)中提到了写USIM卡的软件需要和卡配套,其实不完全是这种情况。
正如前文所讲,写卡最主要的是对ADM key的鉴权,之后写卡命令大部分情况下都是符合智能卡标准的,为pySim增加某些USIM卡写卡支持需要解决两个问题:
1. ADM key获取及ADM key鉴权(某些卡的鉴权方法非标准);
2. 某些非标准参数(通常是Ki)的读写。
此处的“非标准”指文件位置或者写卡命令非标准,然而在APDU层面都是标准的(此层以下厂商没有私有的必要,需要花费太多研发精力)。
分析pySim的`pySim-prog.py`可以看到,pySim支持的如sysmoUSIM-GR1, sysmoUSIM-SJS1等,其实是实现了对这些卡的ADM鉴权及参数写入。
我们在之前博文中使用的私有写卡软件`SIM Personalize tools(Copyright: GreenCard Co.,Ltd Ver 3.1.0`很容易逆向,通过strings的搜索,很容易得到此类卡的鉴权APDU,写参数APDU等。
该软件“支持的”卡其实是ADM key是`&&&&&&&&`,即`3838383838383838`长度为16个十六进制数字的值。
手中的另一个NB-IoT USIM卡的ADM key是`22222222`,即`3232323232323232`,ADM key的长度为8 bytes,在APDU中转换成ASCII值,也有某些USIM的ADM值直接以16个十六进制呈现,且没有对应的字符,如上面使用的东信和平USIM卡。
## Reference
- https://cyberloginit.com/2018/05/14/eastcompeace-usim-exploit-and-notes-on-smart-card-pentest-for-linux.html
- https://blog.csdn.net/s762888517/article/details/52980312
- https://www.eftlab.co.uk/index.php/site-map/knowledge-base/118-apdu-response-list
- http://cardwerk.com/smart-card-standard-iso7816-4-section-6-basic-interindustry-commands/
- https://blog.csdn.net/A493203176/article/details/65445775
- https://osmocom.org/projects/pysim/wiki
- https://sourceforge.net/p/openlte/wiki/Programming%20you%20own%20USIM%20card/
- (http://www.3gpp.org/dynareport/31102.htm) 太专业了佬,我得好好看看好好学学 学无止境 tql大佬 专业 没看到附件? 学习一下{tieba14} 太专业了,看不懂了 膜拜大佬{tieba14} 非常专业的帖子,收藏慢慢学习 感谢 太强了 是不是可以做安卓版了😋 太强了,论坛大佬果然多 携号转网给的那个动态授权码和ADM Key会不会有关系? 过于专业了 这是写论文的节奏啊大佬
有大佬帮忙搞定吗 付费 观摩高手 了解原理 学习了
页:
[1]
2