苹果论坛_iPhone5论坛_苹果手机论坛哪个好-PP苹果论坛-PP助手

PP助手论坛

QQ登录

只需一步,快速开始

查看: 10001|回复: 12
打印 上一主题 下一主题

[教程] Cydia 越狱环境破坏 修复处理

[复制链接]

444

主题

1

好友

2289

积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 164 天

    连续签到: 0 天

    [LV.7]常住居民III

    威望
    173
    活跃
    2742
    PP币
    3
    PP豆
    5
    跳转到指定楼层
    楼主
    发表于 2015-11-1 17:32:09 |只看该作者 |倒序浏览 |

    设备处理的关键点:有afc2服务,能看到root根目录


    问题处理的难点:

          首先,设备没有安装OPENSSH服务导致无法修改直接放入文件的权限导致直接将缺失的文件放入后无法运行,使用cydia的Autoinstall的方式安装同样和在Cydia内直接安装deb因为apt的环境问题导致无法安装的情况,想通过iFile来修改文件的权限却也没有安装iFile,所以几条路都被堵死,只能另辟蹊径!!!


    问题的原因及部分系统原理


    1,文件权限:

          在AFC2服务启动时,第三方资源管理器是可以看到设备的root根目录,但是如果是将电脑里地文件“添加”进设备的,此文件默认的权限为:wheel:root-0644,也就是root用户的wheel组,运行的权限是当前用户可读写,组权限只读,但是都没有“执行(运行)”的权限,所以直接丢进去的可执行文件(包括权限需求高的文件)是无法执行和打开的

    但是,afc2add 有一个特性就是可以“继承”权限,也就是说,如果原来设备里面的文件时什么权限,那么你从电脑里面放入相同的文件去覆盖它时,原有的权限不变!不一定会是新加的默认 wheel:root-0644 权限


    2,ZIP,TAR 压缩文件的特性

          zip 文件是一种压缩文件的格式,我们在安装iFile的时候会附带安装处理 zip 的依赖(有些有深度洁癖的人会很不高兴认为是垃圾,其实不是开机调用常驻内存的依赖只是以文件的形式放置于系统内,在需要它是直接调用才会打开的);而 tar 压缩文件的支持在越狱时就已经预置了的,而且deb的安装包实际上用7-zip打开会发现其实就是tar文件+包安装信息,它们有个共同点就是在iOS系统内解压时不会改变压缩时的原始权限!


    3,iOS的启动调用

          iOS系统在开机时通常会调用 /Library/LaunchDaemons (不常用的 /Library/LaunchAgents);/System/Library/LaunchDaemons (这里一般是放的系统服务);如果安装了 Cydia Substrate ,那么启动时也会通过plist定义和调用调用加载 /Library/MobileSubstrate/DynamicLibraries 里面的 dylib 程序

          以上可以看出影响设备启动的主要是这3个目录,前2(3)者属于系统级的开机调用,而Cydia Substrate 的只有在安装 Cydia Substrate 的环境后才能生效,且在开机时按住“音量+”键可以全部跳过基于它的插件调用,但是系统级的调用是无法跳过的!所以开机白苹果如果是基于CS环境的插件问题可以按住“音量+”跳过,但是如果是系统级开机调用的程序出现问题卡死的就麻烦了!


    4,Cydia 开机自动安装插件以及DEB安装的常识

          Cydia安装后,在 /Library/LaunchDaemons 内放置了一个开机调用脚本的plist文件:com.saurik.Cydia.Startup.plist,控制了系统在启动时会运行/bin下的 bash 执行程序和 /usr/libexec/cydia 下的 startup 执行程序(这个startup实际上是一个赋予了可执行权限的 shell 脚本文件)

    内容如下:

    1. <font color="rgb(51, 51, 51)">#!/bin/bash

    2. export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
    3. tar -xvf ./Cydia.tar
    4. if [[ ! -e /var/lib/cydia/firmware.ver ]]; then
    5.     cache=
    6. fi

    7. /usr/libexec/cydia/firmware.sh

    8. debs=(/var/root/Media/Cydia/AutoInstall/*.deb)
    9. if [[ ${#debs[@]} -ne 0 && -f ${debs[0]} ]]; then
    10.     dpkg -i "${debs[@]}" 2>/tmp/dpkg.log 1>&2
    11.     rm -f "${debs[@]}"
    12.     cache=

    13.     killall -9 Lowtide AppleTV
    14. fi

    15. if [[ ${cache+@} ]]; then
    16.     sbdidlaunch
    17.     su -c uicache mobile
    18. fi
    19. </font>
    复制代码
    其中:
    1. <font color="rgb(51, 51, 51)">debs=(/var/root/Media/Cydia/AutoInstall/*.deb)
    2. if [[ ${#debs[@]} -ne 0 && -f ${debs[0]} ]]; then
    3.     dpkg -i "${debs[@]}" 2>/tmp/dpkg.log 1>&2
    4.     rm -f "${debs[@]}"</font>
    复制代码
    这段就是指定了在开机时检查 /var/root/Media/Cydia/AutoInstall 目录下是否有的包文件,如果有救执行 dpkg -i 的安装命令,而deb的安装则依赖于dpkg的环境


    5,还原抹除

          iOS的还原并抹除 主要是删除 /var 目录下的不是在iOS原生系统白名单以外的全部文件(包括文件夹),

          为什么说越狱后的机器不要还原抹除的主要原因就是越狱后在第一次运行Cydia 时,Cydia为了扩大系统区的可用空间,会将一部分的系统文件搬移到

    /var/stash (其实在Cydia新版,这个目录也是一个硬链接,stash 真正的目录其实是在 /private/var/db/stash  )那么在抹除时会将 /private/var/db/stash 文件夹删除导致系统文件缺失而白苹果

          但是我今天遇到的和有些人的疑问一样,那就是我没有运行过Cydia抹除可以吧,其实也是不行的(至少在没处理之前是不能直接抹除的),因为初始越狱后预置的基础性德 apt 的程序包安装管理会使用 /var/lib 目录以及此目录里面的目录,这个目录里面也放置的全部安装的程序包插件包的安装卸载信息,且目录的权限都具有可执行的权限,如果抹除时会将此文件夹删除,在次文件夹删除后 Cydia 在安装程序时会调用apt来安装管理下载的deb程序包,此时因为没有 /var/lib 目录来存放安装信息导致安装失败,而直接通过利用 afc2 服务的第三方助手工具创建或导入的目录又会因为权限的问题无法写入信息文件一样会失败!


    问题处理的思路


          一般来讲如果安装了OPENSSH服务且能够启动的情况下,基本问题都能够处理好(可以执行终端命令,修改权限等等),而如果有iFile也可以解决部分问题,但是如果都没有就非常麻烦了,等于自己把自己的退路断了!


          今天遇到的就是既没有openssh服务,也没有安装 iFile ;那么该怎么办呢?其实我上面写的原理就是需要利用的原理!

         首先这个问题主要是修复越狱预置的apt环境,那么就需要越狱程序在越狱时上传使用的 Cydia.tar 文件,需要用它将完整的文件解压恢复到iOS系统里面

          tar的文件需要解压的环境支持不要紧,因为基本的tar执行程序还在,只不过怎样去让系统执行解压命令来解压上传的tar文件呢?

          那么我们就需要使用 shell 脚本来调用命令,但是这个shell脚本怎么去调用呢?其实可以利用/Library/LaunchDaemons 等开机启动文件夹里面的plist文件去调用.

          但是如果是自己直接写的调用shell脚本在传入设备后会因为权限问题根本无法运行,怎么办?上面说过关于afc2add服务的权限继承特性!我们可以利用它!

          怎么利用呢?其实很简单,上面我就提到过Cydia就会在启动时利用/Library/LaunchDaemons 里面的 com.saurik.Cydia.Startup.plist 文件去调用 /usr/libexec/cydia 目录下的 startup 这个shell 脚本,我们可以直接将 startup 文件导出放到本地然后修改这个脚本,将需要的命令添加进去后重新导入覆盖原来的文件即可保持继承的权限从而达到可以执行的目的了!


    处理流程:


    1,找到越狱系统使用的支持本iOS版本的完整 Cydia.tar 压缩包(在源里面的 Cydia安装包仅是Cydia,不含完整的越狱环境目录结构),因为此压缩包为整个系统目录结构,那么在解压时一般就是接触的根目录,所以我将 Cydia.tar 使用助手工具将其导入放置到root根目录备用.


    2, 将 /usr/libexec/cydia 目录下的 startup 文件导出,在备份一个原始的文件后(不管干什么最好备份一个以防万一)使用适合的编辑器修改文件,在

    1. #!/bin/bash

    2. export PATH=$PATH:/usr/sbin:/usr/bin:/sbin:/bin
    复制代码
    下面添加一行命令代码:
    1. tar -xvf ./Cydia.tar
    复制代码

    (这个就是最常用最简单的一个解压的终端命令)

    原文件第一行是shell文件的类型注释,第二行代码是环境定义,所以必须添加到它们下面

    (关于修改使用的编辑器需要特别注意就是必须要保证编辑和保存后的文件格式编码不能变,否则乱码不能执行,建议使用UE或者winhex 等)


    3,将修改好的 startup 文件导入原始位置,提示覆盖时选择“是”去覆盖来保持继承权限


    4,重启设备


    5,系统重启后悔自动解压刚上传的 Cydia.tar 来重建结构,完成后apt环境即可修复,可以在Cydia里面直接安装插件了!


    6,将备份的原始 startup 文件导入覆盖还原(其实我这次的修复不用还原,因为在解压 Cydia.tar 时就已经还原为标准的文件了,哈哈)


    7,删除根目录的已经完成光荣使命的 Cydia.tar 压缩包文件清扫战场。


    上述修复所用的 Cydia.tar 以及修改了的 startup 文件下载: fixcydia.zip (5.94 MB, 下载次数: 611)


    更多的引申意义


          以上是整个处理过程的原理和流程,其实这个方法可以利用来解决很多的问题,比如可以在安装iFile时无法安装依赖时使用7-zip 将iFile的deb安装包的data.tar文件提取后按上面的办法来安装(只不过如果依赖没有,那么iFile在处理文件需要调用依赖程序时会失败,如如果没有安装依赖的zip,使用iFile解压zip文件时肯定会出错),


    希望大家在看这篇教程时能够用脑去看,搞清楚原理,合理利用并更多地引申到其他的问题的处理,这样就会达到事半功倍的效果!




    +1 6

    140

    主题

    0

    好友

    2666

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 312 天

    连续签到: 0 天

    [LV.8]以坛为家I

    威望
    17
    活跃
    4527
    PP币
    -1
    PP豆
    0
    沙发
    发表于 2015-11-1 17:35:29 |只看该作者
    挺麻烦的啊

    646

    主题

    0

    好友

    1万

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 595 天

    连续签到: 0 天

    [LV.9]以坛为家II

    威望
    913
    活跃
    15398
    PP币
    -1
    PP豆
    0
    设备
    iPhone 5s

    回帖之王 分享达人 雷锋再世

    板凳
    发表于 2015-11-1 17:35:35 |只看该作者
    我还是不懂

    459

    主题

    0

    好友

    7689

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 574 天

    连续签到: 0 天

    [LV.9]以坛为家II

    威望
    510
    活跃
    11589
    PP币
    6
    PP豆
    0

    回帖之王 分享达人

    地板
    发表于 2015-11-1 17:35:42 |只看该作者
    能教教就好了

    1472

    主题

    0

    好友

    1万

    积分

    每天发布五款游戏存档,请随时关注PP助手论坛奈亚子

  • TA的每日心情
    难过
    2017-8-7 11:43
  • 签到天数: 483 天

    连续签到: 1 天

    [LV.9]以坛为家II

    威望
    2690
    活跃
    18327
    PP币
    1971
    PP豆
    76

    回帖之王 分享达人 技术达人 雷锋再世

    5
    发表于 2015-11-1 17:35:47 |只看该作者
    我先试试

    55

    主题

    0

    好友

    1441

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 114 天

    连续签到: 0 天

    [LV.6]常住居民II

    威望
    8
    活跃
    1497
    PP币
    0
    PP豆
    0
    6
    发表于 2015-11-1 22:06:08 |只看该作者
    卧槽 程序员啊

    70

    主题

    0

    好友

    459

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 25 天

    连续签到: 0 天

    [LV.4]偶尔看看III

    威望
    9
    活跃
    576
    PP币
    0
    PP豆
    0
    7
    发表于 2015-11-1 22:06:18 |只看该作者
    还厉害的样子

    49

    主题

    0

    好友

    459

    积分

  • TA的每日心情
    奋斗
    2016-10-8 10:31
  • 签到天数: 22 天

    连续签到: 0 天

    [LV.4]偶尔看看III

    威望
    18
    活跃
    537
    PP币
    0
    PP豆
    0
    设备
    iPhone4s
    8
    发表于 2015-11-1 22:06:29 |只看该作者
    技术贴 支持

    0

    主题

    0

    好友

    66

    积分

  • TA的每日心情
    无聊
    2016-10-29 23:21
  • 签到天数: 21 天

    连续签到: 0 天

    [LV.4]偶尔看看III

    威望
    0
    活跃
    66
    PP币
    69
    PP豆
    60
    9
    发表于 2015-11-2 09:57:30 |只看该作者
    真心很有技术含量{:12_626:}

    0

    主题

    0

    好友

    12

    积分

  • TA的每日心情
    花心
    2016-11-23 09:49
  • 签到天数: 1 天

    连续签到: 0 天

    [LV.1]初来乍到

    威望
    0
    活跃
    12
    PP币
    8
    PP豆
    77
    10
    发表于 2016-11-21 21:46:12 |只看该作者
    {:8_361:}{:8_361:}{:8_361:}{:8_361:}{:8_361:}
    您需要登录后才可以回帖 登录 | 立即注册

    

    开发者门户|小黑屋|PP助手|PP资源站|手机版|PP助手论坛

    Copyright© 2009-2017 Guangzhou UC Network Technology Co., Ltd. All Rights Reserved. 广州优视网络科技有限公司 版权所有
    粤ICP备14027297号-18 粤网文[2014]0510-160号        IP网络警察--不良信息举报

    回顶部