dswqgu 发表于 2025-10-15 18:36:14

东信和平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)

ahqier 发表于 2025-10-15 18:40:26

太专业了佬,我得好好看看好好学学

KVC 发表于 2025-10-15 19:16:33

学无止境

ApproLight 发表于 2025-10-15 21:57:20

tql大佬

syee 发表于 2025-10-15 22:33:38

专业

Black-Xstar 发表于 2025-10-15 23:11:00

没看到附件?

kylin 发表于 2025-10-15 23:20:07

学习一下{tieba14}

nnas 发表于 2025-10-16 05:58:19

太专业了,看不懂了

ryu 发表于 2025-10-16 07:07:21

膜拜大佬{tieba14}

tomcruise 发表于 2025-10-16 07:38:06

非常专业的帖子,收藏慢慢学习

Chuck0349 发表于 2025-10-16 13:01:41

感谢

Lucy_Basse 发表于 2025-10-16 13:11:54

太强了

hqs 发表于 2025-10-16 17:03:21

是不是可以做安卓版了😋

ncc1701 发表于 2025-10-16 19:29:48

太强了,论坛大佬果然多

Evus 发表于 2025-10-17 05:08:58

携号转网给的那个动态授权码和ADM Key会不会有关系?

iwtgh 发表于 2025-10-18 00:31:05

过于专业了

sadayo 发表于 2025-10-18 01:08:04

这是写论文的节奏啊大佬

mu8772 发表于 2025-10-18 01:43:19

有大佬帮忙搞定吗 付费

dou 发表于 2025-10-18 16:08:43

观摩高手 了解原理

kjhdahsdjk 发表于 2025-10-18 16:27:30

学习了
页: [1] 2
查看完整版本: 东信和平USIM卡破解原理及Linux下智能卡渗透笔记