我有一些具有多个实现的加密代码,根据其运行的CPU的功能,在运行时选择哪个实现。到目前为止,移植它一直很简单,Windows,Linux和Android很容易。
但是在iOS中,这似乎并不容易。X86 CPU具有cpuid
指令以检测功能,即使是从用户模式中,ARM等效也具有特权。在没有OS合作的情况下,无法在ARM上检测CPU功能。
在Windows中,IsProcessorFeaturePresent
用于检测ARM CPU功能。在Linux上,/proc/cpuinfo
是必经之路。Android具有cpufeatures
库(/proc/cpuinfo
仍然可以使用(。MAC OS具有sysctlbyname
,带有hw.optional.*
。
但是iOS呢?iOS内核具有像Mac OS一样的hw.optional.*
,但它在iOS 10中被锁定。(因此,我的问题并不是这种情况的重复,因为这种情况发生了变化。源网站运行一个自动化过程,从他们公开发出的操作系统来擦洗所有特定ARM的代码,以使越狱者更加努力。
您可以在iOS安全指南
上查看显然,如果您可以获取CPU系列名称,则可以推断出哪些加密组件以及它如何从文档中工作。
您可能会注意到某些设备具有安全性:
安全的飞地是Apple T1中制造的协处理器 S2,Apple S3,Apple A7或以后的A系列处理器。
第6页
您可以推断出任何较旧的CPU版本都没有。
每个iOS设备都有专用的AES-256加密引擎 闪存存储与主系统内存之间的DMA路径 [...]
在T1,S2,S3和A9或更高版本A系列处理器上,每个安全飞地 生成自己的UID(唯一ID(。
第12页
访问加密组件的方法将取决于您要获得访问的数据或存储(本地数据存储/SYNC/HOME DATA/APP/SIRI/ICLOUD/SECURE NOTE/SECURE NOTE/keybag/payment/applepay/applepay/vpn/vpn/wifi密码/sso/airdrop/etc ...(
您是否可以在用例中确定需要访问的加密部分的哪一部分?
您也可以在这里和这里查看以获取有关iOS本机安全和密码学API的其他信息。
iOS阻止某些硬件信息的原因非常简单。请阅读有关Apple A11处理器的信息。里面有很多东西,也永远不会记录下来。
Apple根本不希望开发人员意识到它并使用它。我不会期望在这个主题上取得任何进展。
此刻的唯一前进是绕过操作系统并直接与硬件对话。您会惊讶于里面的东西以及它响应的速度!