我想知道是否有可能构建一个Mach-O文件,或者修改现有的文件,然后对其重新签名,以便对代码部分进行加密。
我知道有一个名为cryptid的标志来表示加密类型(分别通过load命令LC_ encryption _INFO_32/64的值`EncryptionInfo32/64 )
但是,我在Xcode中找不到它是如何实现的。
编辑:我很清楚它可以在iOS中完成,但我的问题与macOS有关,该平台在Mach-O文件中支持此加密功能吗?
EDIT2:所以在读完另一个问题后,我了解到整个加密工作只能由appStore完成,这是在开发人员已经离开Mach-O文件之后。因此,在这种情况下,苹果实际上控制了加密/解密algo+key,它完全不在开发人员的手中,对吧?此外,由于Mach-O在加密过程中被更改,那么谁负责对应用程序进行重新签名?
谢谢
发布于 2021-11-17 22:44:10
不,您不能这样做。
将LC_ENCRYPTION_INFO添加到您的二进制文件中的唯一“受支持”的方法是通过iOS应用商店分发。苹果会检查你的二进制文件是否符合他们的规则,然后对二进制文件进行加密并重新签名。
这一切都得到了"FairPlay“的支持,这是苹果公司专有的数字版权管理堆栈。人们对它知之甚少,因为它的代码非常模糊,但人们普遍认为它是建立在苹果定制硬件AES引擎的功能上的。鉴于此,您自己创建一个加密器可能是可能的,也可能是不可能的,但这将需要巨大的逆向工程努力才能找到答案。
此外,整个FairPlay堆栈只存在于苹果自己的芯片上。它确实可以在SIP上使用,因为你可以安装现成的iOS应用程序(只要你启用了M1 ),但在Intel上根本不能使用它(相关的kext是IOTextEncryptionFamily.kext和FairPlayIOKit.kext,后者是模糊的)。
https://stackoverflow.com/questions/69971972
复制相似问题