开发者社区> JoanKing> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21204 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14926 0
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
37365 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20940 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
14844 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
16697 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22473 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
14036 0
+关注
433
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载