加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

iOS开发逆向之应用重签名上

发布时间:2023-03-31 14:14:26 所属栏目:教程 来源:
导读:从之前《iOS逆向应用签名》中可知,签名是指原始数据的Hash值解密。那么重签名,顾名思义,就是指将原始数据的Hash值重新加密。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交
从之前《iOS逆向应用签名》中可知,签名是指原始数据的Hash值解密。那么重签名,顾名思义,就是指将原始数据的Hash值重新加密。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

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

Codesign重签名

Xcode重签名

Shell脚本重签名

下面来进行一一介绍

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

<article class="_2rhmJa" deep="5"security find-identity -v -p codesigning`: 列出钥匙串里可签名的证书

<article class="_2rhmJa" deep="5"Codesign –fs “证书串” 文件名` :强制替换签名

<article class="_2rhmJa" deep="5"Chmod +x 可执行文件` : 给文件添加权限

<article class="_2rhmJa" deep="5"security cms -D -i ../embedded.mobileprovision` :查看描述文件

<article class="_2rhmJa" deep="5"codesign -fs “证书串” --no-strict --entitlements=权限文件.plist APP包`

<article class="_2rhmJa" deep="5"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 (有签名权限)

准备工作

注:所需的资料可关注公众号:编程大鑫 获取

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

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

f7a8682234aa64fc7e239fc429101c56.webp


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

e77630b1d7456fae7b044a4c1da5bc0c.webp


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

212a4e52ce21a4d0e38096391599f641.webp

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

c1da85611758128b7674ef66e47502a5.webp

然后执行退出 cd ..

3、查看可执行文件:ls -l WeChat

082695c841ebef27c82de48dd883a6c3.webp

注:重签名必须要有可执行权限,即 - x
4、新建一个工程, (C2893S7GXH)对应的描述文件 ,例如 xxx xxx(Personal Team) 获取可执行文件中的描述文件,拷贝至WeChat包

5、描述文件和BundleID有关系,需要修改WeChat的BundleID com.tencent.xin为 xxx.com.test

6、查看描述文件的权限:security cms -D -i embedded.mobileprovision

29119ab2dd9220be4cef46285089c173.webp

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

0abfaed3b5d2a31ba052afb0f8f14018.webp

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

625f9b5a4d37207c6e4cc8f97d9b1fb6.webp

将其拷贝至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, 此时签名信息已经替换

6787489dae9dbc46d7fe1d313a6fa413.webp

9、安装

b79dfe9141dd206f418a4e2a6bb9b475.webp

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

2cbf66ec185073011c9952d37542c11f.webp

2、CMD+R再次运行

619ed23ca9262764dd0371ef3b68a76a.webp

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

Codesign重签名步骤:

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

1、删除插件和带有插件的.app包(例如Watch、plugins)

2、对Frameworks里面的库进行重签名

3、给可执行文件 +x(可执行)权限

4、新建一个空工程

5、添加描述文件(4中的空工程通过真机编译得到,且要运行,因为需要将描述文件安装到手机)

6、替换.app包中BundleID(.app包中info.plist文件的BundleID要和描述文件中的BundleID保持一致)

7、通过授权文件(Entilements)重签.app包、

8、最后通过Xcode安装

Xcode重签名步骤:

1、删除Plugins、Watch

2、重签名Frameworks

3、创建并运行一个空工程

4、修改Info.plist中的BundleID改为 空工程的BundleID

5、利用修改后的app包,替换空工程的app包

6、直接运行
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章