找回密码
 赶紧注册吧

QQ登录

只需一步,快速开始

查看: 3036|回复: 0
打印 上一主题 下一主题

苹果利用后缀deb ipa pxl详解 [复制链接]

注意:1、各网友务必提高交友安全意识,不要轻易参加非天府交友网官方举办的见面交友活动,以防酒托,饭托或引发其他危险;请详细阅读《天府交友网服务条款》和《免责申明》!

Rank: 3Rank: 3

升级  90.67%

跳转到指定楼层
楼主
发表于 2011-10-24 02:42:13 |只看该作者 |倒序浏览
  详细介绍deb,ipa,pxl差别
  目前 iOS 平台上常见的安装包有三种,deb、ipa 和 pxl。
  其中 deb 格式是 Debian 系统(包括 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件治理系统,成为了当前在 Linux 下十分风行的一种安装包。进入 2.x 时期之后有 Cydia 作者 Jay Freeman(saurik) 移植到 iPhone 平台上,一起的还有 APT 软件管理系统。
  而 ipa 格式则是苹果在 iOS 平台上推出的专属软件安装包,在2.0固件开始才正式使用,是目前 iPhone/iPod Touch/iPad 平台上唯一的官方安装包。
  而pxl格式则来源于 Mac 系统上的 pkg 安装包,被普遍利用于1.x固件时代,曾经是 iPhone 平台上唯一的软件安装包,现在仍在被91等软件所使用。
  安装包格式:
  .deb
  deb 是 Unix 系统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
  由于 Unix 类系统对权限、所有者、组的严格请求,而 deb 格式安装包又常常会涉及到系统比较底层的操作,所以权限等的设置尤其主要。
  deb 包本身有三部分组成:
  * 数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;
  * 安装信息及控制脚本包,包含 deb 的安装解释,标识,脚本等,文件名为 control.tar.gz;
  * 最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中翻开可以看到。
  deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把疏散的文件和目录聚集在一起,并记录其权限等数据信息。之条件到过的 data.tar.XXX,这里 XXX 就是经由压缩后的后缀名。deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时光都比较长。
  data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要依据文件所在位置设置好相应的文件/目录树。
  而 control.tar.gz 则包含了一个 deb 安装的时候所需要的把持信息。普通有 5 个文件:
  * control,用了记录软件标识,版本号,平台,依赖信息等数据;
  * preinst,在解包 data.tar.gz 前运行的脚本;
  * postinst,在解包数据后运行的脚本;
  * prerm,卸载时,在删除文件之前运行的脚本;
  * postrm,在删除文件之后运行的脚本;
  * 在 Cydia 系统中,Cydia 的作者 Saurik 另外增加了一个脚本,extrainst_,作用与 postinst 类似。
  .ipa
  使用过 Mac OS 的人可能都晓得,Mac 下的软件大部分都只有一个 .app 目录,里面包含了程序全部资源和可执行文件。简单来说,Mac 下的软件就像是 Windows 下的绿色软件一样,解压后即可使用,不需要安装,卸载的话也只用删除程序文件即可(这里不涉及 pkg 格式安装包)。而 ipa 格式可以视为这种 .app 软件的衍生物。
  ipa 文件本质是一个 zip 紧缩包(不是 rar 或 7z 包),包含 3 个组件:
  * payload 目录下的 .app 目录,这个是软件的主程序;
  * iTunesArtwork,实质是一个无后缀名的 png 图片,用来在 iTunes 中显示图标;
  * iTunesMetadata.plist,记录购买者信息、售价等数据。
  因为 zip 包不能记载权限和所有者等信息,所以苹果规定了 ipa 的安装方式,即全部 ipa 都会解包安装在 /var/mobile/Applications 目录下,全部文件和目录的所有者及用户组均设为 mobile(ID 为 501),主程序(可执行文件)的权限设为 0755 (所有人都可以执行,但只有所有者可以修改),可执行文件在 plist 中定义。全体目录权限设为 0755,而其它所有文件都设为 0644(仅所有者可以修改,其余人只许可读取,全部人都不答应执行)。
  ipa 解包后并非直接放置于 Applications 目录下,而是放在一串由随机码形成的目录下,其作用在于,只允许这个软件运行在一个特定的沙盒(Sandbox)中,不能烦扰其他软件。因而那串随机码目录下,除了 ipa 本身的三个组件之外,还有三个目录:
  * Library,一般是用了贮存设置文件等数据;
  * Documents,存储数据,多用了保存存档;
  * tmp,暂时文件夹。
  由于这个软件只能在这个特定的目录下运行(当然了,部门程序会调用系统的通信录、相机等组件,但依然是受限度的),从而保障了全部系统的安全性和稳固性。
  因为 Unix 体系下对权限的划定相称严厉,所以“越权”的行动是相对不容许的。举个例子,mobile 用户无权删除 root 所有的文件,因为 root 的权限高于 mobile。所以有些人在修正 ipa 安装后的文件时,比方进行汉化或者修改存档,发明不能删除清洁软件,或不能保留,这是由于删除时不能删除 root 所有的文件,程序自身也无法对 root 所有的存档文件进行写入操作。
  .pxl
  pxl 格式在1.x时代是 iPhone 平台上唯一的安装格式,原因是那时候还没有 Cydia 这样的 APT 管理软件,苹果官方也没有推出 App Store。由于在1.x时代积聚了大批人气,在接下来的 App Store 时代中,pxl 格式以其相对简易的打包和安装方式,仍旧盘踞了很大一部分市场。但随着 Installer 的停滞开发,iBrickr 等软件结束更新,目前唯一还在保持使用 pxl 格式的就只剩下91一家了。
  pxl 安装包通常包含3个组件:
  1. PxlPkg.plist 记载程序文件的寄存位置、所有者、权限以及软件标识等信息;
  2. PkgScript文 件夹,存放安装和卸载脚本;
  3. 程序言件。
  PxlPkg.plist 文件的开头通常是 CFBundleIdentifier,记录着软件的独一标识,以和其余软件进行辨别。RDPxlPackageVersion 则记录软件版本。RDPxlPackageFireware 被用来记录可以运行的固件版本。其余还有一些键值是用来记录软件先容、网址、作者信息等数据。
  除了软件标识、软件版本和可用固件版本以外,PxlPkg.plist 的中心部分就是 RDPxlPackageFiles 和 RDPxlPackagePostflight 两项。RDPxlPackageFiles 记录了程序文件应该被复制到的门路,并提供了是否笼罩的参数: overwrite。而 RDPxlPackagePostflight 则记录程序文件应该被赋予的所有者和权限,分辨以 chown 和 chmod 命令来实现。另外,对于含有安装/卸载脚本的 pxl 来说,还会以 sh 命令执行相应的脚本 Postflight 和 Preremove。
  PkgScript 通常包含两个文件,安装后执行的脚本 Postflight 和卸载前执行的脚本 Preremove,这两个脚本就是尺度的 Linux Shell Script,以 sh 命令执行。
  安装包的特色
  引用
  .deb
  * 丰硕的资源:Cydia 上本身就不少,更何况任何格式的安装包都可以转换为 deb。
  * 绝对方便的在线购置模式:Cydia Store,不外只管没有 App Store 的5台设备的制约,但对海内用户来说,付款方式比较艰苦。
  * 破解难度较大,没有使用 App Store 的验证方式,所以必需将验证和防破解办法参加程序里面,这样就比较难破解,对软件开发者来说是个好事。
  * 完美的 Unix 文件系统支持:无需以命令设置文件的权限、所有者和用户组(当然也可以以脚原来设置)
  * 完善的脚本支持:5个脚本按照安装和卸载的先后次序执行,可以提供更多选择。比如备份还原操作,可以在 preinst 中备份文件,而在 postrm 中还原文件
  * 严格的依赖关系:deb 遵守严格的依赖关联(于 Depends 和 Pre-Depends 指定),可以确保软件运行所必须的组件。在线安装的时候会主动安装所依赖的软件包。卸载时也很重要,比如软件包 A 依赖于 B,当卸载 B 的时候会提示 A 依赖于 B,卸载掉 B 的话会导致 A 不能用,这样可以确保系统的完整性和稳定性。
  * Conflicts、Replaces、Provides 等键值的存在可以实现抵触提示或调换其它软件包。
  * 完全权限:由于 deb 必须以最高权限 root 的身份运行,deb可以对系统任何位置进行操作,换句话说,deb 领有对整个系统的完全节制,因此 deb 安装包软件可以实现很多 ipa 不能实现的功能。
  * 相对简单的获取方式(在线或离线)和安装方式,也不必担忧在不同机器上同步会删掉程序的问题。
  * 安装相对简单:实在无论是哪种安装包,安装方式都不算很复杂,只不过 deb 略微庞杂一些。
  deb 的安装方法大体有 5 种:
  1. Cydia 或同类 APT 管理软件在线安装,这个是最佳的安装方式,因为通常无需斟酌依赖关系,但缺点是对网络的要求比较高;
  2. 命令行中以 dpkg -i XXX.deb 的情势安装,好处是可以以通配符一次性安装多个 deb,而且也可以直接看到脚本的运行状态和安装成功/失败的提示信息,缺点是需要命令行软件的支持,如 Putty/WinSCP的控制台/iSSH/MobileTerminal,很多人也不熟悉命令行下的操作。另外,安装完后会不显示图标;
  3. 放置于 AutoInstall 目录重启安装。该办法实际是 Cydia 提供的一个启动脚本,在每次系统启动时以 dpkg 命令安装 AutoInstall 目录下的 deb,利益是不需要命令行操作,毛病是必需要重启,有些甚至要重启两次,也会呈现不显示图标的情形;
  4. 应用 iFile 安装,好处是图形化操作,桌面会显示图标,缺陷是不能一次安装多个 deb;
  5. 用 Cyder II 等软件来安装,其原理是模仿一个 APT 软件管理器来下载相应的 deb 文件并传到设备,然后以前面几种方式来安装。
  总体来说,deb 的安装都是依赖于 dpkg -i 命令来安装,只不过有些是在命令行下输入命令,有些是提供了图形界面。但除了 Cydia 安装一种方式之外,其余几种安装方式都存在一些共有的问题:
  * 不会自行搜索依赖关系,必须手动提供所依赖的 deb;
  * Cydia 会读取安装脚本里的一些特别语句,比如仅在全新安装时执行而不在进级时执行,安装实现后重启 SpringBoard 或设备等等。
  当然了,deb 软件的卸载也比较简单,有两种方式:
  * Cydia 里卸载,长处是卸载进程和提醒信息很具体,全图形界面操作,同时也供给了重新安装的选项;
  * 以 dpkg -r Package_ID 命令或 dpkg -P Package_ID 命令来卸载(详情后面会说);
  * Cydelete 来卸载,优点是可以直接在桌面上卸载有图标的软件,但对那些没有图标的无能为力。
  其实,不论是安装还是删除,都可以才要全手动的方法。即,解包 deb 之后,自己将文件放到相应位置,然后设置权限等并执行脚本。但这样有必要么?
  deb 的安装过程如下:
  1. 读取数据库并锁定,避免同时有两个安装程序在运行
  2. 读取 control 中的 Package(软件包标识)和版本信息,并搜索数据库,若已存在,则卸载之后再安装;
  3. 检查 Depends, Pre-Depends, Conflicts 和 Replaces,如果检测到已存在 Conflicts 中存在的软件,则报错并终止安装。如未找到 Pre-Depends 指定的软件,则报错并终止安装。如找到 Replaces 中指定的软件,则卸载之;
  4. 将数据写入 /var/lib/dpkg/status 文件中;
  5. 执行 preinst 脚本(如果有);
  6. 解包 data.tar.gz,将文件放置于相应地位,并将文件列表写入 /var/lib/dpkg/info/XXX.list;
  7. 运行 postinst 和 extrainst_ 脚本(如果有);
  8. 假如之前的安装都不犯错,即安装成功,那么会在 status 文件中写入 Status: install ok installed 信息,否则会写入其它状况数据,好比 Unpacked (未解包数据)、Failed-config(脚本未能胜利履行)、Half-installed(安装失败等);
  9. 从新加载数据库并解除锁定。
  deb 的卸载过程如下:
  1. 读取数据库并锁定;
  2. 根据软件标识搜查数据库;
  3. 检讨是否有软件依赖于待卸载的软件,如果有则提示,并中止卸载;
  4. 执行 prerm 脚本(如果有);
  5. 读取 /var/lib/dpkg/info/XXX.list 文件,并删除 list 文件中记录的全部文件和非空文件夹;
  6. 运行 postrm 脚本;
  7. 如果卸载命令是 dpkg -r,则保存 status 中的记录并改为 Status: Not installed;如果卸载命令是 dpkg -P,则删除全部数据;
  8. 如果卸载过程没有过错的话,重新读取数据库并解除锁定。
  由于 deb 安装的软件可能会在运行时在 /var/mobile/Documents 下放置存档文件,或在 /var/mobile/Library/Preferences 下放置设置文件,而这些文件并没有记录在 list 文件里,所以卸载的时候不会被删除。
  援用
  .ipa
  * 丰盛的资源:App Store 上那么多资源,apptrackr 等网站也提供了很多破解版。
  * 完善的更新、后期服务。
  * 只能使用最小权限,保障平安性。
  * 不波及系统级的操作,所以正常不轻易造成死机或白苹果(有些是因为资源耗费太大所以卡逝世)。
  * 便捷的安装方法,无论是直接在装备上用App Store装置,仍是用 iTunes 来同步,抑或是用 Installous 跟 91 这类第三方软件来安装,都是很便利疾速的安装方式。
  * 超级简略的卸载方式:还有什么比只须要点一个 X 就能卸载更简单呢?
  * 完整删除,不会留下任何垃圾文件(如存档、设置文件等)
  * 总体来说破解还是比较容易的,但现在越来越多软件加入了防破解措施。
  之前提到过,ipa 软件是被安装在一个相似于沙盒的环境中,除了能对 /var/mobile/Media/DCIM 目录(拍照、截图存放目录)进行操作,或是调用壁纸、铃声、相机等组件,不能对系统进行任何干预,这样在最大水平上保证了系统的稳定运行,也不会干扰其它软件的畸形使用。但问题是,由于 ipa 软件的权限很低,想要对系统进行修改,尤其是运用补丁时,ipa 就无能为力了。
  ipa 软件官方的安装方式有两种,一是在 App Store 这个软件中下载安装,二是用 iTunes 同步。
  前者的问题主要是网络问题,网速不好很容易安装失败;GPRS之类的上网安装又很耗流量。后者的问题主要是不能在不同系统下使用(包含不同电脑和统一部电脑上的不同系统),在其它系统上同步会抹掉原有的软件。当然了,iTunes 每次同步时间比较长也是经常被人诟病的。尤其是当安装软件比较多的时候,每次同步之前的备份需要很长很长时间,这个很恶心(不过可以直接 X 掉备份操作)。
  由于以上两种方式存在一些问题,所以许多人会挑选使用 Installous 或 91 来安装 ipa,这也确切是个不错的取舍。
  Installous 一般没什么问题,但对部分验证比较严格的 ipa 处置不是很好。虽然 Installous 基础能取代 iTunes,但究竟不完全等同。最典范的就是 Installous 安装 Microsoft 官方出的 Live Messenger (正版,非破解版)时不能运行。实际上 Installous 对很多未破解的正版软件支持不是很好。
  至于91,时常被人批驳。91 固然可以安装 ipa,但除了 Installous 都有的正版软件的支撑问题外,由于91的安装机制有缺点,软件不能实现多语言,只会使用英文界面,而疏忽掉 zh_CN.lproj,zh_TW.lproj 这些语言包。这对那些用盼望使用汉化版的人来说切实是一个悲剧。所以通常是要防止使用91来安装 ipa 的。
  至于卸载,三种方法:
  * 设备上按住图标直到开始晃动,点击图标左上角的 X 即可卸载;
  * 于 iTunes 中撤消选中,然后同步
  * 找到 /var/mobile/Applications 下的相应目录,强行删除整个文件夹。这个在前面两种方法无法使用是可以采用(有时候卸载体积太大的软件,比如超过 1G,因为删除过程太长导致失去响应并删除失败。),但这种方**造成系统的不稳定。除非是确实遇到了问题,否则强烈倡议不要使用。
  引用
  .pxl
  * 严格来说,pxl 格式的资源并不算多,但也不少。现在使用 pxl 格式的绝大多数都是91的用户。
  * 从时效性上来说,很多软件(主要是 App Store 上的)一被人破解就立刻会被人转成 pxl 格式,这样来说,pxl 格式的更新还是不错的。
  * 由于91手机助手没有 iTunes 同步会抹掉软件的问题,加上其它一些比较方便的功效,使得很多新手都是从91开端懂得并熟习 iPhone/iPod Touch 的使用。其成果是,pxl 格式依附于91而生存。
  * pxl 格式的流行也不是历史的遗物,而是合乎市场法则的需要。91助手的便捷的软件管理方式(尤其是支持 WiFi 管理),加上免费的旗帜,使得 pxl 格式在新手中很受欢送。
  实际上,pxl 格式和 deb 格式存在的功能完全一样。虽然 pxl 不能记录文件的权限等数据,但完全可以用脚本来补充。等于说,pxl 格式和 deb 格式其实是不相伯仲的。而且因为 pxl 格式的制作并不需要比较少见的 Unix 环境,尤其是 Debian 环境,其本身是优于 deb 格式的。
  但为什么当初良多人都常常在说不要应用 pxl 呢?我个人以为,起因重要有以下多少个:
  * 资源的局限性:除了91公司自己开发的几个软件之外,其余所有软件都是从 deb 和 ipa 转换而来。如果原版软件没破解,pxl 无能为力(比如 Microsoft 官方出的 Live Messenger 和 Cydia 上一众没被破解的软件);
  * 资源时效性:跟上面一点类似,pxl 格局大局部是从其它格式转换而来,跟原版比拟老是会慢一些,尤其是当无奈破解时,pxl 基本就出不来;
  * 打包人程度有限:现在很多人都是直接用91助手来打包 pxl。对大部分只有一个 XXX.app 目录的程序来说一般不会有问题,但若遇见那些对文件权限等数占有严格要求的软件(比如可执行文件没有可执行权限,或是 mobile 用户不能改写 root 所有的文件等等),或是需要比较复杂的脚本才干运行的软件,往往 pxl 制作者并没有能力去制作一个完善的 pxl 出来,这样也导致了很多安装使用上的问题;
  * 安全性:绝大部分人在制造 pxl 的时候都习习用 chmod -R 命令来将整个 XXX.app 目录及其中的全部文件和子目录设为755/775/777权限,而这种行为会造成必定的安全隐患。对于这些数字的意思请自行搜寻相干材料。这里简单阐明一下。644属性表现仅有该文件的所有人才可以进行改写操作,其余任何人都只能读取,任何人都不能执行这个文件。755和775是在644的基本上加入了可执行权限,755是该文件所在的用户组的所有人都可以改写。而777权限则标识任何人都可以改写并执行。由于 mobile 本身是受限账户,如果使用777权限的话,有机会通过这个破绽来获取整个系统的掌握权。只不过因为 iPhone 系统相对关闭,也不太有机遇造成丧失。但采取775和777权限是不应该的;
  * ipa 转 pxl 的存档问题:不少人都有这样的阅历,在游戏 A 存档之后再进游戏 B,存档 B 之后再进 A,发现 A 的存档已经不在了。原因在于,ipa 转换成的 pxl 软件,存档全部是放在 /var/mobile/Documents 目录下,而正好有两个软件的存档文件名雷同(最常见的就是 data.sav 或 save.data),相互改写之后导致不能读取。这种问题也产生在 ipa 转 deb 上,而且无法解决;
  * 无法完全删除:卸载 pxl 格式时,不会删除存档文件、配置文件、常设文件等数据,长期使用会导致可用空间减少;
  * 在部分机型上存在兼容问题:有些机器越狱后并没有将系统分区中的 /Applications 目录转移到 /var/stash 的用户分区中。由于系统分区的可用空间很少(默认500MB,通常可用空间不超过50MB),强行往 /Applications 里安装会导致残余空间消费殆尽或安装失败。
  由此可以看出,pxl 格式的问题更多不是 pxl 本身的问题,而是打包者的问题以及安装方式的缺陷所致。
  另外要指出的是,pxl 最大的提供者,91,常常是转载别人发布的软件(包含 网友本人购买破解的,或 Cydia 上直接下载的)而后当作自己宣布的软件,对版权问题完全不在意,这样也引起了很多人,尤其是原发布者的恶感。这种赤裸裸的抄袭行为真实                  未审是令人不耻。正因为这样,很多人是因为不爽91而不爽 pxl,这着实是委屈 pxl 格式本身了。
  pxl 格式曾经是1.x时代唯一的安装包格式,给咱们留下了太多的回想,对 pxl 的奉献,我们还是应当怀念和尊重的。但跟着时代的发展,pxl 已经老态尽显,就犹如 Installer 的退出一样,pxl 终极会退出市场而被供奉在殿堂之内。
  总结
  引用
  个别的软件还是尽量用 ipa 格式,不要使用 ipa 转换成的 deb 或 pxl 格式,这样能够确保兼容
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0

使用道具 举报

※为保护您的个人隐私,防止被恶意盗用,在论坛中不得留下手机、QQ、邮箱等联系方式,否则将被屏蔽!,若有需要,请发送站内消息
您需要登录后才可以回帖 登录 | 赶紧注册吧

关于我们|网站地图|帮助中心|商务合作|法律声明|诚聘英才|联系我们| 时尚 娱乐 成都婚庆公司 网站制作天府星空
Copyright © 2010-2011 天府交友(Www.Tflove.Com)版权所有