首页
社区
课程
招聘
[原创] 解决 iOS 12.4 Killed: 9 的问题
发表于: 2019-9-21 22:08 12245

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

2019-9-21 22:08
12245

解决 iOS 12.4 Killed: 9 的问题

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

 

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

codesign -s - --entitlements ent.plist -f test12

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

<?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.backboardd.debugapplications</key>
    <true/>
    <key>com.apple.backboardd.launchapplications</key>
    <true/>
    <key>com.apple.diagnosticd.diagnostic</key>
    <true/>
    <key>com.apple.frontboard.debugapplications</key>
    <true/>
    <key>com.apple.frontboard.launchapplications</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>com.apple.system-task-ports</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>platform-application</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
</dict>
</plist>

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

chown root:wheel test12
chmod u+s test12

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

 dpkg -i /var/mobile/test12.deb
 uicache

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

<key>com.apple.private.skip-library-validation</key>
<true/>
<key>com.apple.private.security.no-container</key>
<true/>

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

 

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

 

 

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

/usr/bin/ldid -P -K/usr/share/jailbreak/signcert.p12 -S/usr/share/entitlements/global.xml -M /Applications/test12.app/test12

微信扫一扫关注公众号,更多技术干货,会在公众号上第一时间推送。

 


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 573
活跃值: (1009)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
Mark, 解决了 困扰我的一个问题。
2020-7-30 16:07
0
游客
登录 | 注册 方可回帖
返回
//