ios超级签名_ipa签名_ios签名
苹果超级签名网 稳定不掉签名

NEWS/行业资讯

分享你我感悟

资产重组 IPA (装包再签字)

发表时间:2020-04-23 16:50

文章来源:cespin1

浏览次数:

一、IPA 的简易了解

最先有一个那样的 ipa 包文档:

立即修改文件后缀为:IPADev.zip, 随后缓解压力,是那样的:

从这一缓解压力的文档构造看来,表明一个 ipa 包,事实上便是一个压缩包包。缓解压力以后是一个 Payload 的文件夹名称,这一文件夹名称中含有一个 .app 文件夹名称,再度进到这一文件夹名称,主要内容以下:

这是一个,简易的 app 文件夹名称,具体新项目中这里边的文档会许多。

之上便是对一个 ipa 包的结构做的一个简略详细介绍,可是之上是一个根据 Xcode 的 Aechive 打的一个 Ad Hoc 包。不一样的包的结构会各有不同ipa 重新签名 企业,例如从 App Store 免费下载出来的会多一层包裝,可是大致的构造還是一样的。

二、简易的装包

新创建一个新项目 IPADev,随后刚开始装包,这儿的装包并不是应用 XcodeArchive 装包,只是极具特色的手动式装包。先看下面新项目的配备:

配备好以后,立即 command b, 随后发觉 Products 文件夹名称下边的 .app 文档发黑了,立即 Show in Finder 进到那样的页面:

根据上一小节的详细介绍,我们可以根据这一 IPADev.app 手动式搭建一个 ipa 包么?回答是能够的,将 IPADev.app 放进一个空的 Payload 文件夹名称中,随后转化成 zip 文档,将 zip 改为 ipa 就可以。最终是那样的:

如今 Payload.ipa 便是一个靠谱的 ipa 包了。自然这一包与平常见到的文件夹名称有点儿不一样,手动式改为 IPADev.app 就可以,改不变都一样。

那麼那么问题来了,那么转化成的 ipa 包能安裝到真机里么?试一下就了解回答了。当然,只有安裝到一个已在 .app 文档中 embedded.mobileprovision 环境变量中包含申请注册的机器设备上,与一个 Ad Hoc 包的特性是一样的。当然,能够在随意的越狱手机上安裝的。

可是假如手动式将 IPADev.app 中与签字有关的文件删除压缩得话,只有在苹果越狱真机上下载,在非苹果越狱真机里立即出错。在安裝的全过程中,显著觉得苹果越狱真机里的安裝速率较为快。表明...

三、对目前包重签字

基本开发设计中是沒有那样实际操作的,通常是以便将他人的 ipa 据为己有,加上自身开发设计的编码(动态库),这一实际操作被称为 动态库引入。动态库引入的方法有很多,简易的介绍一下相对性基本的一种根据 Theos 技术性转化成 dylib 库的引入方法。

显而易见,根据 Theos 转化成的 dylib 库只有在越狱手机上应用。要想在非苹果越狱机器设备上运作,只有根据动态库引入,随后重签字装包,那样才可以在非苹果越狱机器设备上运作。

3.1 資源提前准备

  1. 将要重签字的 .app 文档。

  2. 将要加上的 dylib 库。

  3. 签字环境变量(embedded.mobileprovision)。

  4. dylib 关系的动态库 CydiaSubstrate。

  5. 动态库引入专用工具 insert_dylib。

3.2 动态库引入

hgdev.dylib 放进 HGSecurityDev.app 中,根据随后实行以下指令:

./insert_dylib @executable_path/hgdev.dylib HGSecurityDev.app/HGSecurityDev --weak --all-yes HGSecurityDev.app/HGSecurityDev

指令文件格式为:./insert_dylib 动态库文档 Mach-O文档 --weak --all-yes 最后转化成的 MachO 文档

根据 otool 查询一下动态库的关系状况:

表明取得成功引入。

这里,还必须留意一个难题,这一动态库(hgdev.dylib)确实苹果越狱机器设备上转化成的,会默认设置关系一个苹果越狱机器设备上独有的动态库(CydiaSubstrate),根据以下指令查询:


最后希望在非苹果越狱的真机里也可以运作,因此必须手动式的加上并再次关系。将 CydiaSubstrate 也放进 HGSecurityDev.app 中,随后实行以下指令:install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/CydiaSubstrate HGSecurityDev.app/hgdev.dylib

再度查询动态库信息内容以下:

到现在才行,有关动态库的引入实际操作,都告一段落。接下去便是电子签名。

3.3 给相对的文档签字

一般状况,要是是 .app 文档有一定的修改,这种文档将必须再次签字。

  1. app 文档。

  2. 动态库文档。

  3. app 关系的拓展新项目。

3.3.1 签字前的提前准备

app 文档签字,务必要有一个签字环境变量(embedded.mobileprovision),假如破译的是一个 Ad Hoc 的包,那麼在 .app 文档中会有一个,如果是沒有的,能够自身提前准备一个自身的。

先看来一下 Xcode 是怎样签字的:

接下去,人们应用的就是这个命令。图中中的 .xcent 文档ipa 重新签名 企业,便是 签字环境变量(embedded.mobileprovision)转换后的环境变量(后边详细介绍怎样转)。

针对动态库的签字,要是有证书号就可以,查询证书号的指令:

security find-identity -v -p codesigning

给动态库签字的命令非常简单,文件格式为:codesign -fs 证书号 Mach-O 文档 。各自给2个动态库签字,指令以下:

codesign -fs 283729D4DDC7F173281DA85F105982C4B1E3C15E HGSecurityDev.app/CydiaSubstrate

codesign -fs 283729D4DDC7F173281DA85F105982C4B1E3C15E HGSecurityDev.app/hgdev.dylib


给 .app 文档签字。

先从 embedded.mobileprovision 文档中获取出 entitlements.plist 管理权限文档

,指令以下:

security cms -D -i embedded.mobileprovision < temp.plist

/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist < entitlements.plist

分为二步,最后转化成一个管理权限文档 entitlements.plist

宣布签字的指令以下:

codesign -fs 283729D4DDC7F173281DA85F105982C4B1E3C15E --entitlements entitlements.plist HGSecurityDev.app

最后人们见到的 .app 文档是那样的:

image.png

上边的 CydiaSubtratehgdev.dylib 是新加上的动态库。到此,重签字的实际操作早已所有进行,下一步,立即变为 ipa 文档。

到这儿,有一个至关重要的难题:

为何必须重签字实际操作?

由于引入动态库以后,对当今的 Mach-O 文档有一定的改动ipa 重新签名 企业,毁坏了以前的签字,要想确保在非苹果越狱的机器设备上也可以安裝,那麼就必须再次签字。

3.4 转化成 ipa 文档