EF_SMS短消息文件
immediately following the TS-Service-Centre-Address contain an appropriate short message TPDU as specified in
TS 23.040 [6], with identical coding and ordering of parameter
USB 转UART 连接 simtrace的debug接口(管脚1为 地, 4为发送, 5 为接收)
在PC上配置串口 (921600 8N1)
波特率 921600
8位数据位
无奇偶校验
停止位 1
重启板子(按 RESET 按钮, 或者 重新拔插 usb线缆)
在串口会看到输出
DFU模式(Device Firmware Upgrade)
firemware编译出 几种应用:
dfu: USB DFU 启动加载器,用来 升级其他应用的
ccid: USB CCID读卡器
cardem: 卡模拟,提供本地cos,以及远程sim卡功能
trace: 监听sim卡和设备间的通信
triple_play: 支持 ccid, cardem, trace三种功能,通过usb来配置。
应用可以放在设备的不同位置
flash
bootloader区域内(第1个16k区域保留为bootloader所用,dfu放这里)
ram (通过 jtag/swd 直接下载到ram)
越狱后iPhone(iPad或iPod)
获取debugserver
添加权限
分离fat binary lipo -thin armv7s ~/debugserver -output ~/debugserver_7s lipo -thin arm64 ~/debugserver -output ~/debugserver_64 (iPhone 6之后是 64位的) 强制添加权限 codesign -s - --entitlements entitlements.xml -f debugserver_7s 查看权限 codesign -d --entitlements :- debugserver_7s codesign -d --entitlements - debugserver_7s
权限文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.backboardd.debugapplications</key> <true/> <key>com.apple.backboardd.launchapplications</key> <true/> <key>com.apple.springboard.debugapplications</key> <true/> <key>run-unsigned-code</key> <true/> <key>get-task-allow</key> <true/> <key>task_for_pid-allow</key> <true/> </dict> </plist>
0000000
开启端口转发
./tcprelay.py -i 192.168.0.119 -b 8192 -t 22:2222 8341:8341
ssh -v root@192.168.0.119 -p 2222
附加到被调试进程
debugserver *:8341 --attach Preferences
开启lldb
(lldb) platform select remote-ios
(lldb) process connect connect://192.168.0.119:1234
(lldb) po [[UIApp keyWindow] recursiveDescription]
Virtualbox虚拟机导入 macOS Catalina Final Version by Geekrar的vmdk
app store下载安装XCode
xcrun --sdk iphoneos --find clang /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang xcrun --sdk iphoneos --show-sdk-path /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
编译命令
clang -arch armv7s -mios-version-min=7.0 imei.im -o imei \ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk \ -framework Foundation -framework CoreTelephony
签名
codesign -s 'iPhone Develoer' ./path/to/binary
将运营商 ID 与 CarrierConfig 集成
从 Android 10 开始,运营商配置支持将运营商 ID 用作密钥,从 CarrierService 获取运营商专属配置。
将运营商 ID 与 CarrierConfig 集成具有以下优势:
将每个运营商的所有 MCC/MNC 对整合到一个位置,从而移除重复或不一致的数据。
为每个运营商创建规范标识符并消除歧义。
final CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
PersistableBundle b = configManager.getConfig();
b.putBoolean(KEY_PREFER_2G_BOOL, false);
v4.putBoolean(“prefer_2g_bool”, false);
v4.putBoolean(“carrier_settings_enable_bool”, true);
v4.putBoolean(“carrier_allow_turnoff_ims_bool”, false);
v4.putBoolean(“carrier_wfc_ims_available_bool”, true);
v4.putBoolean(“display_hd_audio_property_bool”, true);
v4.putBoolean(“editable_enhanced_4g_lte_bool”, true);
v4.putBoolean(“carrier_volte_available_bool”, true);
v4.putBoolean(“carrier_volte_provisioning_required_bool”, false);
v4.putBoolean(“carrier_volte_provisioned_bool”, true);
v4.putBoolean(“carrier_vt_available_bool”, true);
v4.putBoolean(“carrier_volte_tty_supported_bool”, false);
v4.putBoolean(“hide_enhanced_4g_lte_bool”, false);
v4.putBoolean(“carrier_wfc_supports_wifi_only_bool”, true);
v4.putBoolean(“allow_adding_apns_bool”, true);
v4.putBoolean(“apn_expand_bool”, true);
v4.putBoolean(“carrier_ims_gba_required_bool”, false);
v4.putBoolean(“require_entitlement_checks_bool”, false);
v4.putBoolean(“hide_ims_apn_bool”, false);
v4.putInt(“volte_replacement_rat_int”, 0);
v4.putBoolean(“carrier_use_ims_first_for_emergency_bool”, true);
v4.putBoolean(“auto_retry_enabled_bool”, true);
v4.putBoolean(“world_phone_bool”, true);
v4.putBoolean(“carrier_ut_provisioning_required_bool”, false);
v4.putBoolean(“carrier_supports_ss_over_ut_bool”, false);
v4.putBoolean(“carrier_volte_default_enabled_bool”, true);
v4.putBoolean(“show_ims_registration_status_bool”, true);
v4.putBoolean(“support_manage_ims_conference_call_bool”, true);
v4.putBoolean(“support_ims_conference_call_bool”, true);
v4.putBoolean(“support_video_conference_call_bool”, true);
v4.putBoolean(“enhanced_4g_lte_on_by_default_bool”, true);
v4.putBoolean(“editable_wfc_mode_bool”, true);
v4.putBoolean(“emergency_sms_support_bool”, false);
v4.putBoolean(“notify_handover_video_from_wifi_to_lte_bool”, true);
v4.putBoolean(“notify_handover_video_from_lte_to_wifi_bool”, true);
v4.putBoolean(“support_downgrade_vt_to_audio_bool”, true);
v4.putInt(“carrier_default_wfc_ims_mode_int”, 1);
v4.putInt(“carrier_default_wfc_ims_roaming_mode_int”, 1);
v4.putBoolean(“carrier_default_wfc_ims_enabled_bool”, true);
v4.putBoolean(“carrier_default_wfc_ims_roaming_enabled_bool”, true);
v4.putBoolean(“carrier_promote_wfc_on_call_fail_bool”, true);
v4.putBoolean(“carrier_volte_override_wfc_provisioning_bool”, true);
v4.putBoolean(“allow_emergency_video_calls_bool”, false);
v4.putBoolean(“editable_wfc_roaming_mode_bool”, true);
v4.putBoolean(“carrier_config_applied_bool”, true);
v4.putStringArray(“carrier_wlan_disallowed_apn_types_string_array”, new String[]{“”});
v4.putStringArray(“carrier_wwan_disallowed_apn_types_string_array”, new String[]{“”});
v4.putBoolean(“hide_preset_apn_details_bool”, false);
v4.putStringArray(“read_only_apn_types_string_array”, new String[]{“”});
v4.putStringArray(“read_only_apn_fields_string_array”, new String[]{“”});
v4.putStringArray(“apn_settings_default_apn_types_string_array”, new String[]{“”});
普通Java Card applet和Tookit applet的区别是,后者不直接处理APDU. 它只处理高层级的消息(事件)。
另外,后者一个方法(java method)的执行,能够跨越多个APDU(Fetch, Terminal Resposne等主动命令)。
并且,Tookiet applet 的触发,不会调用 select()方法,只会调用processTookit()
EVENT_EVENT_DOWNLOAD_CALL_DISCONNECTED EVENT_EVENT_DOWNLOAD_LOCATION_STATUS EVENT_EVENT_DOWNLOAD_DATA_AVAILABLE EVENT_EVENT_DOWNLOAD_ACCESS_TECHNOLOGY_CHANGE EVENT_UNRECOGNIZED_ENVELOPE
Java Card Tookit相关对象
1. ProactiveHandler
1) 在 Terminal Profile 命令被CAT运行环境处理之前, ProactiveHandler对象不可用。
2) 如果 ProactiveHandler对象 可用,它将一直保持可用,直到processToolkit()方法结束
3)ProactiveHandler不可用, 主动命令将被挂起
4) 调用 proHdlr.init()方法,将会清除 主动命令的内容,然后再初始化
在uicc初始化过程中 , 终端回发送 profile download命令给uicc
如果支持 s 级,只要 通过 modem接口 访问 CAT功能的已连接实体 连接/端口/改变profile ,都会发送profile download指令。
过程定义在 ETSI TS 102.221 (Smart Cards; UICC-Terminal interface;Physical and logical characteristics) 规范中。
这个过程让UICC知道 终端有哪些能力,然后UICC决定使用那些终端可以支持的CAT指令。
如果终端不发送profile download指令,那么UICC应该认为终端不支持CAT.
80 10 00 00 23
10
FF FF FF FF -7F 9F- 00- DF FF 00 00 1F E2 08 11 06
C7 C0 00 00 00 00 40 00 51 00 00 00 00 18 00 00
03 00 00
91 0E
1个字节(下载能力)
Call Control by NAA
USSD string data object support in Call Contrl by USIM
Timer expiration
SMS-PP data download
Menu selection
Cell Broadcatst data download
SMS-PP data download
Profile download
第2个字节
Display text
UCS2 Display suported
UCS2 Enctry supported
Call Control by NAA
MO short message control support
Call Control by NAA
Call Control by NAA
Command result
第3个字节(Proactive UICC)
Refresh
Polling Off
Poll Interval
Play Tone
More Time
Get Input
Get InKey
Display Text
第4个字节(Proactive UICC)
Provide Local Information (NMR) —此功能不支持
Provide Local Information(MCC, MNC, LAC, Cell Id, IMEI)
Set Up MENU
Set Up CALL
Send USSD
Send SS
Send Short Message with 3GPP SMS TPDU
Select Item
0111 1111
第5个字节(事件驱动信息)
Card reader status事件
Idle screen avaiable事件 (不支持)
User activity (不支持)
Location status
Call disconnected
Call connected
MT Call
Proactive UICC: Set UP Event List
1001 1111
第6字节(事件驱动信息扩展)
Language Selection
Broswer Termination( “ac”被支持)
Data avaiable
Channel status
Access Technolopy Change
Disaplay parameters changes
Local Connection
Network Search Mode Change
全不支持
第7个字节(为 class a的Multi card proactive commands)
Power On Card
Power Off Card
Perform Card APDU
Get Reader Status(card reader status)
Get Reader Status(card reader identifier)
RFU=0
第8个字节 (Proactive UICC)
Call Control by NAA (Network Access Application)
Setup Call
Run AT Command(也就是b class被支持 ) (此功能不支持)
Setup Idel Mode text
Get InKey
Proactive UICC: Provider Local Infromation(date/time/timezone)
Proactive UICC: Timer Management(get current value)
Proactive UICC: Timer Management(start/stop)
1101 1111
第9字节
Proactive UICC: Provide Local Information(Access Technology)
Proactive UICC: Lanch Browser( class “ab” 支持)
Proactive UICC: Language Notification
Proactive UICC: Provide Local Information (Timing Advance)
Proactive UICC: Provide Local Information (language)
Proactive UICC: Provide Local Information (NMR)
Send DTMF command
Display Text
第10字节 (软键盘支持)
RFU=0
RFU=0
RFU=0
RFU=0
RFU=0
RFU=0
Soft Key支持:Select Item
Soft Key支持: Setup Menu
第11字节(soft key info)
第12字节 (BIP proactive commands)
Proactive UICC: Declare Service (不支持)
Proactive UICC: Get Service Information (不支持)
Proactive UICC: Service Search (不支持)
Proactive UICC: Get Channel Status
Proactive UICC: Send Data
Proactive UICC: Receive Data
Proactive UICC: Close Channel
Proactive UICC: Open Channel
0001 1111
第13字节: (BIP支持的bearers)
b8-b6 = 终端支持的通道数
RS232
IrDA
Bluetooth
GPRS
CSD
1110 0010 也就是,支持的通道数为8, 仅支持GPRS
第14字节:(屏幕高度)
第15字节:(屏幕宽度)
第16字节: (屏幕效果)
第17字节: (BIP支持的传输接口/承载)
HSDPA
E-UTRAN
直接通信通道
UDP(UICC处于客户模式,本地连接)
TCP(UICC处于客户模式,本地连接)
TCP(UICC服务器模式)
UDP(UICC客户模式,远程连接)
TCP(UICC客户模式,远程连接)
第18字节:
Proactive UICC: Provide Local Information(Search Mode Change)
第19字节: TIA/EIA-136-270 设施
第20字节: 3GPP2 C.S0035-B CCAT
CDMA CSIM应用
第21字节: 浏览器能力
b8-b5 RFU=0
CHTML
HTML
XHMTL
WML
第35字节:
b8-b5 RFU=0
Refresh with “Application Update” mode
Data conection Status Change Event support-PDN Connection
Data conection Status Change Event support-PDP Connection
Proactive UICC: GET INPUT (Variable Time out)
80 12 00 00 0E
12
D0 (Proactive UICC command tag)
0C (command length)
81 (Command details tag) 03 01 (Command number) 05(SET UP EVENT LIST) 00 (Command Qualifier=RFU)
82 (Device identity tag)02 81 (UICC) 82(terminal)
99 (Event list tag) 01 03 (Location status)
90 00
80 14 00 00 0C
14
81 (Command details) 03 01 05(set up event) 00
02(Device identities)02 82(terminal) 81 (UICC)
83 (Result)01 00
90 00
表示 set up event list 命令,成功执行
参考:TS 102.223 第98页 Structure of TERMINAL RESPONSE
80 C2 00 00 17
C2
D6 (Event download)15
99 (Event list)01 03 (location status)
82 (Device identity)02 82 (terminal) 81 (uicc)
9B (Location status) 01 00 (Normal Service)
93 09
64 F0 00 70 CE (TAC) F1 41 38 1F(Cell Id)
91 12
80 12 00 00 12
12
D0 (Proactive UICC command )10
81 (Command details)03 01 (Command number) 21 (Command Type=display text) 80 ( 1000 0000)
82 (Device identity)02 81 02
8D (Text string) 05 48 65 6C 6C 6F
90 00
bit 8 = 1 wait for user to clear message
bit 1 = 0 normal priority
80 C2 00 00 17
C2
D6 15
99 01 03
82 02 82 81
9B 01 00
93 09
64 F0 (MCC) 00 (MNC) 70 CE(LAC/TAC) F1 45 28 1F (Cell Id)
90 00
80 14 00 00 0C
14
81 ( (Command details) 03 01 21(display tex) 80
82 (Device identities)02 82 81
83 (result)01 00
90 00
报告显示文字任务,成功执行
EVENT_PROFILE_DOWNLOAD 获取移动设备的能力
EVENT_STATUS_COMMAND 当移动设备份发送STATUS命令,得到触发
EVENT_UNRECOGNIZED_ENVELOPE 处理未定义的事件,将来升级用
EVENT_FORMATTED_SMS_PP_ENV 处理来自网络的SMS-PP消息
EVENT_FORMATEDD_SMS_PP_UPD
EVENT_UNFORMATTED_SMS_PP_ENV
EVENT_UNFORMATTED_SMS_PP_UPD
EVENT_UNFORMATTED_SMS_CB
EVENT_FORMATTED_SMS_CB
EVENT_FORMATTED_USSD
EVENT_UNFORMATTED_USSD
EVENT_TIMER_EXPIRATION
EVENT_CALL_CONTROL_BY_NAA
EVENT_MO_SHORT_MESSAGE_CONTROL_BY_NAA
EVENT_EVENT_DOWNLOAD_
_MT_CALL
_CALL_CONNNECTED
_CALL_DISCONNECTED
_LOCATION_STATUS
_USER_ACTIVITY
_IDEL_SCREEN_AVAILABLE
_CARD_READER_STATUS
_LANGUAGE_SELECTION
_BROWSER_TERMINATION
_DATA_AVAILABLE
_CHANNEL_STATUS
_ACCESS_TECHNOLOGY_CHANGE
_DISPLAY_PARAMETER_CHANGED
_LOCAL_CONNECTION
_NETWORK_SEARCH_MODE_CHANGE
_BROWSING_STATUS
_IWLAN_ACCESS_STATUS
EVENT_PROACTIVE_HANDLER_AVAILABLE
EVENT_EXTERNAL_FILE_UPDATE
EVENT_APPLICATION_DESELECT
EVENT_FIRST_COMMAND_AFTER_ATR
ETSI TS 102 241 : Smart cards, UICC Application Programming Interface (UICC API) for Java Card
3GPP TS 31.130 : (U)SIM Application Programming Interface,((U)SIM API) for Java Card
102 241 定义的包
uicc.access
访问UICC文件系统
uicc.access.fileadministration
管理UICC文件系统
uicc.system
允许建立 实现TLV handler借口的对象
uicc.toolkit
注册CAT框架时间, 处理TLV信息
按照 TS 102.223规范,发送 主动命令
31.130 定义的包
uicc.usim.access
访问 USIM/SIM中定义的文件
uicc.usim.toolkit
注册USAT/STK中定义的事件
处理TLV信息
按照 3GPP TS 31.111 和 3GPP TS 51.014 规范,发送主动命令
Card Application Toolkit (CAT) 和 USIM Application Toolkit
(USAT)
Card Application Toolkit (CAT) 定义在 ETSI TS 102 223
USIM Application Toolkit (USAT)定义在 3GPP TS 31.111.
平台到平台APDU通道仅应在逻辑通道0上建立,并且当平台到平台安全通道处于活动状态时,UICC应当拒绝任何其他逻辑通道上的APDU。 加密的APDU净荷中应该可以使用逻辑信道。
同时,“应用程序对应用程序-APDU安全”通道无法保护主动命令(根据标准在逻辑通道0上发送),因为它只能保护非0逻辑通道,即除逻辑通道0之外的任何逻辑通道。
Secure Element 的访问不能使用 逻辑通道0, 因为这是给电信应用(sim/usim app)使用的
CAT会话,起始于 TERMINAL PPROFILE命令,终止于 卡的复位/去激活
在开始CAT会话时, 卡执行下面的行为:
1. 它由任意一个注册了 TERMINAL PROFILE事件的 applet的触发。
2. 如果至少有一个菜单项目注册,并被一个可选中的Toolkit Applet启用, 它就发送一个 SET UP MENU 主动命令。
3. 如果至少一个EVENT_EVENT_DOWNLOAD_*被注册,它 发送 SET UP EVENT LIST主动命令
4. 如果至少有一个applet请求轮询 interval duration, 那么,他就发送 POLL INTERVAL主动命令。 这会让ME调整 空闲时 发送STATUS命令的间隔。
Toolkit Applet 比 普通Applet多了一些功能, 也就是实现了 uicc.toolkit.ToolkitInterface的一些接口。必须实现processToolkit()方法
当sim卡收到一个APDU时, 转换器 将 它转换成 对应的事件。
触发器(Triggering Entity)向 Toolkit Registry是否有Toolkit Applet注册到这个事件,然后通过调用 ToolkitInterface对象的processToolkit()方法来 触发所有注册了该事件的Toolkit Applets.
在普通applet和Toolkit Applet之间的区别是Tookit Applet不直接处理APDU
select()方法也不会启动。 因为 Toolkit Applet自己不会被选择。
实际上,
1. CAT运行环境,调用Toolkit Applet的getShareableInterfaceObject()方法
来 取得 ToolkitInterface对象的引用。
在Toolkit Applet的第1次触发前,调用此方法。
getShareableInterfaceObject()的AID参数被设置为null, 字节参数被设置为 1
2.CAT运行环境,调用 ToolkitInterface对象的processToolkit() 来触发Applet
在Applet被触发时,如果EnvelopeHandler可用,用它来获取事件的细节。
如果 ProactiveHandler 可用,它可以请求CAT运行环境去发送几个主动命令,并通过ProactiveHandler来分析 UE(Terminall Response)响应。
对于某些特定的事件,EnvelopeResponseHandler也可用来传输applet对终端命令的响应。