使用开发证书撤销appstore导出的IPA

时间:2017-08-01 08:20:58

标签: ios xcode code-signing provisioning-profile entitlements

问题

是否可以使用开发证书和配置文件重新签名/配置为AppStore导出的IPA?

我可以做实际的辞职,并且在手动验证时看起来很好,但是我尝试使用的任何应用程序都会在启动时崩溃。我并没有试图让从AppStore下载的应用程序辞职,这些是我计算机上构建的应用程序。

任何流行的工具似乎都没有做到这一点。有没有人把它拉下来或者出于某种原因这是不可能的?

首饰

在设备日志中,我没有看到应用程序进程本身报告的任何内容,因此操作系统必须在启动之前将其杀死。我确实看到了这个:

securityd[101] <Notice>: cert[0]: CheckLeafMarkerOid =(leaf)[]> 0
securityd[101] <Notice>: cert[0]: SubjectCommonName =(leaf)[]> 0
securityd[101] <Notice>: cert[0]: IssuerCommonName =(path)[]> 0
amfid(Security)[196] <Notice>:  [leaf CheckLeafMarkerOid IssuerCommonName SubjectCommonName]
amfid(libmis.dylib)[196] <Info>: Blacklist does not exist.
amfid(libmis.dylib)[196] <Info>: Using empty blacklist.
amfid(libmis.dylib)[196] <Info>: CreateMISAuthListWithStream: open stream failed (may be non-existing)
amfid(libmis.dylib)[196] <Info>: CreateMISAuthListWithStream: creating empty auth list
assertiond[66] <Notice>: Unable to obtain a task name port right for pid 1683: (os/kern) failure (5)
SpringBoard(FrontBoard)[57] <Error>: Unable to register for exec notifications: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to get short BSD proc info for 1683: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to get proc info for 1683: No such process
SpringBoard(BaseBoard)[57] <Error>: Unable to obtain a task name port right for pid 1683: (os/kern) failure (0x5)
SpringBoard(BaseBoard)[57] <Error>: Unable to get short BSD proc info for 1683: No such process
SpringBoard(FrontBoard)[57] <Error>: Unable to obtain a process handle for <FBApplicationProcess: 0x10bc26cd0; com.company.product.name; pid: 1683>

这似乎表明权利存在问题。但是,当我从我安装的IPA手动打印它们(/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i "$1"/embedded.mobileprovision) > entitlements.plist )时,我有:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>application-identifier</key>
        <string>TEAMID.*</string>
        <key>com.apple.developer.default-data-protection</key>
        <string>NSFileProtectionComplete</string>
        <key>com.apple.developer.team-identifier</key>
        <string>TEAMID</string>
        <key>get-task-allow</key>
        <true/>
        <key>keychain-access-groups</key>
        <array>
                <string>TEAMID.*</string>
        </array>
</dict>
</plist>

这清楚地表明get-task-allow有权 true

工具

无论我尝试哪种工具,我都会得到相同的结果,例如

类似问题

更新1

(对@Yoshkebab的反应)

otool的输出表明二进制文件未加密: otool -l App/Payload/App.app/App | grep -A 4 -i encrypt

          cmd LC_ENCRYPTION_INFO
      cmdsize 20
     cryptoff 0
    cryptsize 0
      cryptid 0
--
          cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
     cryptoff 0
    cryptsize 0
      cryptid 0

但是,例如Hopper无法拆解它...有没有引用Apple在Xcode中应用加密?这表明他们在用户的系统上有一把钥匙?此外,我没有看到表明这一点的构建步骤(代码签名只是添加签名,没有?)

Clutch未能看到我的应用程序而且Stefan Esser的dumpdecrypted库不起作用,因为应用程序立即崩溃我怀疑(我的设置正常,因为它适用于其他应用程序)。

1 个答案:

答案 0 :(得分:1)

AppStore签名的应用程序不仅由开发人员的证书签名,而且二进制文件也由Apple的私钥加密。 因此,您可以辞退应用程序,但除非您解密二进制文件,否则您将无法运行它们。 查看二进制文件的LC_ENCRYPTION_INFO加载命令(最简单的方法是使用MachoView),如果看到标记Crypt ID!= 0,则二进制文件已加密。

假设它是,你仍然可以这样做,这有点乏味,你需要安装了应用程序的监狱设备。

  1. 使用SSH连接到您的设备。使用gandalf
  2. 进行此操作的最简单方法
  3. 获取Clutch并将其安装到您的设备上 - 按照他们的说明操作(我发现编译它的最简单方法是更改​​包名称)
  4. 将解密的应用转储到新的IPA中(离合器-d&#34; YOUR_PACKAGE_ID&#34;)
  5. 现在你有一个可以辞职的解密IPA