【问题标题】:iOS application running as root refuses to close以root身份运行的iOS应用程序拒绝关闭
【发布时间】:2014-07-12 18:30:50
【问题描述】:

我有一个越狱应用程序需要以 root 身份运行,所以在 main 函数的开头,我调用 setuid(0);当我想通过任务切换器终止应用程序时,就会出现问题。我将它从多任务栏中删除,但它继续在后台运行。有人知道如何解决这个问题吗?我知道“iFile”有一段时间有这个问题。

【问题讨论】:

    标签: ios iphone objective-c root jailbreak


    【解决方案1】:

    你遇到的问题其实很简单。
    SpringBoard 和多任务栏以用户 mobile 运行,而您的应用程序以 root 运行。 mobile 用户无法终止以 root 身份运行的进程。
    我解决这个问题的第一个想法是将 (MobileSubstrate) 挂接到多任务栏中,并且由于 MS 调整可以以 root 运行,因此检测用户何时杀死您的应用程序并以 root 用户身份自行杀死它,因为 SpringBoard 根本可以不要这样做。
    或者如果这不能解决问题,请询问制作 iFile 的人,他真的很有帮助,我相信他会给你一些关于这个问题的指导。

    【讨论】:

    • 是的,我给他发了一封电子邮件,但我收到他的自动回复,告诉我他收到了很多电子邮件,可能一个月都不会回复我。当应用程序被“要求”终止时,是否有任何类型的事件被调用?我知道 applicationWillTerminate 存在,但这仅在应用程序实际退出时才有效。我想知道是否有任何类型的事件应用程序接收到一个信号告诉它退出?
    • Tweak 不能“运行”,它是一个动态库。 Tweak 将拥有所有权限、沙盒限制以及加载过程中的所有内容。因此,如果一个进程作为移动设备运行,那么您的调整也将作为移动设备运行,因为它们作为一个进程存在。明显的解决方案是挂接到 SpringBoard 并在应用程序在多任务栏中终止时发送通知。收到申请后,只需致电exit(0)。但我认为无论进程权限如何,都应该调用applicationWillTerminate。这只是一个事件,SpringBoard 应该可以将它发送到root 进程。
    • 它没有被调用,因为进程权限,它没有被调用,因为应用程序没有终止
    【解决方案2】:

    我建议您准确调查您是如何实现 root 权限提升的,它是否构建为普通的 UIApplication,并安装在 /Applications/ 中?

    我认为这应该阻止你杀死应用程序。看看 Cydia 应用程序本身,它也以 root 身份运行。

    我可以通过任务切换器毫无问题地杀死 Cydia(之后使用 ps 命令验证)。

    如果您登录越狱手机,请查看:

    /Applications/Cydia.app/Cydia
    /Applications/Cydia.app/MobileCydia
    

    我相信技术是well described here。否则,您可能需要发布有关如何编写应用程序的更多信息。

    【讨论】:

    • 它从 /Applications/ 运行,权限设置为 7555。我使用了与 cydia 相同的技术。我有一个脚本可以运行我的实际可执行文件并将其设置为 root,然后在应用程序的“主”中,我使用 setuid(0)
    • 今晚我将尝试运行我自己的应用程序,看看能否重现该问题。你能重现我用 Cydia 描述的内容吗?换句话说,在您的手机上,您是否看到从任务切换器中杀死 Cydia 确实有效?
    • @Finke,是的,我刚刚在我的一个以 root 身份运行的越狱应用程序上进行了测试。在 iOS 7.0.4 上,使用任务切换器来杀死它可以正常工作,就像使用 Cydia 一样。不确定您的应用程序有何不同,但这应该可以。这是一个voip 应用程序,还是使用其他一些功能可能会提示 iOS 在被杀死时重新启动应用程序?
    • 我正在运行 iOS 6。不过,这是一个相当普通的应用程序
    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多