这篇关于codesign的文章不错 https://www.objccn.io/issue-17-2/ 英文原文:https://www.objc.io/issues/17-security/inside-code-signing/

第二篇 http://blog.cnbang.net/tech/3386/

首先ipa重签名并不是一个程序发布的标准途径,多用于特殊情况。作用就是让因签名问题无法运行在真机上的ipa能在真机上顺利运行。

因为我要在ios10上测试,而网上的教程大多比较早,曾经一度认为这种重签名方法在ios10上失效了,结果是自己没有用对命令。

重签名的核心就是运行codesign命令,不但需要签名程序,还需要对ipa中的embeded framework进行签名(没使用就不用了),否则会闪退。

详细的步奏我就不写了,请参考:http://stackoverflow.com/questions/6896029/re-sign-ipa-iphone

这里列出2个关键命令:

//重签名应用
/usr/bin/codesign -f -s "iPhone Distribution: xxx" --entitlements entitlements.plist Payload/.app
//重签名应用中的embeded framework(如果存在的话就需要运行)
/usr/bin/codesign -f -s "iPhone Distribution: xxx" --entitlements entitlements.plist Payload/.app/Frameworks/* 

对framrworks中的文件签名,再利用codesign 命令查看,可以有如下截图

MacBook-Air:test Rufus$ codesign -vv -d /Users/Rufus/Desktop/test/Payload/.app/Frameworks/libswiftDarwin.dylib
Executable=/Users/Rufus/Desktop/test/Payload/.app/Frameworks/libswiftDarwin.dylib
Identifier=com.apple.dt.runtime.swiftDarwin
Format=Mach-O universal (armv7 armv7s arm64)
CodeDirectory v= size= flags=0x0(none) hashes=+ location=embedded
Signature size=
Authority=iPhone Distribution: xxx(隐藏了)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time= Apr , :: PM
Info.plist entries=
TeamIdentifier= xxx(隐藏了)
Sealed Resources=none
Internal requirements count= size=

可以看到,这个dylib被顺利签名了。

另外,对12121212.app的签名,其实就是对其中的2进制文件12121212进行了签名,还顺便计算了一下app中的其他文件的hash值,保存在了_CodeSignature下的CodeResources文件中。

codesign命令针对的就是 可执行2进制文件 和 动态链接库文件,其他的比如png,nib等资源文件,一概不会codesign。

这里 entitlements.plist 比较关键,先贴出一个基本的配置

<?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>application-identifier</key>
<string>xxx.com.xxx.xxx</string>
<key>get-task-allow</key>
<false/>
</dict>
</plist>

如果ipa中使用了keychain,还需要向entitlements加入下面这对键值,并且,要修改info.plist文件里的bundle id。

<key>keychain-access-groups</key>
<array>
<string>xxx.com.xxx.xxx</string>
</array>

说到这里,重签名能够把别人ipa重新签名,当成自己的ipa向app store 发布吗?我们测试一下

测试过程如下,我使用公司的账户签名一个企业级应用,之后使用自己的帐号吧这个ipa重签名,并上传到app sotre。

由于xcode默认只支持使用xarchiver 上传,而我们这里是ipa文件,所以我们使用Application Loader上传。

首先,我使用了最基本的重签名方式,即:没有改变ipa的bundle id。上传出现了错误:

看来必须把bundle id改了才行。修改info.plist中的bundle id后,再次上传,进行到了下面的步奏,卡住不动了:

经过了漫长app上传和校验过程,返回了错误:

ERROR ITMS-: "Invalid Signature. A sealed resource is missing or invalid. Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Additionally, make sure the bundle you are uploading was built using a Release target in Xcode, not a Simulator target. If you are certain your code signing settings are correct, choose "Clean All" in Xcode, delete the "build" directory in the Finder, and rebuild your release target. For more information, please consult https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html"

没什么有意思的信息,就是提示签名是有问题的,无法上传app store。

要明白为什么苹果认为这个ipa是非法的,就需要仔细研究一下ipa签名的过程了。

iOS ipa 重签名 resign的更多相关文章

  1. ipa重签名最直接的教程

    ipa 包重签名最新最简单教程 重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 appkey 等操作,直接重签名之后依然可以拥有这些功能,更快的发布测试或者灰度版本. 本 ...

  2. iOS逆向必备绝技之ipa重签名

    一.重签名准备工作: 找到开发者证书和配置文件: 列出所有开发者证书文件: security find-identity -p codesigning -v 找一个开发环境配置文件生成entitlem ...

  3. ipa重签名

    为什么要研究重签名问题?将程序打包成ipa包后,ipa包中会包含Provisioning Profile和_CodeSignature等文件,里面包含了对整个ipa的签名信息. 一旦改动ipa中的不论 ...

  4. iOS企业重签名管理软件之风车签名

    这是一款在Mac平台下安全可控的iOS签名管理软件,旨在对签名后的APP能够完全控制,包括APP的开启或禁用.设置到期时间锁.注入第三方动态库文件.设置安装限量.修改APP名称和自定义Bundle I ...

  5. iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 QQ交流群:811715780 进入 Proje ...

  6. iOS ipa包重签名

    背景:公司做游戏SDK的,提供SDK给第三方后,他们打包过来我们需要分发在不同的渠道,这个时候需要修改SDK的配置文件,ipa文件修改后是需要手机越狱或者ipa重签名才能安装成功的,所以研究了一下重签 ...

  7. ios app 开发中ipa重新签名步骤介绍-备

    作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...

  8. iOS 应用签名原理&重签名

    在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等.但是很多相应的开发者并不理解iOS App应用签名的原理和流程.今天着重讲 ...

  9. ipa 重签

    IPA 重签名 时间 2014-03-03 10:28:36  txx's blog原文  http://blog.rpplusplus.me/blog/2014/03/03/ipa-re-codes ...

随机推荐

  1. c#, AOP动态代理实现动态权限控制(一)

    因最近工作需要一个动态的权限配置功能,具体实现逻辑是c#的动态代理功能,废话不多说,直接干货.需求: 用户分为管理员.普通用户 不同用户拥有不同功能权限 用户的权限可配置 新增功能时,不用修改权限配置 ...

  2. 玩转3D Swiper美女性感秀之思路分析总结

    前言 继一次的3D魔方之后,这次利用CSS3的transform.translate.rotate.preserve-3d等结合JS的requestAnimationFrame.class带你一起玩转 ...

  3. 全国天气预报信息数据 API 功能简介与代码调用实战视频

    此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...

  4. 定制json序列化

    最近有人问我怎么定制一个json序列化,使序列化的时候只写出声明的父类成员,而不要把实际子类的成员写出来.当然,序列化用的是大家用的最多的json.net. 简单的说,这是个契约怎么解析的问题,jso ...

  5. 封装的通过微信JS-SDK实现自定义分享到朋友圈或者朋友的ES6类!

    引言: 我们经常在做微信H5的过程中需要自定义分享网页,这个如何实现呢?请看如下的封装的ES6类及使用说明! /** * @jssdk js对象,包括appId,timestamp,nonceStr, ...

  6. Java的selenium代码随笔(4)

    //高亮操作元素public void highlight(WebElement webElement) {JavascriptExecutor javascriptExecutor = (Javas ...

  7. Delphi Create(nil), Create(self), Create(Application)的区别

    最近的项目中经常在程序中动态创建控件,势必用到Create. 但是随之而来的问题就是动态创建的控件是否可以正确的释放内存? 以及 Create(nil), Create(self), Create(A ...

  8. java垃圾回收GC

    垃圾回收时,暂停虚拟机运行 基础假设:大部分对象只存在很短的时间 对于新生代,Minor GC经常会发生 Major/Full GC会对老生代做GC 老生代GC采用Compact算法,移动形成完整的空 ...

  9. ORM基础之字段及其参数介绍

    一.外键ForeignKey 1.字段参数 1.to 设置要关联的表 2.to_field 设置要关联的表的字段(一般不设置,默认使用主键id关联) 3.related_name 反向操作时,使用的字 ...

  10. SPOJ-LCS Longest Common Substring 【后缀自动机】

    题目分析: 用没出现过的字符搞拼接.搞出right树,找right集合的最小和最大.如果最小和最大分居两侧可以更新答案. 代码: #include<bits/stdc++.h> using ...