破解的iphone上, 如何编写具有root权限的程序

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

对于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. 用法自己查一下.

破解的iphone上, 如何编写具有root权限的程序相关推荐

  1. 启动root用户 银河麒麟_麒麟系统使用root权限运行程序

    最近在虚拟机里安装了个国产麒麟系统.(不知道麒麟系统的百度下.) ************************************************** PS:首次试用的同学可以先用 V ...

  2. linux root 跑程序,linux下获得root权限运行程序

    在linux下系统的默认root用户是不被启用的,这和MS windows的做法恰恰相反,windows XP却是安装好系统好,就给你创建一个自动登录的管理员用户,不过Linux不一样的这一点也大大地 ...

  3. 苹果被曝重大系统漏洞:新款MacBook、iPhone 12统统波及,root权限秒被获取

    搭载M1的新款MacBook Air被发现漏洞 毫无疑问,这是第一个被发现的能影响苹果Apple Silicon芯片设备的安全漏洞. 最主要的是,这个漏洞可以轻易调取利用原本不属于App的权限. 通常 ...

  4. android root权限破解分析

    破解android的root权限的本质是:在系统中加入一个任何用户都可能用于登陆的su命令.或者说替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限,只有root和 shell用户才 ...

  5. 获取root权限及破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的原理吗?root破解的本质是什么呢?难道是利用了Linu ...

  6. iphone计算机照片大小,如何在iPhone上调整照片尺寸-缩小照片以缩小

    如果您想将iPhone用作微型相机拍照,则照片必须占据iPhone的大部分存储空间. 这是一个难题: 要备份到计算机上以腾出空间来存放新的将来的照片,或将珍贵的照片保留在iPhone上,则需要定期查看 ...

  7. 删除iPhone邮箱smtp服务器,如何在 iPhone 上删除或清除邮件

    如何在 iPhone 上删除或清除邮件 有太多的邮件堆积在你的 iPhone,他们正在你邮件的应用程序看起来都凌乱吗?好吧,幸运的是 iphone,删除旧的邮件是很容易,你可以在根本没有时间做它甚至将 ...

  8. linux怎么进入root文件,在Linux上打开具有Root访问权限的程序

    由于平台上的安全性,有时需要在Linux上打开具有root权限的程序,事实上,常规用户无法进行某些操作(例如管理Root文件夹中的文件,格式化硬盘驱动器或编辑系统文件等).有几种方法可以在Linux上 ...

  9. iOS越狱之程序获得root权限

    正常途径下, 我们编写的程序发布在App store上, 使用官方规定的SDK. 但有些时候, 正常途径实现不了的功能, 可以在破解的iphone上面实现. 以cydia上文件管理软件iFile为例, ...

最新文章

  1. AI看电影看哭了...MIT科学家正在教AI感受电影中的喜怒哀乐
  2. 为什么重写equals()和hashcode()
  3. Android SO逆向2-实例分析
  4. 32位机器下面各类型的取值范围(sizeof值)
  5. 王义成:阿里云Redis服务助力游戏行业发展
  6. xampp启动Apache端口被占用,修改端口
  7. 修改表字段属性_使用postman修改SAP Marketing Cloud contact主数据
  8. python 3.9 发布_Python 3.9.0 稳定版发布
  9. matlab学习笔记第七章——常微分方程(ODE)的数值解
  10. 如何在今日头条上持续生产优质内容
  11. 静态tableview组背景色的更改及自定义cell的两种方式
  12. linux文件属性详解及文件类型
  13. 基于RV1126平台imx291分析 --- media部件注册 mipi csi
  14. 2020年带你学会全网营销
  15. 最简单音乐播放器,还有歌词
  16. 香港云服务器选阿里云好还是腾讯云好?
  17. oracle彻底删除dbf文件,ORACLE 删除数据文件模拟灾难恢复
  18. 小白爬虫入门~python爬取职友集招聘职位信息
  19. 决策树之CART(分类回归树)详解
  20. 阿里P8亲自教你!Android高级工程师进阶学习,全套教学资料

热门文章

  1. python:实现EEMD算法(附完整源码)
  2. android如何获取分屏区域的宽高,Android N获取屏幕高度的问题
  3. 科技创新让工作更加清晰:这款工作计划管理软件如此强大
  4. ETCD启动不起来-超时问题
  5. 微信公众号发送模板消息,发送消息到某个用户
  6. html5怎么实现展开收起,小程序实现展开/收起的效果示例
  7. 包头钢铁职业技术学院题库计算机,计算机-包头钢铁职业技术学院.DOC
  8. C++中值传递、引用传递与指针传递的区别
  9. 使用Unity粒子系统放烟花
  10. Arduino IDE安装UNO和NANO开发板驱动教程(CH341SER.EXE)