题
@H_403_7@
@H_403_7@是否可以使用开发证书和配置文件重新签名/提供为AppStore导出的IPA?
@H_403_7@我可以做实际的辞职,并且在手动验证时看起来很好,但是我尝试使用的任何应用程序都会在启动时崩溃.我不是要试图从AppStore下载一个应用程序,这些是我的计算机上构建的应用程序.
@H_403_7@没有一种流行的工具似乎也做得对.有没有人把它拉下来或者由于某种原因它是不可能的?
@H_403_7@发现
@H_403_7@在设备日志中,我没有看到应用程序进程本身报告的任何内容,因此操作系统必须在启动之前将其杀死.我确实看到了这个:
@H_403_7@
)从我安装的IPA我有: @H_403_7@
> https://github.com/nowsecure/node-applesign
> https://github.com/fastlane/fastlane/blob/master/sigh/lib/assets/resign.sh @H_403_7@类似的问题 @H_403_7@> can we resign the appstore build with our development certificates?简单没有答案,似乎不正确,因为我能够在没有警告或错误的情况下执行实际的辞职操作.
> Resign iOS App from a distribution identity to a developer identity显示如何验证和/或调整已辞职的IPA中的最终权利.
> iOS resign IPA from appstore with developer profile问题比较老,但其中一个评论者最终报告了相同的观察行为:“但它不能正常运行,它闪回.直到现在我都不知道它”. @H_403_7@更新1 @H_403_7@(对@Yoshkebab的反应) @H_403_7@输出otool表示二进制文件未加密:
otool -l App / Payload / App.app / App | grep -A 4 -i加密: @H_403_7@
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>@H_403_7@这似乎表明权利问题.但是,当我手动打印它们时(/usr/libexec / PlistBuddy -x -c“print:Entitlements”/ dev / stdin<<< $(security cms -D -i“$1”/embedded.mobileprovision)> ; entitlements.plist
)从我安装的IPA我有: @H_403_7@
<?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>@H_403_7@这清楚地表明get-task-allow权利是真的. @H_403_7@工具 @H_403_7@无论我尝试哪种工具,我都会得到相同的结果,例如 @H_403_7@> https://dantheman827.github.io/ios-app-signer/
> https://github.com/nowsecure/node-applesign
> https://github.com/fastlane/fastlane/blob/master/sigh/lib/assets/resign.sh @H_403_7@类似的问题 @H_403_7@> can we resign the appstore build with our development certificates?简单没有答案,似乎不正确,因为我能够在没有警告或错误的情况下执行实际的辞职操作.
> Resign iOS App from a distribution identity to a developer identity显示如何验证和/或调整已辞职的IPA中的最终权利.
> iOS resign IPA from appstore with developer profile问题比较老,但其中一个评论者最终报告了相同的观察行为:“但它不能正常运行,它闪回.直到现在我都不知道它”. @H_403_7@更新1 @H_403_7@(对@Yoshkebab的反应) @H_403_7@输出otool表示二进制文件未加密:
otool -l App / Payload / App.app / App | grep -A 4 -i加密: @H_403_7@
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@H_403_7@但是例如Hopper无法拆解它…有没有引用Apple在Xcode中应用加密?这表明他们在用户的系统上有一把钥匙?此外,我没有看到表明这一点的构建步骤(codesign只是添加签名,不?) @H_403_7@Clutch无法看到我的应用程序,并且Stefan Esser的dumpdecrypted库不起作用,因为应用程序立即崩溃我怀疑(我的设置正常,因为它适用于其他应用程序).
解决方法
AppStore签名的应用程序不仅由开发人员的证书签名,而且二进制文件也由Apple的私钥加密.
因此,您可以重新签名应用程序,但除非您解密二进制文件,否则您将无法运行它们.
查看二进制文件的LC_ENCRYPTION_INFO加载命令(最简单的方法是使用 MachoView),如果看到标志Crypt ID!= 0,则二进制文件被加密. @H_403_7@ @H_403_7@假设它是,你仍然可以这样做,这有点乏味,你需要一个安装了App的监狱设备. @H_403_7@>使用SSH连接到您的设备.使用gandalf最简单的方法
>获取Clutch并将其安装在您的设备上 – 按照他们的说明操作(我发现编译它的最简单方法是更改包名称)
>将解密的应用转储到新的IPA(离合器-d“YOUR_PACKAGE_ID”) @H_403_7@现在你有一个解密的IPA,你可以辞职
因此,您可以重新签名应用程序,但除非您解密二进制文件,否则您将无法运行它们.
查看二进制文件的LC_ENCRYPTION_INFO加载命令(最简单的方法是使用 MachoView),如果看到标志Crypt ID!= 0,则二进制文件被加密. @H_403_7@ @H_403_7@假设它是,你仍然可以这样做,这有点乏味,你需要一个安装了App的监狱设备. @H_403_7@>使用SSH连接到您的设备.使用gandalf最简单的方法
>获取Clutch并将其安装在您的设备上 – 按照他们的说明操作(我发现编译它的最简单方法是更改包名称)
>将解密的应用转储到新的IPA(离合器-d“YOUR_PACKAGE_ID”) @H_403_7@现在你有一个解密的IPA,你可以辞职