Jas*_*son 10 android uniqueidentifier nfc android-4.4-kitkat hce
Android 4.4引入了基于主机的卡仿真(HCE).如您所知,所有NFC卡都带有固定卡ID(NfcAdapter.EXTRA_ID).
我的办公室门禁通常会检测授权的NFC卡ID.将手机刷到KitKat后,我尝试使用门禁阅读器扫描手机.但是每当屏幕关闭再打开时,我会得到一个不同的卡ID.
我确实尝试打开手机屏幕,并将模拟卡ID注册到门禁系统.它设法授予打开门的权限.但是,在屏幕关闭再打开后,这将无效.
自KitKat引入HCE模式以来,我一直在尝试使用手机模拟门禁卡.
任何使手机模拟卡ID固定的想法?
cha*_*rno 14
这是(至少在官方API下)不可能:
在交换的第一部分,HCE设备将呈现其UID; 应假设HCE设备具有随机UID.这意味着在每次点击时,呈现给阅读器的UID将是随机生成的UID.因此,NFC读取器不应该依赖于HCE设备的UID作为认证或识别的形式.
(http://developer.android.com/guide/topics/connectivity/nfc/hce.html#ProtocolParams)
至少Broadcom的NFC控制器(例如在Nexus 5中使用)支持为防冲突标识符(UID),ATQA和SAK字节设置任意值.但是,没有API可以更改它们,因此唯一的方法是修改libnfc-nci库.
NFC-A的相关代码位于文件nfa_dm_discover.c中(从第322行开始):
UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, 0x04);
UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, platform);
UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
UINT8_TO_STREAM (p, sens_info);
Run Code Online (Sandbox Code Playgroud)
此代码当前设置ATQA(值平台和0x04的组合)和SAK字节(sens_info的值).
要更改NFC-A防冲突期间使用的UID,您可以添加附加参数NFC_PMID_LA_NFCID1:
UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1);
UINT8_TO_STREAM (p, 4); // length of NFCID1 in bytes
UINT8_TO_STREAM (p, 0x12);
UINT8_TO_STREAM (p, 0x34);
UINT8_TO_STREAM (p, 0x56);
UINT8_TO_STREAM (p, 0x78);
Run Code Online (Sandbox Code Playgroud)
你可以找到libnfc-NCI的更多的定制版本在这里(仍然工作在进步,虽然).
| 归档时间: |
|
| 查看次数: |
16405 次 |
| 最近记录: |