最新消息:本站技术交流 QQ 群:28124927

[iOS Hacker] 解决 iOS 12.4 Killed: 9 的问题

iOS/MacOSX/移动安全 exchen 5216浏览

随着 iOS 12.4 的越狱出来之后,不少人的手机都升级到 12.4,最近我也在使用 12.4 做调试机,一开始 debugserver 也遇到一些坑,不过好在都解决了。最后剩下一个很头疼的问题,就是自己写的 App 上传到手机 /Applications 目录下,发现既然不能运行,提示 Killed: 9。

按照老套路,使用 codesign 或者 ldid 签名:

由于 iOS 12 需要添加 platform-application,和签名 debugserver 一样,完整的 ent.plist 如下:

签名之后再次上传到 /Applications,运行还是提示 Killed 9,尝试 setuid(0); setgid(0);,还有设置文件权限也都不管用,都是提示 Killed 9

不过发现之前写的插件打包成 deb 可以在 iOS 12.4 运行,文件也是会释放到 /Applications 目录,于是尝试把 test12.app 制作成 deb 包,上传到 /var/mobile/test12.deb,使用 dpkg 命令安装,安装成功后发现果然是可以执行。

使用 ldid -e /Applications/test12.app/test12 >> /var/mobile/test12.plist,将 entitlement 导出查看比之前的多了两条,不过添加上这两条重新签名依然是不行。

思考一个问题,为什么手动上传的文件不能运行,而制作成 deb 包安装就可以呢?这两者有什么区别吗?尝试对 deb 安装后的文件静态修改,插入 LoadCommand 加载动态库,发现只要静态改过可执行文件,运行就提示 Killed 9,但是改过的文件打包成 deb,发现又可以运行了。

看样子是因为 dpkg 做了什么特殊的操作。在手机上找到 /usr/bin/dpkg,载入 IDA 静态分析,在 dir_sign_file 函数中找到了一条和签名相关的命令,猜测可能是和这个命令有关系,在释放完文件后,执行了签名命令。

最终得到的签名命令是这个,使用下面的命令对文件进行签名即可解决 Killed 9 的问题。

更多干货分享,请关注公众号,会第一时间推送的。

转载请注明:exchen's blog » [iOS Hacker] 解决 iOS 12.4 Killed: 9 的问题