手动非脚本应用重签名

一、前言

逆向过程中,我们有时候需要利用Xcode来调试三方应用,这是应用重签名的目的之一,如果我们改变了应用的二进制文件(可执行文件),或者增加了应用里面的资源,应用本身的签名就会被破坏,要想修改过的应用可以安装在手机上,就需要对其进行重新签名。

二、准备需要重签名的应用ipa

这里我使用的是自己脱壳的微信ipa(当前最新版6.7.4),重签名不能用加密(加壳)的ipa包,所有从App Store上下载的ipa包都经过苹果加密,如何查看是否加密,具体如下:


手动非脚本应用重签名_第1张图片
查看ipa是否加密

说明:otool -l 参数 | grep crypt
参数是当前ipa包解压后的.app目录下的可执行文件,一般与.app包名称同名,其他类推。

三、准备用于签名的证书

做过正向开发的都应该知道,真机调试,打包测试等等都需要经过证书签名,通过命令security find-identity -p codesigning -v获取本机证书,具体如下:

手动非脚本应用重签名_第2张图片
查看本机证书

说明:第2、3行分别是个人开发者证书,普通开发者免费证书,两种均可,只不过用后者重签名应用安装7天之后会失效,这次使用的是免费开发者证书。

四、用免费开发者证书签名三方ipa

1.删掉一些免费开发者证书不能签名的内容
免费开发者证书无法对微信包内的PlugIns目录下的Extension签名(经检验,如果是用非免费开发者证书,可以签名这些插件、Extension),同时Watch目录下也包含PlugIns,由于我们需要签名的是iPhone应用,因此可以删掉这两个文件夹:

手动非脚本应用重签名_第3张图片
删除某些文件

2.对包内Frameworks文件夹下的所有framework进行签名

codesign -fs 你的证书 需要签名的framework

手动非脚本应用重签名_第4张图片
签名所有framework

3.赋予可执行文件执行权限
有可能.app下的可执行文件没有执行权限,先通过ls -l Wechat查看一下

查看可执行文件权限

可以看到文件所有者没有"x"标记,表示没有可执行权限,通过chmod +x Wechat添加权限,再次查看
查看可执行文件权限

4.新建空工程,获取embeded.mobileprovision描述文件
新建一个Xcode iOS App项目,编译生成目标App,在该目录下获取embeded.mobileprovision描述文件,复制到WeChat.app包目录下

手动非脚本应用重签名_第5张图片
新建空工程

手动非脚本应用重签名_第6张图片
找到描述文件
手动非脚本应用重签名_第7张图片
复制到WeChat.app目录

(1)修改Wechat的Info.plist的BundleID
因为该描述文件是对应我们新空工程的BundleID,因此我们将WeChat.app下Info.plist对应BundleID字段修改与之对应。
(2)从embeded.mobileprovision描述文件提取entitlements.plist授权文件

security cms -D -i embedded.mobileprovision > profile.plist

/usr/libexec/PlistBuddy -x -c 'print :Entitlements' profile.plist > entitlements.plist

(3)对整个.app文件夹进行签名

codesign -f -s CECC797ED99A7943709DF97F215F741CBB8EE7BB --entitlements entitlements.plist /Users/kinken_yuen/Desktop/微信重签名Demo/Payload/WeChat.app

ps:CECC797ED99A7943709DF97F215F741CBB8EE7BB是证书的另一种表示,在查看本机证书的时候可以看到。

签名

(4)打包ipa

zip -ry WeChatResign.ipa Payload

手动非脚本应用重签名_第8张图片
5.png

五、安装测试

使用Xcode安装重新签名后的ipa文件,首次安装可能会出现安装失败,因为新空工程的描述文件尚未安装到手机,切回到新空工程Command + R运行,并且在手机上信任描述文件。


手动非脚本应用重签名_第9张图片
信任描述文件

再次安装,成功安装,并且成功运行


手动非脚本应用重签名_第10张图片
安装成功
手动非脚本应用重签名_第11张图片
运行

这个时候我们就可以进行lldb调试附加,在Xcode -> Debug -> Attach to Process -> WeChat,效果就是类似于日常开发调试界面,动态调试,寻找你需要逆向的线索、目标。

手动非脚本应用重签名_第12张图片
lldb附加调试

手动非脚本应用重签名_第13张图片
动态调试

六过程遇到的问题

1.忘记删除PlugIns与Watch文件夹,安装时出现以下提示

手动非脚本应用重签名_第14张图片
安装失败

解决:删除之后重新再打包安装

七、总结

  1. 手动重签名步骤比较繁琐,一般会采用脚本进行重签名,这里主要以理解其过程原理为主。

  2. 学习重签名之前,需要先了解一下苹果的签名机制,可以参考iOS App 签名的原理,非常详细。

  3. 获取脱壳应用方法可以查看我前几篇的学习笔记。

你可能感兴趣的:(手动非脚本应用重签名)