ipa重签名
为什么要研究重签名问题?
将程序打包成ipa包后,ipa包中会包含Provisioning Profile和_CodeSignature等文件,里面包含了对整个ipa的签名信息。
一旦改动ipa中的不论什么内容,比如添加一个头文件,签名就会失效,导致ipa无法安装。(貌似改变Info.plist是不影响的)
因此,假设要通过改动ipa包中的内容来篡改信息或注入代码(比如加一个动态库进去)的话。就须要解决ipa包的重签名问题。
准备
在重签名之前要做一些准备工作。
1.首先要下载并安装Xcode,里面有个codesign_allocate程序,在安装时/usr/bin中会多一个codesign的程序,该程序用于ipa包的签名。
2.企业证书的Certificate文件,私钥文件,Provisioning Profile文件等。注意企业证书一定要是iOS Distribution的类型,不能是iOS Development。
其他具体设置。如In-House等參见http://beyondvincent.com/blog/2014/07/30/provision-ios-ipa-app-for-in-house-enterprise-distribution/
重签名步骤
1.解压ipa
解压ipa得到Payload/[App name].bundle。打开bundle。
2.删除旧的ipa签名信息
删除bundle中的_CodeSignature文件夹。也就是删除之前ipa的签名信息。
3.更换证书
将bundle中旧的Provisioning Profile删除。用我们自己的企业证书的Provisioning Profile替代。
注意,要将ipa包中我们的企业证书改名为embedded.mobileprovision。
4.改动bundle内容
此时我们能够尽情地改动bundle中的内容。比如加入一个动态库。删除一张图片等。
注意:假设要往bundle中加入动态库,必须要先将其压缩成zip文件,在程序启动时将其解压到Documents文件夹下再dlopen。否则程序在启动时载入动态库文件会卡死在那里。
5.又一次签名
在完毕bundle内容的改动后。须要通过/usr/bin/codesign程序又一次签名。命令例如以下:
/usr/bin/codesign -f -s "iPhone Distribution: YourCompanyName" --resource-rules Payload/ MYAPP.app/ResourceRules.plist Payload/ MYAPP.app
当中iPhone Distribution能够从钥匙串訪问中获取,就是企业证书的名字,比如以下的"iPhone Distribution:XXXXXXXXXX":
具体的命令演示样例:
codesign -f -s "iPhone Developer: XXXXXXXXXX" --resource-rules Payload/NdCP_Game_Demo.app/ResourceRules.plist Payload/NdCP_Game_Demo.app
这条命令的意思是:使用keychain中"iPhone Developer: XXXXXXXXXX"标识的证书。依据Payload/NdCP_Game_Demo.app/ResourceRules.plist文件里的规则进行签名,假设ipa包中已经存在签名,那么将被替换,该过程生成的_CodeSignature文件夹将存放在Payload/NdCP_Game_Demo.app文件夹下。
在命令运行后,在bundle中会生成一个新的_CodeSignature文件夹,里面包含了新的签名信息。
6.又一次打包成ipa
在完毕上述工作后。能够生成新的ipa进行公布。演示样例命令例如以下:
zip -r ResignTest.ipa Payload
# 注意Payload后面不能有“/”
7.公布
经过打包公布測试。得出结论:对改动了ipa包内容和当中的签名后,重签名的ipa文件能够在非越狱设备和越狱设备上安装成功。注意,是通过带有SSL证书的站点和Apple系统安装的(企业内部分发程序)。不是通过PP助手那样的第三方工具安装的。
參考资料
http://www.cocoachina.com/bbs/simple/?t181236.html
http://www.169it.com/article/15588355475122308384.html
附录
1.codesign
在帮助文档中:
codesign -- Create and manipulate code signatures
codesign的选项:
-f, --force When signing, causes codesign to replace any existing signature on the path(s) given. Without this option, existing signatures will not be replaced, and the signing operation fails. -s, --sign identity Sign the code at the path(s) given using this identity. See SIGNING IDENTITIES below. --resource-rules filename During signing, this option overrides the default rules for identifying and collecting bundle resources and nested code to be sealed into the signature. The argument is the path to a property list (plist) file containing scanning and qualification instructions. See the code signing documentation for details.
其用法例如以下:
Usage: codesign -s identity [-fv*] [-o flags] [-r reqs] [-i ident] path ... # sign
codesign -v [-v*] [-R testreq] path|[+]pid ... # verify
codesign -d [options] path ... # display contents
codesign -h pid ... # display hosting paths
注意:CocoaChina论坛中当中一个帖子说重签名后,会影响到keychain的使用,这一步有待验证,后面会补充说明。
ipa重签名的更多相关文章
- iOS ipa 重签名 resign
这篇关于codesign的文章不错 https://www.objccn.io/issue-17-2/ 英文原文:https://www.objc.io/issues/17-security/insi ...
- ipa重签名最直接的教程
ipa 包重签名最新最简单教程 重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 appkey 等操作,直接重签名之后依然可以拥有这些功能,更快的发布测试或者灰度版本. 本 ...
- iOS逆向必备绝技之ipa重签名
一.重签名准备工作: 找到开发者证书和配置文件: 列出所有开发者证书文件: security find-identity -p codesigning -v 找一个开发环境配置文件生成entitlem ...
- iOS ipa包重签名
背景:公司做游戏SDK的,提供SDK给第三方后,他们打包过来我们需要分发在不同的渠道,这个时候需要修改SDK的配置文件,ipa文件修改后是需要手机越狱或者ipa重签名才能安装成功的,所以研究了一下重签 ...
- ios app 开发中ipa重新签名步骤介绍-备
作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到ios机器上进行测试,这个时候我们就需要打包in house版本的ipa了,打包in house实际上是一个将ipa应 ...
- ipa 重签
IPA 重签名 时间 2014-03-03 10:28:36 txx's blog原文 http://blog.rpplusplus.me/blog/2014/03/03/ipa-re-codes ...
- iOS逆向(五)-ipa包重签名
为什么要重签名? 1.在没有源代码的情况下,你已经对某个应用进行了资源修改(比如修改了启动图或图标等).修改完成以后,如果想要让APP可以正常使用,该APP一定要重新签名然后压缩成IPA文件. 2.如 ...
- 关于IPA文件重签名后如何跟踪管理APP的技术探讨和实践演示
前言:开发iOS的朋友都知道,在功能开发完成后,我们就会用申请的苹果账号在后台做证书配置,然后提交到AppStore,但是也有部分APP我们不需要提交到AppStore,比如内部测试用的APP.定制给 ...
- IPA的动态库注入+企业重签名过程
[摘录]之前在进行iOS测试过程中由于要获取一定数据信息,因此需要对原本的安装包进行代码注入并且重新打包安装,因此就需要使用重签名策略,在此进行分享,希望大家可以使用其中的方法来运用到自身的项目中. ...
随机推荐
- 配置虚拟域名,hosts文件起作用
快速打开hosts方法 开始->运行->system32->回车 当前路径文件夹drivers\etc\hosts hosts文件起作用,目前楼主知道有两个可能原因 1.刷新dns ...
- BZOJ2669 [cqoi2012]局部极小值 状压DP 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2669 题意概括 有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次.如果一个格子比所 ...
- HDU Tody HDU2112
不想用floyd了 也不一定适合 floyd只能处理小数据 dijkstra算法 wa了很久 一个是dijkstra里面的u 导致RE了无数次 下标溢出 还有就是注意细节 当起点和终点 ...
- 关于make: *** No rule to make target `clean'. Stop.这个莫名其妙问题的解决方法
执行make编译命令总报错,后来试试make clean命令也不行,报下面的错. make: *** No rule to make target `clean'. Stop. 真是莫名其妙的错误, ...
- JS中获取文件点之后的后缀字符
var FileName = $("#file").val(); var index1=FileName.lastIndexOf("."); var index ...
- python urllib2对http的get,put,post,delete
#GET: #!/usr/bin/env python# -*- coding:utf-8 -*-import urllib2def get(): URL = 'www.baidu.com' ...
- 4826: [Hnoi2017]影魔
4826: [Hnoi2017]影魔 https://lydsy.com/JudgeOnline/problem.php?id=4826 分析: 莫队+单调栈+st表. 考虑如何O(1)加入一个点,删 ...
- BZOJ.1497.[NOI2006]最大获利(最小割 最大权闭合子图Dinic)
题目链接 //裸最大权闭合子图... #include<cstdio> #include<cctype> #include<algorithm> #define g ...
- 潭州课堂25班:Ph201805201 爬虫基础 第十五课 js破解 二 (课堂笔记)
PyExecJs使用 PyExecJS是Ruby的ExecJS移植到Python的一个执行JS代码的库. 安装 pip install PyExecJS 例子 >>> import ...
- CocosCreator动作系统
废话没有,直接上代码,有注释可以看的, cc.Class({ extends: cc.Component, properties: { player:{ default:null, type:cc.N ...