新手求助,Mac App 重新签名后闪退

花了几天时间逆向某个最近很火的浏览器 arc.net,设计师圈子几乎都在讨论。
目前是内测阶段,只有少数人拿到内测资格,看着让我非常羡慕。
而我自己本身是个设计师,非常想踊跃一试,几经辛苦问到一个已经拿到资格的朋友要了一个包,从包里的 info.plist 的检查更新 URL 拿到下载链接:
https://releases.arc.net/pull-request/7284/Arc-0.99.0-24683.zip
App 是用 SwiftUI 写的,分析起来有点恶心。
使用 Hopper 花了两天时间终于成功绕过了登录注册界面。
然后最后一步我按照以往经验重新签名:codesign --force --sign - Arc.app
结果打开直接闪退,第一次闪退会弹出系统的 Keychain 钥匙串访问请求,目前怀疑跟它使用 Firebase 有关,就算不对 App 做任何修改直接重新签名也会这样,通过分析也没有发现内置检测程序签名的函数。
以前逆向过的 App 都没遇到过这个问题,网上也找不到什么有用的信息,只好请教一下各位前辈,实在不想让我这两天时间的成果白白浪废了。

2 个赞

绕过了哪些函数?

你可以把你已经找到的信息发出来,这样感兴趣的朋友可以在你的基础上继续研究

检查一下是否有 Frameworks 有的话加一个 --deep,如果发生闪退使用 Console.app 查看错误并贴出来

1 个赞

程序启动时会在 Application Support 读取 StorableAuthState.json 来判断登录状态。
其实这跟问题关系不大,关键是就算不做任何修改,重签名就会闪退

试过加了 deep 也是一样。
Console 里也只有没有帮助的错误内容:An uncaught exception was raised
另外,用 Hopper 调试重签名后的 App,最后一个函数也只是 Sentry 的发送崩溃报告函数,往上追踪也没有任何跟检查 Codesign 有关的函数。处理崩溃报告的前面就是 NSApplication.run 了

听起来跟签名证书有关系,在iOS上对一些应用砸壳后进行签名也会出现崩溃(比如appgroup, sirikit, icloud), mac上可能也类似,ent里确实有keychain,icloud,appgroup的东西,也许需要hook下这方面的一些东西?

<?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>com.apple.application-identifier</key>
	<string>S6N382Y83G.company.thebrowser.Browser</string>
	<key>com.apple.developer.aps-environment</key>
	<string>production</string>
	<key>com.apple.developer.icloud-container-environment</key>
	<string>Production</string>
	<key>com.apple.developer.icloud-container-identifiers</key>
	<array>
		<string>iCloud.net.arc.sidebar</string>
	</array>
	<key>com.apple.developer.icloud-services</key>
	<array>
		<string>CloudKit</string>
	</array>
	<key>com.apple.developer.team-identifier</key>
	<string>S6N382Y83G</string>
	<key>com.apple.security.device.audio-input</key>
	<true/>
	<key>com.apple.security.device.camera</key>
	<true/>
	<key>com.apple.security.personal-information.location</key>
	<true/>
	<key>keychain-access-groups</key>
	<array>
		<string>S6N382Y83G.company.thebrowser.browser.webauthn</string>
	</array>
</dict>
</plist>

我也怀疑跟 keychain-access-groups 有关,但是我不知道要怎么验证和推理。网上找到的资料都是跟逆向无关的,好想哭

试过这个没有?

如果这个弹框指的是保留 Invalid Signature 的话,我都试过了不行 :frowning:

2 个赞

这个是Developer ID 签名,经过苹果的服务器处理的,我测试过一个产品,直接% csrutil disable 就pass 签名,跑起来玩了。
参考
https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution

1 个赞

跟 SIP 没关系,我一直都是关闭的