iOS逆向-day9:签名机制(下)

简介: iOS逆向-day9:签名机制(下)

四、iOS签名机制 和 证书



  • 4.1、iOS签名机制 的简单介绍


  • iOS签名机制的作用
    答:保证安装到用户手机上的APP都是经过Apple官方允许的
  • 不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
  • 生成CertificateSigningRequest.certSigningRequest文件(自己Mac 电脑的公钥,一般我们从钥匙串获取的)
  • 获得ios_development.cer\ios_distribution.cer证书文件(自己电脑的公钥被苹果server端的私钥加密后的证书)
  • 注册device、添加App ID(配置的一些信息)
  • 获得*.mobileprovision文件(配置文件)
  • 4.2、certSigningRequest.cer.mobileprovision文件 究竟里面包含了什么?有何用处?


image.png

4.3、iOS签名机制 – 生成Mac设备的公私钥

CertificateSigningRequest.certSigningRequest文件:就是Mac设备的公钥


image.png

image.png

4.4、iOS签名机制 – 获得证书


image.png


  • ios_development.cerios_distribution.cer 文件:利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件

image.png

image.png


4.5、iOS签名机制 – 生成mobileprovision(配置文件)

image.png

image.png


4.6、iOS签名机制 - AppStore


  • 如果APP是从AppStore下载安装的,你会发现里面是没有mobileprovision文件的
  • 它的验证流程会简单很多,大概如下所示

image.png


五、重签名


  • 5.1、重签名的简单介绍
  • 如果希望将破坏了签名的安装包,安装到非越狱的手机上,需要对安装包进行重签名的操作
  • 注意:
  • 安装包中的可执行文件必须是经过脱壳的,重签名才会有效;
  • .app 包内部的所有动态库( .framework、.dulib)、AppExtension(PlugIns文件夹,拓展名是 appex)、WatchApp(Watch文件夹)都需要重新签名
  • 重签名打包后,安装到设备的过程中,可能需要经常查看设备的日志信息
  • 程序运行过程中:Window -> Devices and Simulators -> View Device Logs
  • 程序安装过程中:Window -> Devices and Simulators -> Open Console


  • 5.2、重签名步骤


image.png


  • 准备一个 embedded.mobileprovision 文件(配置文件)(必须是付费证书产生的,appid、device一定要匹配),并放入 .app 包中
  • 可以通过 Xcode 编译来自动生成,然后在编译后的 APP 包中找到
  • 可以去开发者证书网站生成下载
  • 从 embedded.mobileprovision 文件中提取 entitlements.plist 权限文件


// 第一步
security cms -D -I embedded.mobileprovision > temp.plist
// 第二步
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
  • 查看可用证书


security find-identity -v -p codesigning
  • 对.app内部的动态库、AppExtension 等进行签名


codesign -fs 证书ID xxx.dylib
  • 对 .app 包进行签名


codesign -fs 证书ID --entitlements entitlements.plist  xxx.app


  • 5.3、重签名 GUI 工具
  • 第一种:iOS App Signer(推荐)
    可以对 .app 重签名打包成 ipa,需要在 .app 包 中提取对应的 embedded.mobileprovision 文件
  • 第二种:iReSign
    可以对 ipa 进行重签名,需要提供 entitlements.plistembedded.mobileprovision 文件的路径


  • 5.4、通过 Theos 开发的动态库插件(dylib)
    我们在 Theos 开发的 动态库卡插件


image.png

image.png

重签名的app要是破壳的


image.png


image.png


5.5、动态库注入(或者是动态库的插入)


  • 可以使用 insert_dylib 库将动态库注入到 Mach-O 文件中
  • 下载好,打开,编译后把文件放在 /usr/local/bin 目录下


image.png

用法

  • insert_dylb 动态库加载路径/动态库 Mach-O文件,例如


insert_dylib @executable_path/动态库插件 Mach-O文件
  • 有 2 个经常用参数选项
    --weak 即使动态库找不不到也不会报错
    --all-yes 后面所有的选择都为 yes


insert_dylib @executable_path/动态库插件 Mach-O文件 --all-yes --weak
  • insert_dylib 的本质是往 Mach-O 文件的 Load Commands 中添加了一个 LC_LOAD_DYLIBLC_LOAD_WEAK_DYLIB
  • 在最后加上可执行文件的名称,把之前的可执行文件给替换掉,生成新的可执行文件


insert_dylib @executable_path/动态库插件 Mach-O文件 --all-yes --weak Mach-O文件


image.png

可以通过 otool 查看 Mach-O 的动态库依赖信息:otool -L Mach-O文件 或者 otool -L 动态库文件

image.png

5.6、更改动态库加载地址


  • 可以使用 install_name_tool 修改 Mach-O文件中动态库的加载地址
  • install_name_tool -change 旧地址 新地址 Mach-O文件或者动态库文件,如下
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate


image.png

  • 通过 Theos开发的动态库插件(dylib)
  • 默认都依赖于 Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
  • 如果将要动态库插件打包到 ipa 中,也需要将 CydiaSubstrate 打包到 ipa 中,并且修改下 CydiaSubstrate 的加载地址 @Loader_path
  • 2 个常用环境变量
  • @executable_path 代表可执行文件所在的目录
  • @loader_path 代表动态库所在的目录
  • 5.7、动态库插件安装未越狱手机上总结,以为 爱奇艺 安装插件为例,步骤如下
  • 第 1 步:使用越狱手机下载 爱奇艺 , 获取砸壳爱奇艺 app,我们这里使用 Clutch 工具


image.png


第 2 步:使用 Theos 开发的动态库插件(dylib) , 并开发插件

  • 使用 Reveal 找到要 hook 的控制器,比如 爱奇艺的首页 QYRecomChannelViewControllerV3


image.png

编写 Hook代码,在爱奇艺的首页 弹个提示框即可


image.png

把动态库运行在 越狱手机上,并获取动态库

cd 进入 Tweak.x 所在的文件夹下
make clean 
make
make package 
make install


上面的步骤执行完,获取动态库


image.png

第 3 步:拿到动态库依赖的 CydiaSubstrate


默认都依赖于 Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate


image.png


  • 第 4 步:获取一个包含 未越狱手机的 embedded.mobileprovision 文件(配置文件)
  • 可以通过 Xcode 编译来自动生成,然后在编译后的 APP 包中找到
  • 可以去开发者证书网站生成下载
  • 第 5 步:把 动态库插件、embedded.mobileprovision 文件、CydiaSubstrate 文件 放到 爱奇艺破壳后的包里


image.png


第 6 步:动态库插件的插入,使用工具 insert_dylib

insert_dylib @executable_path/动态库插件 Mach-O文件 --all-yes --weak Mach-O文件


  • 提示:我们这里指的 Mach-O文件 指的是爱奇艺的可执行文件 iQiYiPhoneVideo
  • 如:insert_dylib @executable_path/tweak_iqy.dylib iQiYiPhoneVideo --all-yes --weak iQiYiPhoneVideo


image.png

第 7 步:修改 动态库插件中 CydiaSubstrate 的路径


  • install_name_tool -change 旧地址 新地址 Mach-O文件或者动态库文件
  • 如:install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/CydiaSubstrate tweak_iqy.dylib


image.png


第 8 步:证书对 动态库插件和CydiaSubstrate 签名

  • 查看可用的证书:security find-identity -v -p codesigning

image.png

对我们开发的插件动态库进行签名

codesign -fs 证书ID xxx.dylib

image.png


  • 对 CydiaSubstrate 进行签名
codesign -fs 证书ID CydiaSubstrate


  • 检查我们的 APP 包还有没有其他的动态库,如:.app 包内部的所有动态库( .framework、.dulib)、AppExtension(PlugIns文件夹,拓展名是 appex)、WatchApp(Watch文件夹)都需要重新签名,和我们自己开发的动态库一样需要重新签名


  • 第 9 步: 对 .app 包进行签名,推荐我们使用 iOS App Signer.app 包进行重签名


codesign -fs 证书ID --entitlements entitlements.plist  xxx.app
  • 第 10 步: 安装重签名后的 app 包


image.png

目录
相关文章
|
存储
13-iOS消息转发机制以及常用场景
13-iOS消息转发机制以及常用场景
81 0
|
11天前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
16天前
|
安全 数据安全/隐私保护 Android开发
深入探索iOS系统安全机制:从基础到高级
本文旨在全面解析iOS操作系统的安全特性,从基础的权限管理到高级的加密技术,揭示苹果如何构建一个既开放又安全的移动平台。我们将通过实例和分析,探讨iOS系统如何保护用户数据免受恶意软件、网络攻击的威胁,并对比Android系统在安全性方面的差异。
|
1月前
|
存储 安全 数据安全/隐私保护
探索安卓与iOS的隐私保护机制####
【10月更文挑战第15天】 本文深入剖析了安卓和iOS两大操作系统在隐私保护方面的策略与技术实现,旨在揭示两者如何通过不同的技术手段来保障用户数据的安全与隐私。文章将逐一探讨各自的隐私控制功能、加密措施以及用户权限管理,为读者提供一个全面而深入的理解。 ####
56 1
|
4月前
|
调度 Swift Android开发
苹果iOS新手开发之Swift中的并发任务和消息机制
Swift的消息机制类似Android的Handler,实现任务调度有三种方式: 1. **Grand Central Dispatch (GCD)**:使用`DispatchQueue`在主线程或后台线程执行任务。 2. **OperationQueue**:提供高级接口管理`Operation`对象。 3. **RunLoop**:处理事件如输入源、计时器,类似Android的`Looper`和`Handler`。 **示例**: - GCD:在不同线程执行代码块。 - OperationQueue:创建操作并执行。 - RunLoop:用Timer添加到RunLoop中。
100 2
|
5月前
|
安全 算法 数据安全/隐私保护
探索iOS与Android的隐私保护机制
【6月更文挑战第5天】在数字时代,隐私保护已成为用户最关心的问题之一。iOS和Android作为两大主流操作系统,各自发展出了独特的隐私保护技术。本文将深入探讨这两个平台在隐私保护方面的策略、技术和挑战。
149 3
|
5月前
|
Linux 数据库 iOS开发
超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名
该系统完全在linux下运行,不存在使用第三方收费工具,市面上很多系统都是使用的是第三方收费系统,例如:某心签名工具,某测侠等,不开源而且需要每年交费,这种系统只是在这些工具的基础上套了一层壳。请需要系统的放大你们的眼睛。
43 0
|
API iOS开发
iOS 沙盒机制
iOS 沙盒机制
150 0
|
安全 iOS开发 开发者
ios签名工具永久有效吗?
苹果APP上架难,不用越狱,下载未上架APP!
|
安全 Linux 网络安全
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
2503 0
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)