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

目录
相关文章
|
9月前
|
存储
13-iOS消息转发机制以及常用场景
13-iOS消息转发机制以及常用场景
35 0
|
22天前
|
安全 算法 数据安全/隐私保护
探索iOS与Android的隐私保护机制
【6月更文挑战第5天】在数字时代,隐私保护已成为用户最关心的问题之一。iOS和Android作为两大主流操作系统,各自发展出了独特的隐私保护技术。本文将深入探讨这两个平台在隐私保护方面的策略、技术和挑战。
20 3
|
13天前
|
Linux 数据库 iOS开发
超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名
该系统完全在linux下运行,不存在使用第三方收费工具,市面上很多系统都是使用的是第三方收费系统,例如:某心签名工具,某测侠等,不开源而且需要每年交费,这种系统只是在这些工具的基础上套了一层壳。请需要系统的放大你们的眼睛。
15 0
|
API iOS开发
iOS 沙盒机制
iOS 沙盒机制
120 0
|
安全 iOS开发 开发者
ios签名工具永久有效吗?
苹果APP上架难,不用越狱,下载未上架APP!
|
安全 Linux 网络安全
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
2356 0
【IOS实用玩机技巧】爱思助手 IPA 签名功能常见问题汇总(iOS上架)
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
167 0
iOS小技能:lldb打印block参数签名
|
数据安全/隐私保护 iOS开发
iOS逆向小技能:解锁无密码的设备、判断设备是否锁定、锁定设备、打开某个程序
介绍lua 函数: runApp、closeApp、getScreenSize、getDeviceID、lua_exit、isFrontApp。
208 0
|
算法 安全 Java
IOS 联真机签名解决方案
IOS 联真机签名解决方案
IOS 联真机签名解决方案
|
算法 安全 JavaScript
IOS 某电商App签名算法解析(二) Frida RPC调用
IOS 某电商App签名算法解析(二) Frida RPC调用
IOS 某电商App签名算法解析(二) Frida RPC调用