iOS逆向 10:应用重签名(上)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: iOS逆向 10:应用重签名(上)

本文主要介绍重签名的几种方式,以及如何对应用进行重签名,


应用重签名


iOS逆向 09:应用签名中可知,签名是指原始数据的Hash值解密。那么重签名,顾名思义,就是指将原始数据的Hash值重新加密


本次介绍的应用重签名方式主要有以下几种:


  • Codesign重签名
  • Xcode重签名
  • Shell脚本重签名


下面来进行一一介绍


方式1:Codesign重签名


在iOS中,Xcode为我们提供了签名工具,即codesign,通过一些命令即可完成重签名,如下所示


  • $security find-identity -v -p codesigning: 列出钥匙串里可签名的证书
  • $Codesign –fs “证书串” 文件名 :强制替换签名
  • $Chmod +x 可执行文件 : 给文件添加权限
  • $security cms -D -i ../embedded.mobileprovision :查看描述文件
  • $codesign -fs “证书串” --no-strict --entitlements=权限文件.plist APP包
  • $Zip –ry 输出文件 输入文件  将输入文件压缩为输出文件


Codesign演示


如何获取越狱手机的ipa包


  • 1、建立链接:sh usbConnect.sh
  • 2、连接手机:sh usbX.sh
  • 3、查看进程:ps -A
  • 4、筛选进程,找到微信进程:ps -A | grep WeChat
  • 5、拷贝:scp -r -P 12345 root@localhost:路径 ./
  • 6、查看拷贝的app包:cd WeChat.app
  • 7、查看可执行文件:otool -l WeChat | grep crypt (此时的cryptid 是 1,表示加密过的)
  • 8、查看app的权限:codesign -vv -d WeChat.app (有签名权限)


准备工作


注:所需的资料可在这里获取链接,密码: ch5c


  • 1、准备一个微信的越狱包,这里准备的是通过MyZip解压 微信-7.0.8.ipa

其中的WeChat.app包含两个东西:app + app签名信息


image.png

2、查看app包的签名信息(CMD+G): codesign -vv -d WeChat.app

image.png

  • 3、查看钥匙串的证书:security find-identity -v -p codesigning
  • 4、查看可执行文件详细信息:otool -l WeChat > ~/Desktop/123.txt。其中有cryptid加密id(0表示没有使用加密算法)


codesign重签名步骤


给应用重签名的步骤如下:


  • 1、删除插件和带有插件的.app包(例如Watch、plugins)
  • 2、对Frameworks里面的库进行重签名
  • 3、给可执行文件 +x(可执行)权限
  • 4、新建一个空工程
  • 5、添加描述文件(4中的空工程通过真机编译得到,且要运行,因为需要将描述文件安装到手机)
  • 6、替换.app包中BundleID(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)
  • 7、通过授权文件(Entilements)重签.app包、
  • 1)查看描述文件:$security cms -D -i embedded.mobileprovision
  • 2)将描述文件中Entilements 拷贝出来,生成plist文件。(文件名称entitlements.plist
  • 3)用权限文件签名APP包: $ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app
  • 8、最后通过Xcode安装
  • 注:mach-o最重要的两块:代码块 + 数据块,其中加密主要是加密代码


codesign重签名演示


  • 前提:
  • 需要签名:wechat可执行文件(即Mach-O文件) + Frameworks
  • 需要删除:plugins(免费普通账户无法签名,可以删除) + Watch(也无法签名,删除)
  • 1、查看Frameworks,也是有签名信息的:codesign -vv -d andromeda.framework

image.png

2、重签名Frameworks:codesign -fs "Apple Development: chenjialin1016@foxmail.com (C2893S7GXH)" andromeda.framework


image.png

  • 然后执行退出 cd ..
  • 3、查看可执行文件:ls -l WeChat

image.png

  • 注:重签名必须要有可执行权限,即 - x


  • 4、新建一个工程,获取chenjialin1016@foxmail.com (C2893S7GXH)对应的描述文件 ,例如 xxx xxx(Personal Team) 获取可执行文件中的描述文件,拷贝至WeChat包
  • 5、描述文件和BundleID有关系,需要修改WeChat的BundleID com.tencent.xinxxx.com.test
  • 6、查看描述文件的权限:security cms -D -i embedded.mobileprovision

image.png

查看Entitlements(权限),是一个plist文件

image.png

将其拷贝至一个plist文件(名称为Entitlements,需要新建)(路径:propertyList - open sourceCode - 拷贝 )

image.png

  • 将其拷贝至payload文件夹中
  • 7、签名app(即mach-o签名):codesign -fs "Apple Development: xxxxxx@foxmail.com (C2893S7GXH)" --no-strict --entitlements=Entitlements.plist WeChat.app
  • 8、查看WeChat签名:codesign -vv -d WeChat.app, 此时签名信息已经替换


image.png9、安装

image.png

  • 10、调试:Debug - Attach to process - WeChat


Codesign重签名缺点:过程太繁琐


方式2:Xcode重签名


下面我们通过Xcode来进行重签名,步骤如下:


  • 1、删除Plugins、Watch
  • 2、重签名Frameworks
  • 3、创建并运行一个空工程
  • 4、修改Info.plist中的BundleID改为 空工程的BundleID
  • 5、利用修改后的app包,替换空工程的app包
  • 6、直接运行


与CodeSign重签名相比:少了其中的3(执行文件权限)、5(添加描述文件)、7(通过授权文件重签.app包)


xcode重签名演示


  • 1、将product中的WeChat替换成 需要我们之前重签名的WeChat
    image.png

2、CMD+R再次运行

image.png


总结


  • 重签名:将原始数据的Hash值重新加密


  • Codesign重签名步骤


  • 1、删除插件和带有插件的.app包(例如Watch、plugins)
  • 2、对Frameworks里面的库进行重签名
  • 3、给可执行文件 +x(可执行)权限
  • 4、新建一个空工程
  • 5、添加描述文件(4中的空工程通过真机编译得到,且要运行,因为需要将描述文件安装到手机)
  • 6、替换.app包中BundleID(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)
  • 7、通过授权文件(Entilements)重签.app包、
  • 1)查看描述文件:$security cms -D -i embedded.mobileprovision
  • 2)将描述文件中Entilements 拷贝出来,生成plist文件。(文件名称entitlements.plist
  • 3)用权限文件签名APP包: $ codesign -fs "Apple Development: XX(XX)" --no-strict --entitlements=entitlements.plist WeChat.app
  • 8、最后通过Xcode安装


  • Xcode重签名步骤


  • 1、删除Plugins、Watch
  • 2、重签名Frameworks
  • 3、创建并运行一个空工程
  • 4、修改Info.plist中的BundleID改为 空工程的BundleID
  • 5、利用修改后的app包,替换空工程的app包
  • 6、直接运行



相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
160 4
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
77 1
|
4月前
|
搜索推荐 API 开发工具
打造个性化天气应用:从零开始的iOS开发之旅
【8月更文挑战第31天】本文是一篇针对初学者的iOS应用开发指南,将引导读者通过Swift和iOS SDK构建一个简单而美观的天气应用。我们将探索如何利用API获取实时天气数据,并在应用中实现用户友好的界面设计。文章不仅包括代码示例,还提供了设计理念和用户体验优化的建议,旨在帮助初学者理解iOS开发的基础知识,并激发他们创造个性化应用的兴趣。
|
4月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
33 2
|
1月前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
59 1
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
62 5
|
3月前
|
存储 IDE 开发工具
移动应用开发之旅:打造你的首个iOS应用
【9月更文挑战第23天】在数字化浪潮中,移动应用已成为连接用户与数字世界的关键桥梁。本文将带领读者踏上开发属于自己的第一个iOS移动应用的旅程,从理解移动操作系统的核心概念出发,逐步深入到实际的应用构建过程中。通过简洁明了的语言和具体的代码示例,我们将一起探索如何在苹果的iOS平台上实现一个简单的“待办事项列表”应用,让读者不仅能够学习到编程知识,还能体会到将想法转化为现实产品的成就感。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供一个实用的指南,帮助你迈出成为移动应用开发者的第一步。