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签名信息
2、查看app包的签名信息(CMD+G):
codesign -vv -d WeChat.app
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
2、重签名Frameworks:
codesign -fs "Apple Development: chenjialin1016@foxmail.com (C2893S7GXH)" andromeda.framework
然后执行退出
cd ..
3、查看可执行文件:
ls -l WeChat
- 注:重签名必须要有可执行权限,即
- x
- 注:重签名必须要有可执行权限,即
4、新建一个工程,获取
chenjialin1016@foxmail.com (C2893S7GXH)
对应的描述文件 ,例如xxx xxx(Personal Team)
获取可执行文件中的描述文件,拷贝至WeChat包
5、描述文件和BundleID有关系,需要修改WeChat的BundleID
com.tencent.xin
为xxx.com.test
6、查看描述文件的权限:
security cms -D -i embedded.mobileprovision
查看
Entitlements
(权限),是一个plist文件将其拷贝至一个plist文件(名称为
Entitlements
,需要新建)(路径:propertyList - open sourceCode - 拷贝 <dict></dict>)将其拷贝至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
, 此时签名信息已经替换9、安装
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
2、CMD+R再次运行
总结
重签名:将原始数据的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、直接运行
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
你真的懂并发吗?谈谈对JUC线程池ThreadPoolExecutor的认识吧
前提 很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章。之前在分析扩展线程池实现可回调的Future时候曾经提到并发大师Doug Lea在设计线程池ThreadPoolExecutor的提交任务的顶层接口Executor只有一个无状态的执行方法: public interface Executor { void execute(Runnable command); } 而ExecutorService提供了很多扩展方法底层基本上是基于Executor#execute()方法进行扩展。本文着重分析ThreadPoolExecutor#execute()的实现,笔者会从实现原理、源码实现等角度结合简化例子进行详细的分析。ThreadPoolExecutor的源码从JDK8到JDK11基本没有变化,本文编写的时候使用的是JDK11。 ThreadPoolExecutor的原理 ThreadPoolExecutor里面使用到JUC同步器框架AbstractQueuedSynchronizer(俗称AQS)、大量...
- 下一篇
Kali Linux 破解WIFI密码详细步骤
Kali Linux破解WIFI密码准备工具:1、 虚拟机装好Kali Linux2、 支持Kali Linux的无线网卡3、 无线路由+手机或两个手机 一、 打开VM虚拟机,请确认Windows中VMware USB Arbitration Service为启动状态,并确认虚拟机设置--USB控制器—显示所有USB输入设备为勾选状态,如无法勾选请关闭虚拟机再操作。 二、 开启VM虚拟机后插入USB无线网卡,我这是X宝上买的,信号强且确实好用。 三、 在虚拟机设置中,将可移动设备中发现的无线网啦连接到Kali虚拟机。四、打开Kali命令框,输入:ifconfig查看网卡信息,因为我这非root用户,所以前面需要加上sudo来执行命令,类似于Windows中“以管理员身份运行”。如果看到有wlan0的选项了,就说明无线网卡加载成功了。 五、使用命令:airmon-ng start wlan0,用于开启无线网卡的监控模式。 六、使用命令:iwconfig,用于查看网卡是否在监控状态,wlan0后面标记了mon则OK。七、此时我们设置一个WIFI源,可以用无线路由器,也可以用手机做热点,这里...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7