IOSDEV

    ios重签名脚本的0到1

    对重签名脚本进行了规范的踩坑 , 挤出一个微笑后写下这篇博文
    感谢Google, 感谢我生涩的swift 之阅读IosAppResigner源码

    Profile

    使用

    ./resign.sh /Users/akarizo/Desktop/微信-已砸壳.ipa  /Users/akarizo/Desktop/original.mobileprovision  com.weixin.resign
    
    • $1 需要砸壳过的ipa,从PP助手下载即可
    • $2 .mobileprovision 这个是证书对应的文件,也可以指定证书Xcode的product下也会生成
    • $3 是否修改bundleID,默认是原先的

    脚本内部需要写入一个一个签名字符串,可以通过下方的命令拿到

    security find-identity -v -p codesigning
    

    若是cryptid显示为0,非砸壳为1. 砸壳虽不影响签名的成功率, 但是我试了下可安装,但不可使用. 可google下砸壳方法自行砸壳.下面是查看cryptid的命令

    otool -l ./腾讯手机管家-来电防骚扰的QQ安全助手(正版)/Payload/MQQSecure.app/MQQSecure | grep cryptid
    

    mobileProvision生成Entitlements.plist

    security cms -D -i $provision > ProvisionProfile.plist 
    
    /usr/libexec/PlistBuddy -x -c "Print Entitlements" ProvisionProfile.plist > $tempPlace/Entitlements.plist
    

    用该方法生成一个Entitlements.plist文件,之前还没找到这么快捷的生成方法, 有个土方法自己折腾出来的也是可行的,详见 plist文件-在脚本中的操作

    mobileProvision拷贝为embedded.mobileprovision

    cp $provision $appPlace/embedded.mobileprovision
    

    是否概要更改BundleID

    if [[ $3 ]]; then
    plutil -replace CFBundleIdentifier -string "$3" $appPlace/Info.plist
    reBundleID=`plutil -p $appPlace/Info.plist | grep 'CFBundleIdentifier' `
    echo "Log info : you wanna replace to: ${reBundleID}"
    fi
    

    默认的时候是原先的, BundleID安装到设备上是唯一的,若是原版本共存,必须要更改

    Nov 14, 2017
    Unix