iOS逆向 -- 应用签名原理以及重签名

前两篇介绍了 RSA、HASH、和对称加密,今天结合iPhone感受一下苹果的双重认证签名

1.针对普通用户

因为市场上软件参差不齐,苹果为了保证用户手机安全,所以要求必须是通过App Store上下载的App才能进行安装(也就是经过了苹果审核的ipa包才能在手机上安装)

那么如何做到的呢

1.第一层认证 (公钥A 私钥A - 因为后面还有一层 所以给公钥私钥起了个名字)

iPhone手机上存有 公钥A

苹果服务器存有私钥A

这样就保证了苹果手机只能识别苹果服务器传过来的ipa包 - 这一步就叫做代码签名

代码签名的方式跟上节课讲的数字签名是一样的

流程大致就是苹果服务器使用私钥A对App数据的hash值进行签名,手机接收到数据后用公钥A验证这个hash值跟App数据

2.针对开发者用户 企业证书

如果只用一层认证的话 确实保证了用户使用App 只能从App Store上下载的问题

但是伴随而来的问题就是开发者如何使用真机调试了?

接下来就是第二层认证了

Mac电脑上 也有一对儿RSA 我们称之为 公钥M 私钥M

首先我们回顾一下 我们开发者制作证书的过程 来一并解释一下

首先申请证书前 我们需要申请一个csr文件 通过钥匙串访问-证书助理-从证书颁发机构请求证书

这一步其实就是就是把mac电脑里的公钥M传给苹果服务器 然后苹果服务器用私钥A 对公钥M进行签名并返回给mac电脑

然后就生成了.cer文件。

第二步我们通过选择appid 和 cer文件 以及已经在developer网站注册过的设备 生成一个描述文件

所以此时描述文件里现在有【设备ID、AppId、权限文件、cer文件(苹果服务器利用私钥A进项签名的公钥M)】

第三步利用证书进项真机调试的时候 xcode做了什么呢?

用私钥M对App数据进行签名 和描述文件一起传给了iPhone

我们还记得苹果手机有公钥A,这时候苹果手机利用公钥A对描述文件里的cer文件(私钥A签名的公钥M)进项认证得到 公钥M

而此时app数据使用的私钥M签名,当手机拿到公钥M也就能对APP数据签名进行认证了。

当然还有appid 和 设备id的校验 - 苹果做这一步就是为了保证开发不能在任何手机上安装(只限99台哦)!

接下来就要来点儿干货了

应用重签名

首先找个已经运行真机的项目 - 在Products 下有个 .app文件 右键showInFinder 然后选中该文件右键 显示包内容

  1. 删除插件(PlugIns/)和带有插件的.app包(比如Watch)
  2. 对Frameworks里面的库进行重签名
  3. 给可执行文件 添加执行权限
  4. 添加描述文件
  5. 替换BundleID
  6. 通过Entitlements 重签.app包

这是一个比较完整的手动重签过程,有兴趣的同学可以自行查阅自己体验

利用Xcode重签名可以给我们省几步,第3步,第4步还有第6步。

当然剩下的这几步 我们可以写成 shell脚本 方便以后使用 可以在这里下载该脚本,里面注释相当详尽,自行查阅

 

接下来就是新建一个工程,改好bundleid 确保有对应的描述文件,然后运行找个空项目。

在Build Phases里面添加一个Run Script 并添加sh appSign.sh 在此之前要下载该文件 放到工程目录下,并添加执行权限。

然后在根目录下创建个一个APP的文件夹并将越狱ipa放进去,cmd+r 即可。

其实写这些东西课能并不能让更多的读者去完全了解该过程(本人描述能力有限,文字并不能很好的表达,也没有太多精力去搞),仅此记录一下自己的学习历程吧。

我创建个一个MVVMDemo,这是之前写着玩的,然后直接拿来用了。

 

你可能感兴趣的:(iOS逆向 -- 应用签名原理以及重签名)