是否有用于检测iOS上的CPU功能的API?

时间:2017-04-21 08:08:17

标签: ios arm neon arm64 cpuid

我有一些具有多个实现的加密代码,根据运行的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的sysctlbynamehw.optional.*

但iOS呢? iOS内核与Mac OS一样hw.optional.*,但在iOS 10中为locked down。(因此,我的问题不是this one的重复,因为情况已经发生变化。)此外,获取这些列表似乎很难 - Apple的开源网站运行一个自动化流程,从公开发布的操作系统源中清除所有特定于ARM的代码,以使越狱者更加努力。

3 个答案:

答案 0 :(得分:0)

您可以查看iOS Security Guide的商家

显然,如果您可以获得CPU系列名称,您还可以从documentation.

中推断出哪个加密组件及其工作原理。

您可能会注意到某些设备有安全区:

  

Secure Enclave是一款在Apple T1 Apple中制造的协处理器   S2,Apple S3,Apple A7或更高版本的A系列处理器。

     

第6页

你可以推断出任何旧的CPU版本都没有。

  

每个iOS设备都内置了专用的AES-256加密引擎   闪存存储器和主系统存储器之间的DMA路径   [...]

     

在T1,S2,S3和A9或更高版本的A系列处理器上,每个Secure Enclave   生成自己的UID(唯一ID)。

     

第12页

访问加密组件的方法取决于您可以访问哪种数据或存储(本地数据存储/同步/家庭数据/ app / siri / icloud / secure note / keybag / payment / applepay / vpn / wifi密码/ SSO /空投/等...)

您能否确定在您的用例中需要访问哪个加密部分?

您还可以查看herehere以获取有关iOS本机安全和加密API的其他信息。

答案 1 :(得分:-1)

iOS阻止某些硬件信息的原因非常简单。请阅读Apple A11 processor。其中有很多东西,也有东西,永远不会被记录下来。

Apple根本不希望开发人员意识到并使用它。我不希望在这个主题上取得任何进展。

此时唯一的出路是绕过操作系统并直接与硬件对话。你会惊讶于里面的东西以及它的响应速度!

答案 2 :(得分:-2)

不,那是因为每个应用程序都在一个单独的容器中运行。使用沙盒原则是因为Apples的理念是每个应用程序都必须拥有一个非常封闭的生态系统。他们唯一允许的是使用外部服务,他们非常谨慎地控制和维护。