ios超级签名原理解析

摘抄自:超级签名-原理/机制/技术细节-完全解析

超级签名流程:演示

签名原理:

所谓的超级签名原理其实就是使用了苹果提供给开发者的Ad-Hoc分发通道,把安装设备当做开发设备进行分发,换句话说就是用Ad-Hoc方式进行打包和分发。

既然是使用Ad-Hoc方式进行分发,那么签名也就继承了Ad-Hoc的所有优缺点:

优点:

1、直接分发,安装即可运行,不再需要用户去处理信任证书等操作。

2、应用稳定,基本不存在掉签的风险。

缺点:

1、单个开发者账号的IPhone设备数量最大是100台,导致签名成本非常高,超过后要用新的开发者账号重签。

2、开发者账号需要预先写入安装设备的UDID,在工具链不通的情况下,获取用户的UDID相对困难和繁琐,而且手动写入UDID不存在商用可行性,当然目前这个缺点被解决了。

整体运行流程图:


1、用户手机安装预留的描述文件,会向服务器发送设备udid。

2、服务器收到udid后,将udid添加到开发者账号下。

3、然后用此udid更新证书描述文件,用更新好的描述文件重签名ipa包。

4、最后将签名好的ipa包文件上传至服务器,分发给用户下载。

关键技术细节:

一、使用配置文件获取设备udid:

1、在你的Web服务器上创建一个.mobileconfig的XML格式的描述文件,提供给用户下载;

2、用户在所有操作之前必须通过某个点击操作完成.mobileconfig描述文件的下载安装;

3、配置好服务器需要的数据,比如:UDID,需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;

4、当用户设备安装描述文件后,设备会回调你设置的URL,如果你的URL返回302跳转的话,Safari浏览器会跳转到你所给的地址;

XML代码格式如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

    <dict>

        <key>PayloadContent</key>

        <dict>

            <key>URL</key>

            <string>一个接收UDID的网址</string>

            <key>DeviceAttributes</key>

            <array>

                <string>UDID</string>

                <string>IMEI</string>

                <string>ICCID</string>

                <string>VERSION</string>

                <string>PRODUCT</string>

            </array>

        </dict>

        <key>PayloadOrganization</key>

        <string>GuangdongQi</string><!--组织名称-->

        <key>PayloadDisplayName</key>

        <string>AppFree</string>

        <key>PayloadVersion</key>

        <integer>1</integer>

        <key>PayloadUUID</key>

        <string>9CF421B3-9853-4454-BC8A-982CBD3C907C</string><!--自己随机填写的唯一字符串,http://www.guidgen.com/ 可以生成-->

        <key>PayloadIdentifier</key>

        <string>com.gpon.profile-service</string>

        <key>PayloadDescription</key>

        <string>This temporary profile will be used to find and display your current device's UDID.</string>

        <key>PayloadType</key>

        <string>Profile Service</string>

    </dict>

</plist>

有两点需要注意的是:

1、接收网址的地址需要SSL签名;

2、mobileconfig下载时设置文件内容类型Content Type为:application/x-apple-aspen-config(遇到问题的都是因为这个),或者像这里用一个简单页面做好下载mobileconfig文件,引导用户安装

二、注册设备udid,并更新下载描述文件:

接下来的关键点就是如何在获取到用户的UDID之后,秒级完成注册新的开发者设备+更新Provisioning Profile,这里我们需要借助开源工具(Spaceship)


Spaceship公开了Apple Developer Center的API,而且执行速度比解析开发者Web页面快两个数量级,从而在非常短的时间内搞定Provisioning Profile。 这个框架解决了整套机制的关键问题,成为整个工具链的基石。

spaceship 是Fastlane的一个框架,安装spaceship:

sudo gem install fastlane -n /usr/local/bin

sudo gem install pry  -n /usr/local/bin

fastlane spaceship

这里具体怎么获取udid和更新Provisioning Profile的技术细节可以参考spaceship官方文档,或者参考我整理的超级签名核心源码。

三、自动签名IPA包:

自动签名其实应该有一万个解决方案,通过命令行脚本/Python脚本/或者其他第三方都能实现。

这里推荐使用Sigh这个框架来解决这个问题

安装sigh:

sudo gem install sigh

重签名ipa包:

fastlane sigh resign

这里具体对ipa包重签名可以参考sigh官方文档,或者参考我整理的核心源码。

四、将签名好的应用上传至服务器,分发给用户下载即可。可以借助AppDeploy这个框架进行分发。

五、结束语:

到目前为止,整套超级签名技术已经完全实现了。该技术仅可当作有兴趣的同学学习学习,不可进行商用选择。苹果对于App的分发审核管控可以说是非常严苛,这背后既有安全考虑,也有垄断利益。但无论如何,对于终端用户都是利大于弊的措施,App审核保护了无数的手机用户免受恶意程序的侵害。 个人强烈反对这种绕过审核的分发形式。同时我要指出,分发平台以这种情况绕过苹果的审核严重违反《APPLE开发商计划许可协议》的3.3.3条款。

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

推荐阅读更多精彩内容

  • 摘抄自:超级签名-原理/机制/技术细节-完全解析 蒲公英:超级签名 shell脚本实现iOS包重签名及代码注入 反...
    疯子摆摊卖回忆_595b阅读 1,426评论 0 3
  • 昨天跟小龙沟通完,自己的那种孤独感、悲凉就化解了。恰逢狄姐姐回来,她这两天能量爆棚,我们说了几句话,之前的不快,就...
    新芽作伴阅读 158评论 0 2
  • 在飞速发展的未来世界,人工智能已经遍布人们的生活。 不管吃饭、穿衣、出行,都可以用「命令」的方式完成。 可偏偏,男...
    心灵贵族阅读 459评论 0 0
  • 找出我的创新点,图片最好标出来源,最好自己画,穿正装最好,定时间,格式,封面格式不能改,19张ppt(讲不完).,...
    一鱼鱼阅读 1,555评论 0 1
  • 诗图佳得阅读 133评论 1 1