前言

在调试某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,步骤如下:

  1. ldid -e Some.app/Contents/MacOS/foo >> entitlements.xml 导出 entitlements.xml
  2. <key>com.apple.security.get-task-allow</key><true/> 添加选项:

Untitled

  1. ldid -Sentitlements.xml 某.app/Contents/MacOS/foo 重新设置
  2. 调试成功

Untitled

参考文章


Powered by Kali-Team