ipa包重签名研究

最近被公司的构建系统折腾得比较闹心,于是研究了一下 ipa 打包和签名的过程,以方便日后跟他们撕逼。

首先说说什么是 ipa 包。ipa 包其实就是一个 zip 包。拿简书为例,先用 iTune 去 app store 下载一个简书,然后在我的应用->show in finder 里面找出来,copy 出来慢慢玩。

解压之后,如图所示


iTunes 开头的两个文件记录了购买者信息之类的东西,META-INF 里面是一些解压信息,Payload 里面则是一个.app 文件。Mac OSX 里面的 app 就是以.app的形式存在的。codesign 签名的对象就是这个 app 文件。那么我们用命令查看一下这个 app 的签名吧:

codesign -vv -d Payload/Hugo.app

结果如下:

Identifier=com.jianshu.Hugo

Format=app bundle with Mach-O universal (armv7 arm64)

CodeDirectory v=20200 size=46700 flags=0x0(none) hashes=2326+5 location=embedded

Signature size=3487

Authority=Apple iPhone OS Application Signing

Authority=Apple iPhone Certification Authority

Authority=Apple Root CA

Info.plist entries=41

TeamIdentifier=KS7QAPBMXA

Sealed Resources version=2 rules=14 files=1161

Internal requirements count=1 size=96

我发现这里的 Authority全是苹果,没有一个是与开发者相关的。这里可以留意一下,对比一下用开发证书签名后的结果。

上面的 iTunes 信息有什么用呢?于是做了个实验:

重新打包一个 ipa,只打包 Payload,不打包 iTunes 信息。

zip -r juanshuIpaWithoutItunesInfo.ipa Payload

然后用重新打包的 ipa 进行安装,安装成功。说明上面的 iTunes信息并不影响安装。

把这个 ipa 发给另一个用户,然后用 itunes 打开安装,成功。也就是说,iOS 安装ipa 并不校验购买者信息,只要app 签名完整就可以了。

那么是否意味着我购买的 ipa 可以发给好友安装呢?其实不然。对于非越狱的手机,只能通过 iTunes 进行安装。对于免费的 app, iTunes 会直接安装,但对于收费的 app,会多一步授权验证,别人发给你的 ipa 包是无能通过这个授权的。我猜这个授权验证应该是通过查询你的帐号的购买记录,然后和 app 的 bundle id 进行比对,来判断你是否拥有这个 app.

也就是说,苹果是通过 iTunes 来防止收费 app 的分发,对于 iOS 系统本身来说,只要你的签名过关,就能安装成功。

iOS 的签名校验有几种情况:

1、从 app store 下载的ipa 包,比如上面的简书 app.签名方是 Apple iPhone OS Application Signing,只要是这个签名,就能安装。

2、用企业证书签名的内测 ipa。签名方是企业帐号(199美那种),需要把一个 embedded.mobileprovision文件打进 app 里面,该文件记录着发布者的信息。不限设备数量安装,但是打开 app 之前会询问用户是否信任该帐号。

3、用个人开发者证书签名的开发版 ipa。签名方是开发者帐号(99刀那种)。app 安装的时候会判断该设备是否在开发者的设备列表,如果在而且签名完整,则成功安装。

我是第三种。先从越狱市场上下载一个 ipa 下来看看,用 codesign --verify 查看一下签名信息:

invalid signature (code or signature have been modified)

签名无效,说明包被修改过。既然这样,我也来改了。首先去 member center 创建一个新的 appId,然后修改 app 包里面的 Info.plist,把 bundle identifier改成我自己创建那一个,然后

codesign -f -s "xxx" Payload/Oceanhorn.app

xxx 就是我的开发者帐号名称,在 keychain 里面可以看到。

如果app 需要一些授权的,比方说 universal link 之类,会创建一个 entitlement 文件,那么也需要签名。

比如 codesign -f -s $certifierName  --entitlements entitlements.plist Payload/Oceanhorn.app

签名完,重新打包 

zip -r newIpa.ipa Payload

然后查看一下签名信息:

这些的 Authority 变成我自己了。证书颁发机构也变成了开发者证书中心。

然后用 iTunes 打开,安装,成功。

有一些应用由于触犯天条,是不可以在 app store 上架的,比方说著名的 PSP 模拟器 PPSSPP,它们一般会在越狱市场上上架,不过是以一个 deb 包的形式。那这种又怎么安装到我们非越狱的手机上呢?

我们尝试解压一下 deb 包,发现有两个 gz 包,一个 binary 文件。把其中一个 data 的 gz 包再解压,有两个文件夹,其中一个 Application 文件夹有一个 app文件,没有签名。如法炮制,用自己的帐号帮它签上名,然后创建一个 Payload文件夹,放进去,zip 打个包,安装,成功。


对开发者而言,用自己的帐号重签名可以随便安装任何 ipa,那对于普通用户而言,签名意味着什么呢?

1、非越狱手机用户,如果有恶意开发者修改了微信,比如利用动态库依赖加了些后门,然后重签一次名,帮你装到手机上,那么。。。。呵呵。要防止也很简单,请确保每一个 APP 都是从 APP STORE 上下载的。

2、对于越狱手机用户,越狱的过程其实就是关闭签名校验的过程,所以什么李鬼都能混进来,自求多福吧。

最后,请珍惜那些愿意花钱买 app 的开发者,因为他们都是体面的人。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容