在调试某App时启动失败,想必这定是反调试了窝。看了一些反反调试的例子:https://iosre.com/t/topic/8179 ,找到入口函数处断点,往下一步一步调试看看是哪一步退出的,结果入口都没进来就退出了!
还不行?猜测应该是执行 main 前加载 dylib 检测调试退出了,用 otool -l -V 某.app/Contents/MacOS/foo
命令查看加载的 dylib,出了系统库外就剩下 Sparkle(一个开源的更新app的框架)......
习惯性地打开 "控制台" 查看日志,在启动失败时打印错误日志:
macOSTaskPolicy: (com.apple.debugserver) may not get the task control port of (App) (pid: 40494): (App) is hardened, (App) doesn't have get-task-allow, (com.apple.debugserver) is a declared debugger(com.apple.debugserver) is not a declared read-only debugger
开发阶段是默认打开 get-task-allow
的权限属性选项就可以用来调试,编译release
时就关闭此值。那么现在的问题就变成如何添加 get-task-allow
选项并设为true
,步骤如下:
ldid -e Some.app/Contents/MacOS/foo >> entitlements.xml
导出 entitlements.xml
<key>com.apple.security.get-task-allow</key><true/>
添加选项:ldid -Sentitlements.xml 某.app/Contents/MacOS/foo
重新设置