iOS应用重签名(手动)

从上面可以得知,双层签名其实本质就是如下三个步骤:

  • APP的Bundle id的验证
  • 描述文件本身的验证
  • 对APP签名的验证
注:对APP进行重新签名,前提是这个APP已经被砸壳了。下载已经砸壳成功的APP,以下例子用微信举例:越狱版本微信7.0.2 提取码: 2w87
具体步骤:
Step 1 进入WeChat目录 解压出 Wechat7.0.2越狱 ,进入WeChat目录
// 进入WeChat的目录 cd /Users/dengbin/Desktop/分享/主目录/资料/Wechat7.0.2越狱/Payload

Step 2 查看APP的证书情况
codesign -d -vv「WeChat.app路径」

iOS应用重签名(手动)
文章图片
Step 3 查看验证APP是否被加密 进入APP的包内容可以看到其中有一个WeChat的可执行文件,也就是是MachO文件,就是要查看这个MachO文件时候被加密

iOS应用重签名(手动)
文章图片

iOS应用重签名(手动)
文章图片
otool -l WeChat | grep cryp

其中cryptid0代表已经砸壳,即解密,为1或者2表示以第1类或者第2类加密方案加密。
Step 4 查看本地证书并记录需要用到的证书
security find-identity -v -p codesigning

iOS应用重签名(手动)
文章图片
Step 5 删除不可签名的插件(还有Watch中的插件) 由于本地存在一些插件,这些插件是不可被我们重签,并且这个过程我们用不着,所以我们索性就删掉。 其中包括:整个目录PlugIns目录和整个Watch目录(因为Watch.app中也有个PlugIns)

iOS应用重签名(手动)
文章图片

iOS应用重签名(手动)
文章图片
Step 6 Framework重签名 这一步就是比较繁琐的了,需要将Frameworks下的所有Framework进行重签名,运用到XCode提供的codesign指令,参数中的证书就是Step 4中的一个。具体使用哪个就看个人了
codesign –fs 「证书串」 「文件名」

iOS应用重签名(手动)
文章图片

使用Xcode自带的 codesign进行重签名
codesign -fs A045DD673737AE67D691854647D3823D3DC18262 ConfSDK.framework

iOS应用重签名(手动)
文章图片
Step 7 给MachO添加可执行权限 由于MachO本身就有可执行权限,所以这一步跳过。
Step 8 App重签名
  • 新建一个WeChat同名工程(下文称NewWeChat,原来的微信APP称之为WeChat)
  • Build NewWeChat工程,进入被编译出的WeChat.App目录,找到其中的embedded.mobileprovision文件,将其复制到WeChat.App(越狱微信)中

    iOS应用重签名(手动)
    文章图片

    iOS应用重签名(手动)
    文章图片

    iOS应用重签名(手动)
    文章图片
  • 在WeChat.App找到info.plist,并修改其中的BundleId为NewWeChat的BundleId

    iOS应用重签名(手动)
    文章图片

    iOS应用重签名(手动)
    文章图片

    找任意①文件夹,把embedded.mobileprovision放进去
    从embedded.mobileprovision文件中提取出entitlements.plist权限文件
    security cms -D -i embedded.mobileprovision > temp.plist
    /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
    iOS应用重签名(手动)
    文章图片

    1.将entitlements.plist文件放入NewWeChat中
    iOS应用重签名(手动)
    文章图片

    2.将entitlements.plist复制到WeChat.app的同级目录下。
    iOS应用重签名(手动)
    文章图片

    iOS应用重签名(手动)
    文章图片

  • 对APP重新签名 进入WeChat目录,对APP使用新的描述文件进行重签
codesign -fs 「证书串」 --no-strict --entitlements=entitlements.plist

codesign -fs A045DD673737AE67D691854647D3823D3DC18262 --entitlements entitlements.plist ~/Desktop/Payload/WeChat.app

iOS应用重签名(手动)
文章图片

iOS应用重签名(手动)
文章图片

  • 压缩Playload
zip –ry 「输出文件名」 「输入文件名」

iOS应用重签名(手动)
文章图片
Step 9 安装新的ipa 可以通过各种途径安装ipa,如Xcode,PP助手,fir,iTunes等等, 如果手机上有正版的微信,在安装完我们重签名的ipa包后会发现手机上就有两个微信啦!!!
如果想用LLDB调试微信,可以将重签后的WeChat.app替换NewWeChat Build后的WeChat.app,然后直接运行(Run)项目,就会发现我们可以用LLDB了。
Xcode安装ipa
Step 10 再次验证新的ipa是否真的重签成功 这一步其实是重复Step 3
codesign -d -vv「WeChat.app路径」

【iOS应用重签名(手动)】步骤总结:
1、cd WeChat // 进入WeChat的目录 2、codesign -d -vv「WeChat.app路径」 // 查看APP的证书情况 3、otool –l WeChat | grep cryp // 查看APP是否被加密 4、security find-identity -v -p codesigning // 查看本地证书 5、删除不可签名的插件(还有Watch中的插件) 6、codesign –fs 「证书串」 「文件名」 // Framework重签名 7、chmod +x 可执行文件// 给文件添加权限 8、App重签名 ① 新建一个项目并且命名为 WeChat(下文称NewWeChat,原来的微信APP称之为WeChat) -> Build -> 找到APP中的权限文件 embedded.mobileprovision ② 复制embedded.mobileprovision到WeChat.app中 ③ 修改WeChat.app中info.plist的BundleId ④ security cms -D -i 「 embedded文件路径」 //查看WeChat中的embedded文件,复制WeChat中entitlements.plist文件的entitlements字段 ⑤ 在NewWeChat中新建entitlements.plist文件,将上一步复制得到的「entitlements字段和其中的内容」拷贝入新的entitlements.plist文件 ⑥ codesign -fs 「证书串」 --no-strict --entitlements=entitlements.plist //复制新的entitlements到WeChat.app的同级目录,并且对APP重新签名 ⑦ zip –ry 「输出文件名」 「输入文件名」 // 压缩Playload 9、安装ipa 10、再次验证新的ipa是否真的重签成功

  • 注意:有些人会安装失败,或者安装成功会有Crash的问题,这是因为当前描述文件在我们的手机还不受信任,用新工程NewWeChat在手机上跑一遍,然后删除NewWeChat,在尝试安装新的ipa,问题可以解决。

    推荐阅读