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

简介: 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月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:使用 Core Image 和 Metal 进行高效滤镜应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能是现代应用程序开发中的一个关键需求。苹果的iOS平台提供了Core Image和Metal两大技术,它们为开发者提供了强大的工具来实现复杂的图像处理任务。本文将探讨如何使用Core Image进行基础图像处理,并结合Metal的性能优势,开发出一个自定义的实时图像滤镜。我们将通过创建一个能够动态调整参数并且具有实时反馈效果的滤镜来演示这一过程。
|
1月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:Core Image 框架的应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能,对于提升用户体验和扩展应用程序能力至关重要。苹果公司的iOS平台提供了强大的Core Image框架,它允许开发者以高效和直观的方式执行复杂的图像处理任务。本文将深入探讨Core Image框架的关键特性,并通过实例演示如何在iOS应用中集成实时图像处理功能,不仅提高性能,同时保持了电池寿命的优化。我们将重点讨论面部识别、滤镜应用和性能优化等关键技术点,为读者提供一份全面的iOS图像处理指南。
|
1月前
|
iOS开发 开发者
苹果iOS App Store上架操作流程详解:从开发者账号到应用发布
很多开发者在开发完iOS APP、进行内测后,下一步就面临上架App Store,不过也有很多同学对APP上架App Store的流程不太了解,下面我们来说一下iOS APP上架App Store的具体流程,如有未涉及到的部分,大家可以及时咨询,共同探讨。
|
1月前
|
开发者 iOS开发
iOS应用上架详细图文教程(上)
App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些事。
|
1月前
|
前端开发 JavaScript 程序员
HBuilderX使用mac打包ios应用提示苹果根证书没有安装
HBuilderX使用mac打包ios应用提示苹果根证书没有安装
24 0
|
1月前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
1月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
24 0
|
1月前
|
存储 编解码 JSON
利用SwiftUI构建高效iOS天气应用
【4月更文挑战第21天】 在本文中,我们将深入探讨如何运用SwiftUI框架打造一个响应迅速且用户友好的iOS天气应用程序。我们将重点放在利用SwiftUI的声明式语法简化界面开发,并通过结合Core Location和Networking APIs实现实时天气数据的获取与展示。文章将详细阐述整个开发过程,包括API集成、数据模型设计、用户界面布局以及动态适配不同屏幕尺寸的策略。
|
1月前
|
缓存 算法 计算机视觉
iOS 实时图像处理技术的应用与实现
【4月更文挑战第8天】 随着智能手机的普及和性能的不断提升,移动设备上的图像处理技术已经成为了研究和应用的热点。特别是在iOS平台上,利用高效的API和强大的硬件支持,开发者能够实现复杂的图像处理任务,为用户提供丰富的视觉体验。本文将探讨在iOS环境下实时图像处理技术的实现,涵盖关键的技术点,如Core Image框架的使用、自定义滤镜的开发以及性能优化等方面,旨在为开发者提供实用的指导和参考。