构建加密的 Mach-o 文件
Build Mach-o file as encrypted
我想知道是否可以构建一个 Mach-O 文件,或者修改现有的文件然后重新签名以便加密代码部分。
我知道有一个名为 cryptid
的标志代表加密类型(分别为加载命令 LC_ENCRYPTION_INFO_32/64 的值 `EncryptionInfo32/64)
但是,我在 Xcode 的任何地方都找不到它是如何完成的。
编辑:我很清楚它可以在 iOS 中完成,但我的问题与 macOS 有关,该平台是否支持 Mach-O 文件中的这种加密功能?
EDIT2:所以在阅读了另一个问题之后,我明白了整个加密的事情只能由 appStore 完成,这是在 Mach-O 文件已经离开开发人员方面之后。所以在这种情况下,Apple 实际上控制了 encryption/decryption algo+key 并且它完全不在开发人员的手中,对吧?
另外,由于 Mach-O 在加密过程中被更改,所以谁负责重新签署应用程序?
谢谢
不,你不能这样做。
将 LC_ENCRYPTION_INFO 添加到您的二进制文件的唯一“支持”方式是通过 iOS App Store 分发。 Apple 检查您的二进制文件是否符合他们的规则,然后加密二进制文件并重新签名。
这一切都由 Apple 专有的 DRM 堆栈“FairPlay”提供支持。由于代码被严重混淆,因此对它知之甚少,但人们普遍认为它是建立在 Apple 定制硬件 AES 引擎的功能之上的。鉴于此,您自己创建加密器可能可行也可能不可行,但即使要找出答案也需要大量的逆向工程工作。
此外,整个 FairPlay 堆栈仅存在于 Apple 自己的芯片上。它确实在 M1 Mac 上可用,因为您可以安装现成的 iOS 应用程序(只要您启用 SIP),但它在 Intel Mac 上根本不可用(相关的 kexts 是 IOTextEncryptionFamily.kext
和 FairPlayIOKit.kext
,后者被混淆了)。
我想知道是否可以构建一个 Mach-O 文件,或者修改现有的文件然后重新签名以便加密代码部分。
我知道有一个名为 cryptid
的标志代表加密类型(分别为加载命令 LC_ENCRYPTION_INFO_32/64 的值 `EncryptionInfo32/64)
但是,我在 Xcode 的任何地方都找不到它是如何完成的。
编辑:我很清楚它可以在 iOS 中完成,但我的问题与 macOS 有关,该平台是否支持 Mach-O 文件中的这种加密功能?
EDIT2:所以在阅读了另一个问题之后,我明白了整个加密的事情只能由 appStore 完成,这是在 Mach-O 文件已经离开开发人员方面之后。所以在这种情况下,Apple 实际上控制了 encryption/decryption algo+key 并且它完全不在开发人员的手中,对吧? 另外,由于 Mach-O 在加密过程中被更改,所以谁负责重新签署应用程序?
谢谢
不,你不能这样做。
将 LC_ENCRYPTION_INFO 添加到您的二进制文件的唯一“支持”方式是通过 iOS App Store 分发。 Apple 检查您的二进制文件是否符合他们的规则,然后加密二进制文件并重新签名。
这一切都由 Apple 专有的 DRM 堆栈“FairPlay”提供支持。由于代码被严重混淆,因此对它知之甚少,但人们普遍认为它是建立在 Apple 定制硬件 AES 引擎的功能之上的。鉴于此,您自己创建加密器可能可行也可能不可行,但即使要找出答案也需要大量的逆向工程工作。
此外,整个 FairPlay 堆栈仅存在于 Apple 自己的芯片上。它确实在 M1 Mac 上可用,因为您可以安装现成的 iOS 应用程序(只要您启用 SIP),但它在 Intel Mac 上根本不可用(相关的 kexts 是 IOTextEncryptionFamily.kext
和 FairPlayIOKit.kext
,后者被混淆了)。