`

iphone上面编写具有root权限的程序

阅读更多

正常途径下, 我们编写的程序发布在App store上, 使用官方规定的SDK. 但有些时候, 正常途径实现不了的功能, 可以在破解的iphone上面实现. 以cydia上文件管理软件iFile为例, iFile可以修改系统的任何文件, 这需要iFile具有root权限, 在iphone没有破解的情况之下, 是无论如何都实现不了的.  我个人并不支持破解, 但之前接到个任务编写的一个程序只要求运行在破解了的iphone上, 以cydia方式发布, 并要有root权限, 就研究了一下.


对于iphone系统, 有两个目录会安装应用程序
1. /Application
2. /var/mobile/Applications

/var/mobile/Applications下的应用程序会有很多限制, 似乎系统会认为此目录下的程序一定会运行在沙盒中, 不管怎么设置权限也无用. /Application目录下的程序限制会小一些, 要取得root权限, 第一步就是要将程序安装在/Application目录下.

幸好有cydia. 系统破解之后, 绝大多数都会安装上cydia. 自己搭建cydia源, 第三方软件也可以通过cydia来发布. 搭建cydia源中有一步是将编译出的程序打包成deb. 打包的时候, 可以指定最终安装后的目录结构. 至于如何搭建cydia源, google一下会有详细的教程, 这里不多说, 下面已假设可以将程序安装在/Application目录下.



先简单复习一下unix的权限管理, iOS系统其实是个小的unix.
unix下面每个文件都有自己所属, 和访问权限.
比如用户complex_ok是组mobile的成员, 他登录的时候创建了一个文件A, 默认下, A就属于用户complex_ok, 组为mobile.
另外文件A还可以指定自己的访问权限, 分成用户, 组, 其它人三个级别, 三个级别都可以指定自身的 是否可读, 是否可写, 是否可执行.

比如 文件A属于用户complex_ok, 组为mobile
它的访问权限指定为 用户可读可写可执行, 组可读可写, 其他人为只读.

这个时候用户complex_ok登录的时候, 可以执行文件A, 如果用户HelloKitty, 也属于组mobile, HelloKitty对文件A可以进行读写, 但不可以执行, 而其它非同组的人, 就只读.



当我们使用iphone的时候, 我们实际上是以用户mobile, 组mobile的身份登录的. 当某文件属于root用户, 权限设为组和其它人都只读, 正常时候就不能修改这文件.
幸好unix还可以为文件的访问权限指定setuid位, 这个位很重要
比如可执行程序A, 程序也是文件, 程序A是属于root用户的. 假设用户mobile运行程序A, 如果没有为程序A设置setuid位, 程序A是以用户mobile的权限运行. 如果指定了setuid位, 就算用户是mobile, 并非root, 但因为程序A是属于root用户的, 程序A也可以以root的权限运行.

明白setuid位的作用, 似乎取得运行root权限的程序就很简单了. 比如我们也想编写自己的文件管理程序aFile, 使aFile也运行在root权限, 我们就将aFile程序的修改成属于root用户, 再将权限位设置成可执行, 并有setuid位. 使用cydia将程序安装到/Application, 用户点击iFile的图标, 这样iFile就以root权限运行了.

想法是好的, 但是这样还不行. 当用户点击程序的图标时, 是通过iphone系统调用程序的, iphone系统会有一个安全检查, 它会检查到程序将以root权限运行应用程序, 就不会执行, 你会看到程序闪一下, 就被结束了.



所以我们还需要一个间接层, 编写一个引导程序A, 再通过A调用B.
首先将A的权限设置为其它人可读可执行, B的所属设置为root, 权限设置为其它人可读可执行, 并有setuid为.
当用户点击图标, iphone系统调用程序A, 它判断出程序A并没有root权限, 正常执行, 程序A这时候去调用B, 因为B是A调用的, 程序A是我们自己写的, 并不做安全检查, 这样B有setuid位之后, 所属为root, 就可以以root执行了.



那如何使iphone系统调用引导程序A而不是调用正常程序B呢? 很简单, 改改名字就可以了.
比如你建立的工程为aFile, 正常编译出一个aFile.app文件, 右键, 显示包内容, 将里面的可执行文件aFile, 修改名字为aFile_, 再将你的引导程序改成aFile, 这样安装之后, 点击图标系统就会自动调用你的引导程序. 引导程序的编写很简单, 大体为
int main(int argc, char *argv[])
{
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
       NSString* string = [[NSBundle mainBundle] pathForResource:@"aFile_" ofType:nil];

    argv[0] = (char*)[string UTF8String];
    execve([string UTF8String], argv, NULL);
    
        [pool release];
        return 0;
}

取得root权限后, 就可以做很多事情了, 你的程序编写时候也要小心一点.


在打包成deb时候, 可以用脚本自动修改文件权限和所属.
权限修改的命令为chmod, 所属修改的命令为chown.

分享到:
评论
3 楼 followith 2012-11-16  
请问一下如何将程序安装在/Application 目录下呢?
2 楼 snakeninny 2011-08-22  
转载最好标明出处啊博主!
回1楼的问题,思路如下:
1)app调用bash script
2)利用bash script来安装软件,此处bash script需要root权限
我给你留了言,看到了回复我一下!
1 楼 billoway 2011-04-29  
钊哥,最近接到一个项目,让自身实现第三方已破解软件的安装功能,给点指引。谢谢了。

相关推荐

    山寨iphone T1301破解root新方法

    【标题】:“山寨iPhone T1301破解root新方法” 在智能手机领域,"破解root"是指获取设备的超级用户权限,允许用户对系统进行深度定制和优化。针对标题中的“山寨iPhone T1301”,我们可以理解为一种非苹果官方生产...

    iPhone应用程序编程指南-中文版 pdf

    《iPhone应用程序编程指南》是一本面向开发者的重要参考资料,旨在帮助读者深入理解如何为Apple的iOS平台开发应用程序。这本书的中文版使得更多的中国开发者能够轻松掌握iOS应用开发的技术和技巧。 在iPhone应用...

    xcode编写iphone电子琴程序

    在本主题中,我们将深入探讨如何使用Xcode编写iPhone电子琴程序。这是一份基于清华大学出版的《30天精通iPhone编程》一书中的源代码,适用于初学者学习iOS编程。通过这个项目,你可以了解iOS应用程序的基本架构,...

    iphone程序的编写,调试以及发布的过程说明

    ### iPhone程序的编写、调试及发布的全过程解析 #### 一、引言 随着智能手机的普及和发展,iPhone应用程序已经成为人们生活中不可或缺的一部分。对于开发者而言,掌握如何编写、调试以及发布iPhone程序是至关重要的...

    iPhone基础知识_权限说明_文件存放路径

    iPhone 文件路径和权限相关知识 iPhone 作为一款流行的移动设备,其文件系统结构相对复杂,对于开发者和用户来说,了解 iPhone 的文件路径和权限机制非常重要。本文档将详细介绍 iPhone 的文件路径和权限相关知识。...

    iphone root2.0

    **苹果手机越狱详解:iPhone Root 2.0** 在深入了解iPhone Root 2.0之前,我们首先要明白“root”是什么。在Android系统中,"root"是指获取设备的超级用户权限,允许用户访问和修改系统级别的文件。而在iOS系统中,...

    iPhone应用程序编程指南(中文版)

    - **本地应用程序的概念**:本地应用程序是指那些直接在设备上运行的应用程序,与Web应用程序不同,它们拥有更多的权限去访问设备的各种硬件和软件特性。 - **本地应用程序的特点**: - 可以充分利用设备的功能,如...

    iPhone删除守护程序

    - **权限问题:** 删除这些文件通常需要root权限或其他高级权限,这意味着操作者必须具备相应的权限才能执行删除操作。 - **系统稳定性:** 删除不必要的守护进程可以释放资源,提高系统性能;但删除关键性的守护...

    小程序适合iphone 调试网页的

    综合以上信息,我们可以推测这是一个专为iPhone设计的小程序或应用,用于简化Web页面的调试过程,它可能具有以下特点: 1. 用户友好:面向非专业开发者,提供直观的界面和操作流程。 2. 实时调试:支持实时查看和...

    iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配

    最近写小程序时,遇到了 iPhoneX 底部小黑线与内容重叠的问题,实际上是iPhoneX安全区域的适配问题,了解清楚这个问题花了挺多时间的,也实操出了结果,忍不住来总结总结。 前言 在苹果 iPhoneX 、iPhone XR等设备上...

    iPhone开发的第一个程序HelloWorld

    iPhone 开发的第一个程序 HelloWorld iPhone 开发的第一个程序 HelloWorld 是一个自动计算打折后价格的应用程序。该程序的开发过程中,我们将学习到如何使用 Xcode 和 Interface Builder 来设计用户界面、编写代码...

    示例 iPhone 和 Google 应用程序引擎代码

    App Engine 和 iPhone 开发综合在一起就形成了一种功能强大的工具,可用于编写和原型化移动应用程序。这个示例 Web 应用程序支持着一个小型的 iPhone 应用程序 Sonnet,这个小程序可从 Apple 的 Application Store ...

    iPhone常用集合类介绍的示例程序

    这是iPhone常用集合类介绍的示例程序,具体参考: http://blog.csdn.net/htttw/article/details/7884218

    .net编写的iPhone连接SSH通道源码

    《.NET编写的iPhone连接SSH通道源码解析与实践》 在现代移动设备开发和管理中,SSH(Secure Shell)是一种广泛使用的网络协议,用于安全地远程登录到服务器进行管理和控制。尤其对于iOS设备,如iPhone,由于其封闭...

    iphone 聊天应用程序

    首先,我们要明确的是,iPhone聊天应用程序的核心在于实时通信。为了实现这一目标,我们需要选择一种适合的通信协议。在iOS开发中,最常用的实时通信协议是WebSocket,它提供了全双工、低延迟的连接,能够实现服务器...

Global site tag (gtag.js) - Google Analytics