美文网首页
应用重签名-shell

应用重签名-shell

作者: lmfei | 来源:发表于2020-03-15 08:51 被阅读0次

    终端命令

    //列出钥匙串里可签名的证书
    security find-identity -v -p codesigning
    
    //查看描述文件的信息 
    security cms -D -i embedded.mobileprovision
    
    //获取App的头文件
    class-dump -H WeChat -o ./headers/
    
    //修改文件权限
    chomd -R 777 文件路径 
    

    工具的安装

    Derek Selander

    安装步骤:

    1. 下载LLDB代码,并将lldb_commands文件夹放到自己想放的目录下
    2. 在根目录下找到.lldbinit文件,没有则新增
    3. 编辑.lldbinit文件,在最后加上command script import xxx/lldb_commands/dslldb.py
    yololib

    安装步骤:

    1. 下载yololib源码,然后编译生成可执行文件
    2. 将可执行文件放入/usr/local/bin中即可

    通过Xcode进行重签名

    1. 下载应用包
    2. 拷贝到自己的工程里
    3. 签名
    • 新建工程,并配置可用证书,然后在真机上Run一下
      注:如果不Run,后面配完脚本运行不到手机上
    • 工程根目录创建APP文件夹,并拷入下载下来的ipa包
    • 将shell脚本放入工程根目录下(shell代码下面介绍)
    • Xcode配置执行脚本Build Phases -> + -> New Run Script Phases
      ,并运行
      注意:文件夹不能有中文,否则可能编译失败

    代码注入

    • 自己生成一个framework,要导入到工程,并要在LoadCommands中
      如何查看是否成功写入LoadCommands中?
      通过MachOView可以查看可执行文件中的LoadCommands的内容
    • 导入成功后,即可以在自己的framework里写hook代码了,比如方法交换!!!

    shell脚本的内容

    shell的主要流程:

    1. 解压需要重签名的砸壳应用的ipa(如何砸壳
      )
    otool -l 可执行文件路径 | grep crypt //查看ipa文件是否砸壳
    
    已砸壳
    1. 将解压后的内容拷贝到临时文件夹下
    2. 删除无法签名的的Extension
    3. 更新plist文件中的CFBundleIdentifier
    4. 给Mach-O文件执行权限
    5. 重签第三方FRAMEWORKS
    6. 重签本应用
    7. 灵(dong)魂(tai)注入
    # ${SRCROOT} 工程文件根目录
    TEMP_PATH="${SRCROOT}/Temp"
    #新建APP文件夹,放入需要重签名的ipa包(包需要砸过壳)
    ASSETS_PATH="${SRCROOT}/APP"
    #处理后ipa包路径
    TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
    #清空Temp文件夹
    rm -rf "${SRCROOT}/Temp"
    mkdir -p "${SRCROOT}/Temp"
    
    #----------------------------------------
    # 1. 解压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"
    
    #----------------------------------------
    # 2. 将解压出来的.app拷贝到工程里
    # BUILT_PRODUCTS_DIR 工程生成的APP包的路径
    # TARGET_NAME target名称
    TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
    echo "工程中app路径:$TARGET_APP_PATH"
    
    rm -rf "$TARGET_APP_PATH"
    mkdir -p "$TARGET_APP_PATH"
    cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"
    
    #----------------------------------------
    # 3. 删除extension和WatchAPP.个人证书无法签名Extention
    rm -rf "$TARGET_APP_PATH/PlugIns"
    rm -rf "$TARGET_APP_PATH/Watch"
    
    #----------------------------------------
    # 4. 更新info.plist文件 CFBundleIdentifier
    #  设置:"Set : KEY Value" "目标文件路径"
    /usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
    
    #----------------------------------------
    # 5. 给MachO文件执行权限
    # 拿到MachO文件的路径
    APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
    #上可执行权限
    chmod +x "$TARGET_APP_PATH/$APP_BINARY"
    
    #----------------------------------------
    # 6. 重签名第三方 FrameWorks
    TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
    if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
    then
    for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
    do
    
    #签名
    /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
    done
    fi
    
    #注入自己的framework
    yololib "$TARGET_APP_PATH/$APP_BINARY" "Frameworks/xxx.framework/xxx"
    

    生活如此美好,今天就点到为止。。。

    相关文章

      网友评论

          本文标题:应用重签名-shell

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