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应用重签名(手动)_第1张图片

Step 3 查看验证APP是否被加密

进入APP的包内容可以看到其中有一个WeChat的可执行文件,也就是是MachO文件,就是要查看这个MachO文件时候被加密


iOS应用重签名(手动)_第2张图片

iOS应用重签名(手动)_第3张图片
otool -l WeChat | grep cryp

其中cryptid0代表已经砸壳,即解密,为1或者2表示以第1类或者第2类加密方案加密。

Step 4 查看本地证书并记录需要用到的证书

security find-identity -v -p codesigning
iOS应用重签名(手动)_第4张图片

Step 5 删除不可签名的插件(还有Watch中的插件)

由于本地存在一些插件,这些插件是不可被我们重签,并且这个过程我们用不着,所以我们索性就删掉。 其中包括:整个目录PlugIns目录和整个Watch目录(因为Watch.app中也有个PlugIns)


iOS应用重签名(手动)_第5张图片

iOS应用重签名(手动)_第6张图片

Step 6 Framework重签名

这一步就是比较繁琐的了,需要将Frameworks下的所有Framework进行重签名,运用到XCode提供的codesign指令,参数中的证书就是Step 4中的一个。具体使用哪个就看个人了

codesign –fs 「证书串」 「文件名」
iOS应用重签名(手动)_第7张图片

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


iOS应用重签名(手动)_第8张图片

Step 7 给MachO添加可执行权限

由于MachO本身就有可执行权限,所以这一步跳过。

Step 8 App重签名

  • 新建一个WeChat同名工程(下文称NewWeChat,原来的微信APP称之为WeChat)

  • Build NewWeChat工程,进入被编译出的WeChat.App目录,找到其中的embedded.mobileprovision文件,将其复制到WeChat.App(越狱微信)中


    iOS应用重签名(手动)_第9张图片

    iOS应用重签名(手动)_第10张图片

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

    iOS应用重签名(手动)_第12张图片

    iOS应用重签名(手动)_第13张图片

    找任意①文件夹,把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应用重签名(手动)_第14张图片

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

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

    iOS应用重签名(手动)_第17张图片

  • 对APP重新签名 进入WeChat目录,对APP使用新的描述文件进行重签

codesign -fs 「证书串」 --no-strict --entitlements=entitlements.plist

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


  • 压缩Playload
 zip –ry 「输出文件名」 「输入文件名」
iOS应用重签名(手动)_第18张图片

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路径」

步骤总结:

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,问题可以解决。

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