月度归档:2018年10月

AT+CSIM(通用SIM访问命令)

3rd Generation Partnership Project; Technical Specification Group Core Network and Terminals;
AT command set for User Equipment (UE)
TS27.007

将命令APDU通过modem传递给SIM卡,然会返回响应APDU
这个命令,允许使用任意的APDU(但是 逻辑通道管理, 以及选择AID等命令, 可能会被AT命令实现,而不是用APDU: +CCHO=aid )

命令格式:

+CSIM=<length>,<command>

响应:

+CSIM: <length>,<response>

实战

红米6A,  一个终端运行
cat  /dev/pts/6


另外一个终端运行 (10是长度,是所有APDU命令的字符长度)
echo -e 'AT+CSIM=10,"A020000100"\r\n' > /dev/pts/6

AT+CSIM=14,"A0A40000027F20" 
AT+CSIM=42,"A088000010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
选择7FF0 echo -e 'AT+CSIM=14,"00A4000C027FF0"\r\n' > /dev/pts/6 运行鉴权算法


一加5T

cat /dev/at_mdm0

echo   -c  'AT\r\n'      > /dev/at_mdm0 
echo  -c  'AT+CGSN\r\n' > /dev/at_mdm0
 echo  -c  'AT+CSIM=26,"0020000A083935323739353237"\r\n' > /dev/at_mdm0
回应
+CME ERROR: operation not supported



高通芯片不支持AT+CSIM, 但是对AT+CRSM支持得比较好

比如读ICCID

echo -c 'AT+CRSM=176,12258,0,0,10\r\n'  > /dev/at_mdm0

Androd将softsim加入到后台白名单

除了在 设置->电池优化 或者 设置-> 应用程序里 进行设置外

还可以在 adb shell 里调整

$ adb shell dumpsys deviceidle whitelist +com.mediatek.vsim
Added: com.mediatek.vsim

$  adb shell dumpsys deviceidle whitelist +im.softs.softsim
Added: im.softs.softsim

或者
adb shell cmd deviceidle  whitelist +com.mediatek.vsim
adb shell cmd deviceidle  whitelist +im.softs.softsim

从白名单中移除:
adb shell cmd deviceidle whitelist  -com.tencent.mm



查看 adb shell cmd 命令 (在Android N中添加了这个命令, 之前是没有的)

adb shell cmd -l
cactus:/ $ cmd deviceidle whitelist                                                                    
system-excidle,com.android.updater,9802
system-excidle,com.android.providers.downloads,10014
system-excidle,com.android.shell,2000
system-excidle,com.android.deskclock,10096
system,com.android.updater,9802
system,com.android.providers.downloads,10014
system,com.android.shell,2000
system,com.android.deskclock,10096
user,com.android.cts.priv.ctsshim,10006
user,org.simalliance.openmobileapi.uicc2terminal,10064
user,com.miui.contentextension,10030
user,com.miui.fm,10048
user,com.android.providers.calendar,10000
user,com.xiaomi.vipaccount,10052
user,com.android.providers.media,10014
user,com.milink.service,10085
user,com.mobiletools.systemhelper,10094
user,com.xiaomi.account,10075
user,com.android.wallpapercropper,10019
user,com.xiaomi.micloud.sdk,10035
user,com.miui.packageinstaller,10001
user,org.simalliance.openmobileapi.service,10051
user,com.android.documentsui,10021
user,com.android.externalstorage,10031
user,com.mediatek.vsim,10153
user,com.xiaomi.gamecenter.sdk.service,10036
user,com.android.htmlviewer,10084
user,com.miui.securityadd,10060
user,com.android.companiondevicemanager,10103
user,com.miui.gallery,10025
user,com.android.quicksearchbox,10009
user,im.softs.softsim,10152
user,com.android.providers.downloads,10014
user,com.xiaomi.payment,10100
user,com.mediatek.omacp,10080
user,com.android.browser,10033
user,com.android.soundrecorder,10004
user,com.android.defcontainer,10015
user,com.miui.guardprovider,10095
user,com.android.providers.downloads.ui,10014
user,com.android.pacprocessor,10045
user,com.miui.micloudsync,10074
user,com.xiaomi.ab,10073
user,com.android.certinstaller,10063
user,com.android.carrierconfig,10028
user,com.google.android.marvin.talkback,10076
user,com.android.contacts,10003
user,com.miui.hybrid,10065
user,com.mi.webkit.core,10023
user,com.android.mms,10032
user,com.android.mtp,10014
user,com.android.backupconfirm,10039
user,se.dirac.acs,10024
user,com.xiaomi.simactivate.service,10047
user,com.miui.player,10042
user,com.android.statementservice,10011
user,com.android.calendar,10037
user,com.miui.translation.kingsoft,10043
user,com.miui.virtualsim,10107
user,com.miui.compass,10124
user,com.miui.vpnsdkmanager,10057
user,com.android.sharedstoragebackup,10013
user,com.android.printspooler,10078
user,org.simalliance.openmobileapi.uicc1terminal,10097
user,com.miui.personalassistant,10026
user,com.android.dreams.basic,10090
user,com.android.incallui,10007
user,com.fido.xiaomi.uafclient,10059
user,com.fido.asm,10079
user,com.android.bips,10102
user,com.xiaomi.mircs,10034
user,com.miui.translation.youdao,10070
user,com.miui.cloudbackup,10040
user,com.google.android.webview,10050
user,android.ext.shared,10049
user,com.android.onetimeinitializer,10038
user,com.mipay.wallet,10061
user,com.android.camera,10041
user,com.android.printservice.recommendation,10058
user,com.xiaomi.upnp,10071
user,com.xiaomi.xmsf,10077
user,android.ext.services,10027
user,com.android.calllogbackup,10003
user,com.svox.pico,10010
user,com.android.proxyhandler,10016
user,com.miui.notes,10119
user,com.miui.video,10018
user,com.xiaomi.market,10069
user,com.miui.translationservice,10087
user,com.miui.cloudservice,10074
user,com.android.managedprovisioning,10022
user,com.miui.hybrid.accessory,10055
user,com.miui.translation.xmcloud,10099
user,com.sohu.inputmethod.sogou.xiaomi,10098
user,com.xiaomi.providers.appindex,10046
user,com.mediatek.op09clib.telecom,10067
user,com.android.smspush,10093
user,com.miui.calculator,10148
user,com.android.wallpaper.livepicker,10054
user,com.miui.miwallpaper,10081
user,com.miui.securityinputmethod,10068
user,com.xiaomi.metoknlp,10091
user,com.android.storagemanager,10008
user,com.miui.analytics,10088
user,com.miui.weather2,10147
user,com.xiaomi.scanner,10122
user,com.android.cts.ctsshim,10089
user,com.miui.yellowpage,10003
user,com.android.vpndialogs,10017
user,com.mediatek.op01.telecom,10053
user,com.android.email,10117
user,com.miui.voiceassist,10083
user,com.android.providers.blockednumber,10003
user,com.android.providers.userdictionary,10003
user,com.miui.providers.weather,10012
user,com.android.emergency,10020
user,com.miui.greenguard,10101
user,com.android.deskclock,10096
user,com.android.bluetoothmidiservice,10086
user,com.miui.smsextra,10092
user,com.mediatek.mtklogger,10072
user,com.android.thememanager.module,10044
user,com.lbe.security.miui,10005
user,com.android.providers.contacts,10003
user,com.android.captiveportallogin,10062
user,com.mediatek.mtklogger.proxy,10104
user,com.mediatek.dataprotection,10105
user,com.miui.core,10056
user,com.miui.home,10002

还有,appos允许后台运行

adb shell appops set  com.mediatek.vsim RUN_IN_BACKGROUND allow
或者
adb shell cmd appops set  com.mediatek.vsim RUN_IN_BACKGROUND allow
adb shell cmd appops set im.softs.softsim RUN_IN_BACKGROUND allow

查询允许运行在后台

adb shell cmd  appops  query-op  RUN_IN_BACKGROUND allow

禁止后台运行

adb shell cmd appops set com.sina.weibo RUN_IN_BACKGROUND deny
adb shell cmd appops set com.tencent.mm  RUN_IN_BACKGROUND deny




联想手机还有几处设置:
1.安全中心-->内存加速-->设置(右上角图标)-->加速保护名单
2.最近的应用列表:下滑加锁
 3.   电池管理-->电池优化-->待机省电 



几种虚拟卡COS实现的比较

1.红茶移动  (深圳红茶移动科技有限公司/深圳杰睿联科技有限公司)
在Java层面 对 SIM卡文件系统进行建模
对文件系统的访问,转换成对Java对象的访问
底层存储系统基于自建的ByteString对象

2.果通 (Shanghai Gotell Communication Technology Holdings Co., Ltd)
在C层面对SIM卡文件系统建模, 完全是传统的单片机COS源代码移植过来, 将内存的一块区域当成一块Flash存储

3. 二六三移动
在C层面,对APDU进行系统建模,  分fcp和bin 做为 内置数据
广州263已经退出虚拟SIM卡行业

4.小米
在Java层面,对APDU进行建模, 直接返回响应

简评:
设计得最漂亮的是 红茶
支持的最完善的是 果通
二六三设计得最直接,简单有效
最差的是小米

小米的开发人员,对SIM卡理解得还不够,估计是直接逻辑分析仪抓数据后,填的空,
很多响应,莫名奇妙返回901E,  其实那是STK交互, 提示modem卡有Proactive Cmd,它们都没搞明白

MSPL

格式

起始bit   位长  内容                  值      名称               注释
1      16     0000000000001111         15              MSPL_SIZE
17        8     00000001                 1             CUR_MMSS_P_REV
25       16    0000000000000001         1                MSPL_VER_ID
41       8      00000001                 1             NUM_MSPL_ID
49       8      00000001                 1             MSPL_ID
57       8      00000011                 3             NUM_MSPL_RECS

65       8      00000111                 7             SYS_TYPE                     EUTRAN (LTE)
73       4       0000                   0               PRI_CLASS                   HOME Only
77       1         1                    1               SYS_PRI                      More
78       3        000                    0              HIGHER_PRI_SRCH_TIME         1分钟
81      1         0                   0                NETWORK_CAP_IND


82      8         00000100            4                SYS_TYPE                        cdma2000 HRPD
90      4        1111                   15              PRI_CLASS                      Any
94      1        0                     0               SYS_PRI                         Same
95      3        000                    0              HIGHER_PRI_SRCH_TIME           1分钟
98      1        0                     0               NETWORK_CAP_IND

99       8       00000011             3                SYS_TYPE                      cdma2000 1x
107      4       1111                15                 PRI_CLASS                    Any
111      1        0                  0                   SYS_PRI                         Same
112      3        000                 0                  HIGHER_PRI_SRCH_TIME           1分钟
115      1       0                     0               NETWORK_CAP_IND

116      4       0000                   0              RESERVED                          保留将来使用

中国电信2016版MSPL

001B010008020104071F000E007D001E80204071F030F8147C03EE

phone book Index Administration Phone book

文件标识符: 4FXX (由PBR的内容决定)

如果参考文件(EF_PBR)中指示了标签’A9’,则存在该文件

EF包含指向作为电话簿一部分的文件中的不同记录的指针。 指数管理文件记录号/ ID与相应的EF_ADN一对一映射(记录到记录对应)。

该指数管理文件包含与EF_ADN相同数量的记录。

EF_IAP中指针的顺序应为与参考文件记录(PBR)中标签’A9’指示的TLV对象中出现的文件ID的顺序相同。

数量记录中的字节数等于标签’A9’后表示EFPBR的文件数。

值’FF’是无效的记录号/ ID,用于任何位置以表示没有相应的记录指示的文件可用。
在个性化阶段,EF_IAP的内容设置为“FF”。

phone book Change Counter

文件标识符: 4F23
文件大小: 2字节

更改计数器(CC)将用于检测对电话簿所做的更改。每次更新/删除现有电话簿条目或添加新电话簿条目都会导致终端增加EF_CC的值。 拥有CC的概念使得可以在不同的终端更新电话簿,它仍然能够检测到变化(例如,不同手机和/或第二代和第二代之间的不同的终端)。

跟EF_PSC一样, 当且仅当 USIM支持 电话簿同步时, 这个文件必须存在

Phone book Synchronisation Counter

文件标识符: 4F22
文件大小: 4字节

ME(一般是手机)使用电话簿同步计数器(PSC)来构建电话簿标识符(PBID)和确定所访问的电话簿是否与先前访问的电话簿相同或者是否是新的未知的电话簿(可能是DF-telecom下有一个电话簿和USIM ADF下也有一个电话簿)。

如果PSC未知,则将跟随电话簿的完全同步。

PSC还用于重新生成UID并重置CC以防止它们超出范围。 当UID或CC已达到其最大值,生成新的PSC。 这导致了CC和UID都不会超出范围。

如果下列情况之一出现,则终端将重新生成PSC:
1) UID的值已超出范围;
2) 整个电话簿已被重置/删除;
3) CC的值超出范围。

当且仅当 电话本 支持同步时, 这个文件必须存在

基于EF_PSC的Phonebook Identifier(PBID) 编码规则:
DF_Telecom目录下
PBID= ICCid(10字节) + 4字节(EF_PSC)

ADF目录下
PBID=  ICCid XOR AID (10字节) + 4字节(EF_PSC)

android 读取usim中的电话本

aosp/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/

IccConstants接口
DF_PHONEBOOK = “5F3A”;
EF_PBR = 0x4F30;

IccPhoneBookInterfaceManager.java

uicc/UsimFileHandler.java

uicc/AdnRecordCache.java

gsm/UsimPhoneBookManager.java

USIM电话本

引言:USIM为了存储更多条电话本记录,所以才设计得这么复杂, 因为 APDU命令格式 限制了一个文件的记录最多256条
   为了存储512条联系人记录,必须设计一个索引

USIM中可以含有一个全局的电话本, 也可以含有一个应用专有的电话本。或者兼而有之。
当两种类型的电话本都存在时, 它们是独立的,没有数据是共享的。这种情况下,用户可以选择他们想用的电话本。
为了达到这个目录, 设备终端(手机或者Modem), 应该支持全局和应用专用的电话本。

全局电话本位于 DF_telecom(7F10)下的DF_phonebook(5F3A)目录,
USIM应用专用的电话本,位于对应的ADF(7FFF)的DF_phonebook目录下。
在ADF目录下的DF_phonebook和DE_telecom目录下的文件组织遵循相同的规则。
所有的电话本相关的EFs都位于各自的DF_phonebook目录下。
每个应用专用的电话本都被他们各自的App PIN保护。

如果DF_phonebook目录存在, 那么EF_adn和EF_pbr总是应该存在

如果其他电话本文件(除了EF_ADN或EF_EXT1)存在,  那么EF_PBC也应该存在。

如果USIM存在GSM应用,那么GSM应用专用的DF_PHONEBOOK下的 ADN和EXT1 应该被映射到 DF_TELECOM目录下。

如果USIM卡插入到一个2G终端(它会访问DF_Telecom目录下的ADN和EXT1文件), 并且这两个文件中的记录被更新, 那么
在EF_PBC文件中的相应的条目控制信息(entry control information) 会被USIM从0设为0.
之后,如果USIM卡插入到一个3G/4G终端(它支持全局 和/或 应用特定的 电话本), 那么终端会检查 EF_PBR中的这个标志,如果这个标志被设置为1, 那么应该更新EF_CC, 并重置这个标志为0。
也就是说,这个标志会导致 电话本的同步。

PBR

A81EC0034F3A01C1034F3306C5034F0902C4034F1104C6034F2503C9034F3107A905CA034F5008AA0FC2034F4A09C7034F4B0AC8034F4C0BFFFFFFFFFFFFFFFF


A81EC0034F3B0CC1034F3411C5034F0A0DC4034F130FC6034F260EC9034F3212A905CA034F5008AA0FC2034F4A09C7034F4B0AC8034F4C0BFFFFFFFFFFFFFFFF


两组

Link                  Type      FIle_ID     SFI
by Record             ADN       4F3A        1
by Record             IAP       4F33        6
by Record             PBC       4F09        2
by Record             ANR       4F11        4
by Record             GRP       4F25        3
by Record             UID       4F31        7
by Index              EMAIL     4F50        8
by TLV                EXT1      4F4A        9
by TLV                AAS       4F4B        10
by TLV                GAS       4F4C        11
----------------------------------------------
by Record             ADN       4F3B        12
by Record             IAP       4F34        17
by Record             PBC       4F0A        13
by Record             ANR       4F13        15
by Record             GRP       4F26        14
by Record             UID       4F32        18
by Index              EMAIL     4F50        8
by TLV                EXT1      4F4A        9
by TLV                AAS       4F4B        10
by TLV                GAS       4F4C        11


PBR这个文件 描述了电话本的结构
所有表示电话本信息的EF文件,如果可用, 都在这里指定(除了 EF_PSC, EF_PUID 和 EF_CC); 文件标识符(FID)和短文件标识符(SFI)

A8 1E C003(4F3A)[01]C103(4F33)[06] C503 4F09 02 C403 4F11 04 C603 4F2503 C903 4F3107
A9 05 CA03(4F50)08
AA 0F C203(4F4A)[09]C703(4F4B)0AC8034F4C0B
FF FF FF FF FF FF FF FF

————-
TAG 描述
C0 EF_ADN
C1 EF_IAP
C2 EF_EXT1
C3 EF_SNE
C4 EF_ANR
C5 EF_PBC
C6 EF_GRP
C7 EF_AAS
C8 EF_GAS
C9 EF_UID
CA EF_EMAIL
CB EF_CCP1
CC EF_PURI

=========================

EF_IAP

如果 在PBR索引中存在 A9 标签,那么此文件就存在

这个文件包含一些指针,指向作为电话本组成部分的一些文件

======================================================

A81EC0034F3901C4034F5A05C6034F5106C5034F4107C9034F6108C1034F3109A905CA034F710AAA14C2034F4A0BC7034F4B0CC8034F4C0DCB034F4F0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
A81EC0034F3A11C4034F5B15C6034F5216C5034F4217C9034F6218C1034F3219A905CA034F721AAA14C2034F4A0BC7034F4B0CC8034F4C0DCB034F4F0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

改成
A8 05 C0034F3901  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
A8 05 C0034F3A11  FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF


A81EC0034F3902C4034F5A0CC6034F5108C5034F4106C9034F610AC1034F3104A905CA034F710EAA14C2034F4A10C7034F4B12C8034F4C13CB034F4F11FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
A81EC0034F3A03C4034F5B0DC6034F5209C5034F4207C9034F620BC1034F3205A905CA034F720FAA14C2034F4A10C7034F4B12C8034F4C13CB034F4F11FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
改成
A805C0034F3902 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
A805C0034F3A03 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

全局电话本位于 DF_TELECOM(7F10)目录下的DF_PHONEBOOK(5F3A)目录

每个usim应用它自己应用专属的电话本,位于 ADF USIM 目录下的df_phonebOOK目录

DF Phonebook 目录应该总是存在 EF_ADN文件和 EF_BPR(4F30)文件。

如果在UICC卡中存在GSM应用, 那么Phonebook目录下的EF_ADN(4F3A)和EF_EXT1(4F4A)应该映射到DF_Telecom目录下的EF_ADN(6F3A)和EF_EXT1(6F4A), 因为早期的GSM标准中,没有EF_PHONEBOOK目录,电话本直接存在DF_Telecom目录的文件中。