美文网首页
iOS逆向之旅(进阶篇) — 重签名APP(二)

iOS逆向之旅(进阶篇) — 重签名APP(二)

作者: 洪呵呵_ | 来源:发表于2018-10-16 16:34 被阅读0次

    使用Xcode进行重签名【这种方式就相对简单很多了】

    步骤:
    1.新建一个Xcode工程
    2.从微信的ipa包解压后拿出.app文件,进行替换


    image.png

    3.接下操作该包

    • 删除PlugIns/Watch文件夹
    • 替换成自己的bundleid,找到info.plist进行修改

    修改info.plist里面的Bundle ID 【这个Bundle ID 必须跟我们刚新建的工厂的Bundle ID一致】


    image.png
    • 用证书重签名Framewroks下面的框架

    签名动态库【这里需要把.app/Frameworks目录下的所有动态库进行签名】
    codesign -fs "iPhone Developer: XXX (XXXXXXXX)" mars.framework
    codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MMCommon.framework
    codesign -fs "iPhone Developer: XXX (XXXXXXXX)" MultiMedia.framework
    codesign -fs "iPhone Developer: XXX (XXXXXXXX)" WCDB.framework

    4.Xcode运行,便可以把该WeChat跑到自己的手机上了

    使用XCode脚本自动签名

    在项目下创建一个APP的文件夹,只要在哪个文件夹放置ipa包,就能制动重签名安装到自己的手机【仿照Monkey】
    1.先将需要重签名的ipa包放置到APP目录下

    image.png

    2.往项目添加一个脚本文件

    image.png

    3.往脚本中写入自动化签名步骤

    image.png

    脚本信息(其实这些步骤都是我们手动签名做的事)

    # ${SRCROOT} 这个是工程目录
    TEMP_PATH="${SRCROOT}/Temp"
    # 资源文件夹
    ASSETS_PATH="${SRCROOT}/APP"
    # ipa包路径
    TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
    
    #新建Temp文件夹
    rm -rf "${TEMP_PATH}"
    mkdir -p "${TEMP_PATH}"
    
    # --------------------------------------
    # 1. 解压IPA 到Temp下
    # 解压ipa包到Temp目录
    unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
    # 拿到解压的临时App的路径
    TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
    # 打印一下
    echo "TEMP_APP_PATH:$TEMP_APP_PATH"
    
    # -------------------------------------
    # 2. 把解压出来的.app拷贝进去
    #BUILT_PRODUCTS_DIR 工程生成的APP包路径
    #TARGET_NAME target名称
    TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
    echo "TARGET_APP_PATH:$TARGET_APP_PATH"
    
    rm -rf "$TARGET_APP_PATH"
    mkdir -p "$TARGET_APP_PATH"
    cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH/"
    
    
    # -------------------------------------
    # 3. 为了是重签过程简化,移走extension和watchAPP. 此外个人免费的证书没办法签extension
    echo "Removing AppExtensions"
    rm -rf "$TARGET_APP_PATH/PlugIns"
    rm -rf "$TARGET_APP_PATH/Watch"
    
    # -------------------------------------
    # 4. 更新 Info.plist 里的BundleId
    # 设置 "Set :KEY Value" "目标文件路径.plist"
    /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
    
    # 5.给可执行文件上权限
    #添加ipa二进制的执行权限,否则xcode会告知无法运行
    #这个操作是要找到第三方app包里的可执行文件名称,因为info.plist的 'Executable file' key对应的是可执行文件的名称
    #我们grep 一下,然后取最后一行, 然后以cut 命令分割,取出想要的关键信息。存到APP_BINARY变量里
    APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
    #这个为二进制文件加上可执行权限 +X
    chmod +x "$TARGET_APP_PATH/$APP_BINARY"
    
    # -------------------------------------
    # 6. 重签第三方app Frameworks下已存在的动态库
    TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
    if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
    then
    #遍历出所有动态库的路径
    for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
    do
    echo "🍺🍺🍺🍺🍺🍺FRAMEWORK : $FRAMEWORK"
    #签名
    /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
    done
    fi
    

    使用Monkeydev自动签名

    步骤
    image.png
    • 把砸了壳的IPA包放到Target目录下
    image.png

    直接运行就可以跑到我们的手机上了

    Monkeydev的原理

    我们到同样的地方就能发现,Monkeydev也有自己的脚本


    image.png

    里面也做了同样重签名的操作,这里有兴趣的自己去看,我就不多做解释了

    【晚点我再把这几个项目的源码上传分享出来...】

    相关文章

      网友评论

          本文标题:iOS逆向之旅(进阶篇) — 重签名APP(二)

          本文链接:https://www.haomeiwen.com/subject/xgehzftx.html