作者归档:softsim

智能卡安全机制比较DS SmartCard

作者: smarticcard (微信号)

DS Smart Card是飞利浦公司自己开发的一款CPU卡产品,在早期芯片厂商开发自己的COS并进行推广很普遍,现在像英飞凌(前西门子半导体)以及恩智普(前飞利浦半导体)几乎很少推广自己的COS,大多时候都是在集中精力推广自己的芯片。

飞利浦的DS系列智能卡COS结合了ISO7816和ETSI的规范(也就是SIM卡规范),在安全机制上采取了和SIM卡类似的密码验证方式,即主要通过密码比对的方式获取对文件的访问控制权限。

DS CPU卡一共定义了三种基本的访问权限,分别是发卡商权限(0到3)共享权限(0和1),持卡人权限(0和1)。这些访问权限通过密码单元中对应的访问权限区域来定义,对应的密码分别是发卡商密码和持卡人密码,而共享权限可以利用发卡商密码或者持卡人密码来获得。在正确验证密码后根据访问权限区域设定的数据位就可以获得其中的一种或几种权限。一旦获得了某种权限,那么这种权限就一直保留,直到到卡片断电,或者是对同一个密码又进行了错误的认证后才会消失。每次正确的密码认证所获得的权限是累加的关系。

在可以设定的权限中共有16种状态,其中0表示始终满足,即不需要认证,而15表示永远都不满足,即拒绝任何访问。其余的14种状态可以分别对应不同的密码或者密码组合来实现访问控制。每个密码还设计了对应的解锁密码,当连续错误验证密码超过规定的次数后,该密码将被锁定,只有通过核对解锁密码才能解开。

总体上看DS的CPU卡COS主要是依据SIM卡的规范而设计的安全机制,而其中的文件管理和操作也符合SIM卡的标准,比如对于文件的访问除了一般的读写之外,还有对文件的禁用和启用,在文件被禁用后不能更改,根据文件建立时规定的禁用可读与否来决定文件禁用后是否可读。

DS卡只支持一种EF文件类型,那就是透明二进制文件。

DS卡还有一种据称申请专利的认证技术,采用DES的算法来认证卡片上存储的数据,借以判断终端明确知道的某个地址的卡片内容对不对,这种认证方式类似于7816规定的内部认证,但是机制上又有自己的定义,所以也比较有意思。在目前广泛应用的CPU卡中几乎没有人再使用这种机制了。

这种认证机制可以核对更改后的数据是否正确、实现文件内容的密文读出、实现带有随机数的内部认证。实际上终端应该能够确切地知道卡片中某个位置存储的4个字节数据,在认证中并不是采用简单的密码比较方式,而是采用随机数和认证响应的方式进行计算和比较。

认证是依靠当前的EF文件来进行的,在认证进行之前,对于文件的读权限必须满足。通过两步来完成认证,第一步是生成临时密钥,第二步是使用第一步得到的临时密钥计算认证数据。首先终端发送8字节的随机数据给卡片,卡片把前两字节用当前文件的标识给替换掉,使用该数据通过认证密钥Kc进行DES解密运算来得到临时密钥。如果重新进行了正确的文件选择,那么原来计算得到的临时密钥就会被破坏。然后利用临时密钥对文件中某个地址的4个字节数据及其对应的两个字节的地址进行DES解密运算,出于冗余和8字节DES计算的需要,两个字节的数据被重复,即8字节的数据结构为:数据(4字节)+地址(2字节)+地址(2字节)。经过计算得到的8字节认证数据传送给终端,终端可以比对计算的结果是否正确,来确定认证是否成功。

智能卡安全机制比较 MPCOS

作者: smarticcard (微信号)

MPCOS是金普斯早期推出的一款多应用支付芯片卡操作系统,支持ISO7816以及PCOS的数据格式和命令。MPCOS具有两级目录文件结构,即MF下可以有一级DF,每个DF下最多可创建63个EF。

MPCOS的文件访问控制是由密码来实现的,该密码存储在一个特殊的密码文件EFsc中,每个DF下只有一个EFsc,每个EFsc可以存储8个密码,对应的编号分别为0-7。对于EF和DF分别对应不同的访问控制操作,比如创建文件,读写操作等。这些访问控制操作就需要通过访问控制条件来实现。对于DF和EF而言,分别有两个字节的寄存器来表示在进行创建、读写等文件操作之前需要验证的密码编号,对于某一种文件操作最多可以指明需要验证两个密码。另外这个寄存器也指出了在进行安全报文操作时,进行数据加密和MAC计算需要使用的密钥编号。由此可以看出,MPCOS的安全控制依靠的是密码比对方法,而数据传输的安全保护(MAC以及数据密文的计算)使用另外一个密钥文件EFkey中存储的密钥通过DES运算来完成。

MPCOS是在金普斯原来的PCOS基础上扩展了ISO7816的文件结构,从而形成的多应用智能卡操作系统。所以MPCOS中保留了原来PCOS在支付应用方面的特色,做到了面向PCOS的向下兼容。

金普斯在结合支付应用和ISO7816文件操作的过程中,设计了两种操作模式:支付模式和管理模式。每种模式都有一个专有命令来启动一个会话过程,而这个会话过程只有在启动了另一种模式或者是卡片复位后才能被终止。(其实这种机制和后来的EMV96,以及PBOC电子钱包的状态机模式很像)

MPCOS对于支付和文件管理分别定义了不同的安全机制,在支付应用中可以加密敏感数据、生成交易证书、设定交易计数器等;而对于文件管理操作,可以通过MAC验证来确保数据的完整性、监控追踪某些敏感命令的执行等。不过MPCOS的MAC是3个字节的,这点和目前流行的4字节MAC稍有不同,但是计算方式是类似的。

针对文件的访问控制MPCOS是在文件创建的时候定义访问控制条件的,但是在文件被创建后,当满足安全控制条件的情况下,可以通过Lock和Localize两个命名来改变文件的访问控制属性,其中Lock是用来锁定文件的,文件被锁定后,拒绝任何访问;而Localize则是把文件访问控制所需参考主控文件MF下的密码或者密钥,改成参考当前DF下的密码或者密钥。

在MPCOS的支付交易处理过程中,同样引入了终端编号以及终端交易序号这样的参数,通过这些参数的参与来计算交易验证码。

智能卡安全机制比较PayFlex

作者: smarticcard (微信号)

PayFlex是斯伦贝谢公司(经过若干整合现在是金雅拓的一部分)在上世纪90年代推出的一款电子钱包支付COS,从功能上看可以说PayFlex是EMV96以及PBOC电子钱包规范的雏形。

PayFlex同时具备用户卡和SAM卡功能,支持电子钱包用户卡的消费、圈存等交易。

从文件结构上看,仅支持定长记录文件和循环记录文件两种格式。PIN和密钥都是存储在定长记录文件中,PIN也就是所谓的持卡人验证CHV,密钥分为验证密钥和计算密钥,CHV文件中只有一个记录来存储PIN,而密钥文件中最多可以存储16条密钥;交易记录和钱包文件是用循环记录文件来存储的。

从安全机制上看,也是采用访问控制条件加上当前安全状态的模式。但是相对比较简单,总共有5种访问控制状态:自由访问、PIN、密钥验证、PIN+密钥验证、拒绝访问。

….

每个文件在创建的时候都有2个字节AC1和AC2用来指示不同APDU命令的访问控制权限,同时也有另外2个字节KN1和KN2来指出实现需要的访问控制权限将会使用的密钥。

访问权限的获得可以通过明文的方式验证PIN或者密钥,也可以通过密文的方式来验证。这里所谓的密文方式,实际上就是我们常说的外部认证,也就是先取8字节的随机数,然后再通过密钥加密,把加密后的数据按照某种规则截取6个字节,送到卡片中去比对。

因为PayFlex本身也具有SAM卡的功能,所以也可以用PayFlex卡计算分散密钥。此外PayFlex还支持内部认证,可以让主机或者终端来验证卡片的合法性。

电子钱包的交易流程和现在常用PBOC电子钱包交易非常类似,也是通过两个步骤,经由SAM卡来完成的,交易完成之后也生成类似于MAC和TAC的证书数据,用来验证交易的完整性。

和目前PBOC电子钱包不同的是PayFlex卡的密钥长度都是8字节,而不是16字节。

当时这款产品是基于TI的一款TMS373C012,只有4K的程序ROM,128字节的RAM和1K字节的EEPROM。在这样有限的资源里,开发出如此功能的产品,的确称得上是地位领先了。其中实现了20来个APDU,包括读/写/更新记录文件、外部认证、内部认证、验证/更改/解锁PIN(或密钥)、选择文件、创建文件、消费、圈存、分散密钥、取随机数、补丁程序的下载和激活等。

后来,在96年PBOC电子钱包规范发布之后,斯伦贝谢迅速推出了一款符合PBOC规范的QianFlex产品。

智能卡安全机制比较 StarCOS

作者: smarticcard (微信号)

StarCOS是捷德公司的推出的智能卡COS,和前面说过的几种COS不同的是,国内的用户对于StartCOS可以说非常熟悉,而且因为握奇、明华、天喻等公司的安全机制都基本上是脱胎于StarCOS,所以经常会给大家造成一种错觉,好像智能卡的COS就该是这样的。其实完全不然,稍后会介绍握奇的TimeCOS,从TimeCOS V1.0中可以看出来,和StarCOS还是有很大差别的。

捷德中国为了满足国内PBOC的需求,在StarCOS的基础上推出了Star China,安全机制和StarCOS相同。

StarCOS的文件结构除了通常的二进制透明文件、线性定长记录文件、线性变长记录文件、循环记录文件之外,还多了一种名为compute的文件结构,从形式上看compute文件和循环记录文件类似,但是每条记录又有自己固定的结构定义。

StarCOS的MF和每个DF都有自己的初始安全状态,当卡片上电后首先默认选择MF,安全状态为MF的初始状态,当选择某个DF后,当前DF的安全状态就是该DF的初始状态。MF和DF的初始状态在文件建立的时候可以设定。

在整个卡片的操作过程中分别保存两个当前安全状态,一个是MF的,另一个是当前DF的。只有通过验证PIN或者外部认证、双向认证才能改变当前的安全状态。

总共有1到15种状态可以设定,用半字节来表示。

在MF下有建立EF、安装密钥、建立DF、注册DF的安全条件;在DF下有建立EF和安装密钥的安全条件;对于EF而言分别有读、写、锁定、解锁、增值、减值等操作的安全条件。

所谓的安全条件AC就是定义卡片应该处于什么样的安全状态下,才能满足相应的操作。安全条件为一个字节,具体定义为:

其中高两位b8b7定义比较模式,分别为等于、小于、大于等于、不等于;b6用来定义是否采用安全报文;b5用来表示和当前DF的安全状态比较还是和MF的安全状态比较;b4b3b2b1则表示比较时参考的安全状态。

简单地说如果卡片MF的安全状态是05,当前DF的安全状态是08,如果在当前DF下有一个EF的读AC=43、写AC=99,那么就可以对该EF进行读操作,但是不能写。

在密钥中有两个安全条件值ACV,其中第一个ACV用来指明这个密钥的使用条件、而第二个ACV的后四位数据用来指明正确认证密钥后将要转换的后续状态。同样每条密钥中还有一个用来指出更新密钥需要遵循的安全状态。

下图用来说明安全状态的转换

该图说明只有在MF下验证DES密钥之后,才能进入DF下进行PIN验证,并且将DF的安全状态改变为c。

StarCOS的安全机制是目前见到过的最灵活和最有效的安全机制,对于文件的不同操作可以非常方便地定义安全条件,即可以参考当前的DF值也可以参考MF下的值。

唯一的限制是在98年版的StarCOS S2.1中,仅支持二级文件目录,亦即在MF下只有一级DF,虽然稍显不足,但是也基本上可以满足大多数应用的需求。

智能卡安全机制比较 TimeCOS

http://blog.sina.com.cn/s/blog_4df8400a0100gpm6.html

TimeCOS是握奇公司推出的智能卡操作系统,也可以说是国内早期自己开发的为数不多的几款COS之一。当然随着后来国内公司对于CPU卡开发的投入,其他公司的COS产品也纷纷推出。

其实从握奇的TimeCOS来看,早期的1.0版本和目前流行的TimeCOS版本之间在安全机制方面存在很大的差别。TimeCOS1.0采用的是按位比较的状态机机制,也就是说TimeCOS1.0在内存中维护一个安全状态字节,这个字节的每个位分别对应一种安全状态,在初始情况下这个状态字节为00,只有通过外部认证或者是通过PIN的验证之后这个字节的某个位才能从0转变为1。而某个文件或者应用的安全状态一般都需要这个安全状态字节的某些位必须被置1之后才能被访问或者操作。这种模式简单易行,基本可以满足各种基本的应用需求。

但是在随后的TimeCOS版本中,握奇借鉴了StarCOS的安全机制模式,也采用前后顺序状态,以及状态数值之间的大小比较来确定安全状态是否被满足。

在握奇各种细分的COS版本中,基本上都采用了这种类StarCOS的安全机制,其中包括:PBOC产品、PKI产品、PSAM产品等。

具体的实施方法是:卡片的内存中同样会有一个安全状态字节,不过这个字节的变化不是按位改变,而是由认证密钥(或者PIN)中预设的“后续状态”来直接指定,对于卡片中存储的任何一个密钥(含PIN)都有一个所谓的“后续状态”。

这个字节被划分为前后两个半字节,分别用来指出MF和当前DF的状态。

卡片各种操作的权限的获得就是通过这个状态的转变来实现,该状态的取值范围是0到15,操作的权限用一个字节表示,分为左右两个半字节,其中左半字节和右半字节的取值均为0-15(0x0-0xF),可以表示为0xXY,如果当前DF的安全状态值V满足Y<=V<=X的条件,那么就获得了操作权限。 比如一个文件的读权限是0x52,而写权限是0x84;密钥1的后续状态是0x03,而密钥2的后续状态是0x05。那么认证密钥1之后可以文件满足读权限,但是不可写;认证密钥2后可以满足文件的写权限,但是不可读。 如果要把某个权限设定为可以自由操作,无需认证密钥,那么可以设为0xF0,这种情况下无论安全状态字节的值V是什么都满足0<=V<=15的条件。当然如果要把某个权限设定为禁止,即无论认证多少密钥都不能满足权限,那么可以设定为0x1F,在这种情况下无论S为任何值V都不能满足小于等于1并且大于等于15的条件。 特别地如果操作权限为0x0Y(即0xXY中的X=0),则表示需要比较MF下的安全状态大于Y。 如果仔细分析了StarCOS的安全机制,可以发现握奇采用的机制是在StarCOS的基础上进行的一个改进版本,因为StarCOS可以定义比较模式,也就是StarCOS可以更灵活地定义比较安全状态究竟是采用大于、小于还是等于或者不等于的模式。 国内另外一些厂商推出的COS多数借鉴握奇的TimeCOS安全机制,比如明华的所谓SmartCOS,以及复旦的FMCOS。 而航天金卡的PowerCOS则是完全照搬了StarCOS的安全机制。 国内的一些应用开发商和某些行业标准制定者,在进行系统开发和行业标准规划的过程中根本没有去认真阅读ISO7816的相关标准,仅把某家厂商的用户手册作为唯一的参考,甚至错误地认为全世界所有的COS都应该是这样的,实在让人无语!

智能卡cos开发的一些传说

某位大神(微信号:smarticcard)说:

上个世纪90年代初期曾经在一家中字头的公司工作过,当时的主要任务就是开发智能卡COS。和摩托罗拉、德州仪器等芯片公司接触颇多。印象比较深的是
当时还和著名的王爱英教授有过交流,王教授领导手下的研究生也开发了一款COS,但是苦于没有市场应用,4K的程序代码,能够完成基本的文件管理
和安全管理。王教授开价5万转让,沟通了几次最后没有谈成。

...
在这个时期CPU卡的价格维持在几十元人民币。包括金普斯(Gemplus)、捷德(G&D)、布尔(雅斯拓)、欧伽(ORGA)、飞利浦等国外公司的CPU卡
产品价格也都非常高。
...

随着CPU卡市场的逐渐普及,部分卡商也开始开发自己的COS。明华、航天、东信和平等原来更多地注重卡片封装生产的卡厂转而投入到COS开发的队伍当中。另外
像长城计算机等一些原来使用CPU卡进行系统集成开发的公司也加入到COS开发的行列,还有像武汉天喻这样的公司在成立之初就瞄准了COS开发。

越来越多的国内公司开发出了自己的COS产品,国外的公司也没有袖手旁观,捷德、金普斯等开始在国内建立研发团队针对中国市场开发COS产品。

到2000年前后,国产COS已经占据一定的市场份额,这时CPU卡的价格也跟随着下降。再加上部分国产CPU卡芯片也进入市场,所以CPU卡诱人的高利逐步降低。
2002年原雅斯拓的部分人员成立上海科斯,以迅雷不及掩耳之势同时获得中国移动和中国联通的入围资格,让众多还在为如何获得移动或者联通SIM卡入围
资格而苦思冥想的国内厂商惊诧不已。(像江苏恒宝这样的企业也是因为前一段时间收购了凤凰微电子手中的东方英卡股份才获得入围中国移动的资格。)

....


对于GSM的SIM卡因为没有合法获得A3A8算法的渠道,所以国内的厂商几乎没有自己开发SIM卡COS的,部分入围SIM卡的国内厂商也是直接从国外公司进口SIM卡
的模块,然后进行卡片封装。

国外的厂商比如斯伦贝谢(PayFlex)、金普斯(MPCos)、捷德(StarCOS)都力推自己的产品,而国内当时唯一成型的COS厂商握奇也在推广自己
的TimeCOS1.0。另外一家国内的COS厂商卡斯特也在物美集团下属的超市推广自己的产品。
......


到1977年才有三家公司参与智能卡的开发,那就是布尔(Bull)、斯伦贝谢(Schlumberger)以及SGS汤姆逊(SGS-Thomson),现在说来已经是三十年前的事情了。

1988年从SGS汤姆逊公司出来了5个员工,单打锣鼓另开张,创立了金普斯(Gemplus),并且为法国电信市场提供巨量的电话卡,从此一发而不可收,并且于1995年收购了Datacard集团位于欧洲和美国的卡片生产部门。

布尔为了强化智能卡市场也成立了独资公司就是著名的Bull CP8。但是布尔CP8因为整个布尔集团的结构策略调整而于2001年以3.5亿欧元的价格卖给了斯伦贝谢。

后来斯伦贝谢又将智能卡业务部门独立出来成立了雅斯拓(Axalto)。

从此雅斯拓和金普斯就成为整个智能卡行业的领头羊。分别提供各种行业的智能卡产品和终端机具,以及个性化服务和整体解决方案。

随着竞争的加剧,利润水平逐渐降低,这两个老大终于坐到了一起,从竞争转而开始讨论合并。并且历时一年左右的时间终于完成了合并,新的公司取名为“Gemalto”,中文翻译为“金雅拓”。为此削减了大量的冗余人员,降低了运营成本。

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