Quantcast
Channel: 睿论坛 - 最新话题
Viewing all articles
Browse latest Browse all 5732

iOS12 非官方重签名工具研究遇到问题,想请教一下同道中人

$
0
0

@builder wrote:

目的:实现非官方codesign工具,能在linux环境下正常签名app,并且在非越狱的设备上安装运行。

ios12之前的工具有: ldidisignjtool 、以及本人用C++参考前面的工具实现了一个集成重签名和注入的工具

但是,现在以上的工具以及我能找到的所有第三方工具中没有一个可以通过ios12的签名校验。在这里我将自己研究的内容简单分享一下:

  1. codesign签名段数据简介
    简单来说就是由一个“索引块”和多个“功能块”组成,每个“功能块”表示某一种用途。
    –SuperBlob(索引)
    –CodeDirectory(程序的bundle id,各个数字签名)
    –Requirements(这里应该就是苹果文档里对应的internal requirements,各个requirement使用codesign requirement language表示,最终内容是text->binary的形式,即compiled后的内容)
    –Entitlements(这里就是entitlement文件了)
    Certificates (将CodeDirectory的数据作为数据源进行非对称加密后的密文)

  2. 官方文档收集
    CodeSigningGuide
    codesign官方源码

  3. 第三方文档参考
    在iOS12中,内核增加了CMS(Cryptographic Message Syntax)校验,而业界常用的自签名工具ldid以及jtool中CMS都是为空的,导致上述解决方案失效。同时内核增加了CoreTrust模块用于对抗hardcoded证书,因此要伪造签名并通过苹果校验的难度大大提高。

  4. 我的问题
    (1) CMS是如何在codesign的过程中添加的?添加的什么信息?与mobileprovision是否有关系?
    (2) 苹果的openssl采用的是自己开发的LibreSSL,和标准的openssl有差异,这种差异会不会导致触发ios12的检测机制从而判断为非官方codesign?
    (3) 能否实现非官方的能在linux环境下运行的兼容ios12的codesign?

  5. 我目前的研究进展

  • 从二进制mach-o文件的格式来讲,已经完全实现除了Certificates段以外的与官方codesign所有信息的匹配;
  • 而老版本的官方codesign签出来的app是可以通过ios12校验的;
  • 剩下唯一需要研究的就是苹果官方的LibreSSL是如何将CMS信息添加入Certificates段。

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 5732

Latest Images

Trending Articles



Latest Images