iOS逆向之App签名

iOS App签名

在学习iOS签名之前,需要对密码学有一定的了解,比如RSA加密、HASH哈希函数

参考:https://www.jianshu.com/p/003288dfb3b7

一、简单的签名原理:

  • 目的:
  • 保证每个App都是经过苹果公司官方认证的
  • 背景:因为手机和系统都是苹果公司生产的,所以苹果公司可以在手机上内置公钥,然后在App Store上放置私钥
  • 苹果手机:公钥
  • App Store:私钥
  • 原理:

    1.App上传到App Store时,苹果公司拿到App的HASH(MD5,SHA等)值,然后用私钥进行加密(签名),这时候只有手机上的公钥才可以解密;

    2.手机下载应用安装App时,先用公钥解密(验证签名),拿到HASH值,然后将此HASH值,与要安装的App的HASH值进行校验,如果App有被修改过,则校验失败。这样就可以有效的保证每个App都是经过苹果公司官方认证的。

弊端:

这样的做法,需要所有的App上传App Store,才能在手机上安装使用,那么当开发者要用真机调试时,则必须将开发阶段的App上传App Store,才能调试;另外企业账号的App并不用上传到App Store就能安装使用。这样的做法明显不合理,所以苹果公司在此基础上再做修改。

签名原理图1:

二、进阶的签名原理:

*目的:

  • 没上传App Store的应用,要经过苹果的允许才能安装
  • 背景:
  • mac电脑:私钥M和公钥M(电脑生成)
  • 苹果服务器:私钥A
  • iPhone手机:公钥A
  • 原理:

    1.mac电脑将公钥M(生成的CSR文件)和开发者信息传到苹果服务器,这个过程叫做申请证书

    2.苹果服务器对公钥M进行加密(用私钥A来加密),生成证书文件(包含公钥M和公钥M的HASH值),发送给mac电脑安装证书,存在本地钥匙串

    3.苹果电脑安装App到手机时,做了一件事情:用私钥M对App的HASH值进行加密(签名) ,这时的APP内部实际包含了APP的签名(私钥M加密App的HASH值)、第2步生成的证书文件(包含公钥M和公钥M的HASH值),App可执行文件以及其他信息

    4.两次解密过程:

    4.1. iPhone手机拿到证书文件(包含公钥M和公钥M的HASH值),因为手机里有公钥A,所以能解密证书文件,得到公钥M和公钥M的HASH值,先验证公钥M生成的HASH值(MD5,SHA等)是不是和证书文件里的公钥M的HASH值一致,确保证书没有被修改;

    4.2. 验证一致后,就可以用公钥M来解密第2步的APP的签名,同样道理可以验证App是否被修改过。 因为在开发阶段App会经常修改,所以App就算是修改过,也能安装。第4步主要是验证证书是不是苹果认证的,只要证书对就可以安装运行。

这种方式能够保证安装的App是经过苹果允许的,但是还有弊端。

弊端:

只要申请一个证书,就可以安装在所有的iOS设备。

签名原理图2:

三、终极的签名原理:

*目的:

  • 不能滥用安装
  • 背景:
  • mac电脑:私钥M和公钥M(电脑生成)
  • 苹果服务器:私钥A
  • iPhone手机:公钥A
  • 原理:

    加了两个限制:

    第一个:需要在苹果服务器注册过的设备才能安装,证书对应的是有设备的(UUID)

    第二个:签名只能针对某一个App,并且还需要UUID、AppID、推送,后台运行等权力描述信息,苹果公司把这些权限统一生成一个文件,称为权限文件,专门用来描述App签名的权限,并最生成Provision Profile(描述文件):包含设备IDs,AppID,Entitlements(权力文件包含是否可调试,推送,后台运行等信息)。

1.在进阶的签名原理中的第2步,证书文件(包含公钥M和公钥M的HASH值)和Provision Profile(描述文件)传给发送给mac电脑;

2.在进阶的签名原理中的第3步,Provision Profile(描述文件)也会和证书文件一起打包进去 。

查看Provision Profile信息:

cd ~/Library/MobileDevice/Provisioning\ Profiles/
ls

打开文件夹:

open .

在该目录下用终端查看:

security cms -D -i 0ae1aea3-6094-5dc4dc867596.mobileprovision

其中包含了一些重要信息:

  • TeamName
  • AppIDName
  • ProvisionedDevices 设备
  • UUID 描述文件本身的UUID
  • Entitlements:
  • get-task-allow 是否可以调试
  • com.apple.developer.team-identifier

签名原理图3

原文地址:https://www.cnblogs.com/WinJayQ/p/9029404.html

时间: 2024-10-24 07:13:25

iOS逆向之App签名的相关文章

iOS逆向之利用Xcode重签名

iOS逆向之利用Xcode重签名 准备工作 非越狱的iPhone手机 用PP助手下载: 微信6.6.5(越狱应用) 步骤 新建工程"Xocde重签名",选择开发证书,在真机上运行 解压微信6.6.5(越狱应用).ipa,在微信-6.6.5(越狱应用)->Payload下,将WeChat.app改名为Xocde重签名.app 在Products->Xcode重签名上右击show in finder 将第2步的Xocde重签名.app拷贝过来,替换. *以下几个步骤可以参考上一

XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相)

XE6 & IOS开发之免证书真机调试(1):颁发属于自己的App签名证书(有图有真相) 2014-08-25 21:26 网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 1.自己给自己颁发证书,用于给App签名.(如果还没有MAC环境,请参照"XE6移动开发环境搭建之IOS篇"进行配置.)---------------------------------------------------------

ios APP 签名

前言 相信很多同学对于iOS的真机调试,App的打包发布等过程中的各种证书.Provisioning Profile. CertificateSigningRequest.p12的概念是模糊的,导致在实际操作过程中也很容易出错.好在Xcode8.0出现了Automatically manage signing,让我们在这步操作中减少了难度.虽然说我们在Xcode8.0之后可以选择让Xcode自动管理了,但是我们还是应该知道App签名的原理.本文尝试从原理出发,一步步推出为什么会有这么多概念,希望

iOS开发之App间账号共享与SDK封装

App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SDK, 该登录SDK中包括登录.注册.忘记密码等功能,当然该SDK中包括这些功能的UI.数据验证等业务逻辑.网络请求.数据存储等等.当然此处的登录SDK是一个简化版的,真正的登录SDK比这个考虑的东西要多的多,如果在加上多个App进行登录账号的共享的话,那么考虑的东西就更为复杂了. 本篇博客就先封装一个LoginSDK, 让后将该SDK植入到两个App中(一个暂且叫做"App One&q

IOS逆向分析笔记——replay逆向分析

正常找出视频或者图片处理文件的GL脚本就是找出脚本加载的函数glshadersource断下就好了,上周在分析replay的时候很奇怪IDA没有找到glshadersource这个函数,于是我在反汇编窗口里搜索glshadersource,找到了很多用到它的相关函数,于是一一尝试没有一个能断下,想到图像处理一定要调用GL脚本,于是搜索GLSL找到相关函数还是没有一个能断下,于是又所有打开文件的函数依然没有断下 于是茫然了,试了很多方法,搜索了视频相关的函数,找到捕捉输出的缓冲区样本函数didou

ios逆向之:dump应用的头文件

平常我们用class-dump导AppStore中下载的应用的头文件时,就dump出了个CDStructures.h文件,还什么内容都没有. 这就属于常识问题了-_- 就像这样,所以呢,我们还需要先拿个榔头给它砸一下壳 这里借用了某行的APP,无恶意行为 先看看工具准备吧,什么 dump.decrypted.Xcode.crcyript 啦 网上都是有资源滴 dumpdecrypted  github地址  https://github.com/stefanesser/dumpdecrypted

iOS逆向开发(1):基础工具 | ssh | scp | socat

小白:小程,我一直想问,什么是逆向来着?是逆向行驶吗? 小程:理解为逆向行驶也没错.一般的项目是从无到有,而逆向是从已有的状态入手,分析出已有的流程与结构的手段. iOS上的逆向开发,是一件有趣的事情(虽然有时很痛苦),而且还可能给你带来收益. 在接下来的几篇文章,小程会尝试介绍iOS逆向的一系列的知识与技能:从基础工具的使用,到目标类的定位.目标代码的调试,再到注入微信的实战示例. 本文介绍iOS逆向的基础工具的使用. 硬件方面,你需要一台iOS设备(iphone/itouch/ipad,以下

ios俩个APP之间跳转、传值

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString = [NSString stringWithFormat:@"AppJumpSecond://%@",textField.text]; [[UIApplication sharedApplication] open

IOS逆向分析——GL脚本的提取

总结:要逆一个程序必须清楚地知道程序的结构和常用的API函数,不清楚一个程序而去逆出结果是不可能滴 首先是glsl脚本运行的全过程,第一步是为shader的运行创建一个容器GLuint glCreateProgram(void),第二步是把编译好的shader附加到程序void glAttachShader(GLuint program, GLuint shader),编译好的shader可以是多个所以第二步可以重复多步把每一个编译好的一一附加到程序,顶点shader和像素shader一一成对,