解决 iOS 12.4 Killed: 9 的问题

解决 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 如下:





	com.apple.backboardd.debugapplications
	
	com.apple.backboardd.launchapplications
	
	com.apple.diagnosticd.diagnostic
	
	com.apple.frontboard.debugapplications
	
	com.apple.frontboard.launchapplications
	
	com.apple.security.network.client
	
	com.apple.security.network.server
	
	com.apple.springboard.debugapplications
	
	com.apple.system-task-ports
	
	get-task-allow
	
	platform-application
	
	run-unsigned-code
	
	task_for_pid-allow
	


签名之后再次上传到 /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 导出查看比之前的多了两条,不过添加上这两条重新签名依然是不行。

com.apple.private.skip-library-validation

com.apple.private.security.no-container

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

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

解决 iOS 12.4 Killed: 9 的问题_第1张图片

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

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

原文地址:https://www.ioshacker.net/thread-187-1-1.html

你可能感兴趣的:(iOS/MacOSX/移动安全)