飞道的博客

iOS代码注入

324人阅读  评论(0)

越狱

准备工作

  • 手机型号:iPhone 6p
  • 手机系统:12.4.4
  • 越狱工具:unc0ver
    unc0ver支持11.0~14.3版本,并且越狱后可重置回未越狱状态,官网地址:https://unc0ver.dev

unc0ver.dev上有具体的操作步骤,这里不再赘述,下面是我采用Xcode+Shell脚本方式完成越犾的一个过程记录。

Xcode + shell

  1. 通过Xcode新建一个工程,然后运行到真机上,完成app签名。
  2. 在工程目录下创建一个App目录,然后再创建一个内容如下的appsign.sh文件:
    TEMP_PATH="${SRCROOT}/Temp"
    APP_PATH="${SRCROOT}/App"
    # 目标ipa包所在路径
    TARGET_IPA_PATH="${APP_PATH}/*.ipa"
    # 清空Temp目录
    rm -rf "${TEMP_PATH}"
    mkdir -p "${TEMP_PATH}"
    
    # 1.解压ipa包到Temp目录下。
    # -o代表在不提示的情况下覆盖现有文件, -qq禁止打印信息
    # -d 将文件解压缩到的可选目录
    unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
    # 拿到解压的临时的APP的路径
    TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
    
    # 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. 删除PlugIns和Watch  个人证书签不了Extention
    rm -rf "$TARGET_APP_PATH/PlugIns"
    rm -rf "$TARGET_APP_PATH/Watch"
    
    # 4. 更新info.plist文件 CFBundleIdentifier
    # 因为是plist文件,需要使用系统工具PlistBuddy进行设置:"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
    #使用codesign进行签名
    /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
    done
    fi
    
  3. 下载unc0ver,把下载下来的ipa包放到工程App目录下
  4. 在Xcode->Targets->Build Phases中添加Run Script
  5. 运行后安装unc0ver到手机上,运行unc0ver,点击底部Jailbreak开始越狱,中间需要重启手机。如果需要重置在设置中打开Restore RootFS选项,然后重置。

小知识:生成ipa包

复制xx.app包到一个Payload目录下,然后通过zip -ry xx.ipa Payload/生成ipa包后通过Xcode安装到手机上。

砸壳

  1. 在 Cydia 中添加软件源 http://apt.wxhbts.com/,搜索CrackerXI(CrackerXI App脱壳工具),下载安装。
  2. 回到SpringBoard,打开CrackerXI,在AppList选择要砸壳的App,砸完后记录下ipa包的路径。
  3. 手机与电脑处于同一网络下,在mac终端通过ssh root@手机ip连接(如果手机没安装openSSH,在Cydia中搜索openSSH并安装),输入root初始初始密码alpine。连接成功后输入passwd修改root密码,成功后logout退出ssh。
  4. 在终端执行scp root@手机ip:"/var/mobile/Documents/CrackerXI/xxx_CrackerXI.ipa" ~/Desktop拷贝砸壳后的ipa包到电脑桌面。
  5. 通过unzip -oqq ipa包路径 -d 临时路径,进入临时路径中的payload中的xx.app中,通过otool -l xx | grep crypt查看cryptid,如果为0说明砸壳成功。

代码注入

  1. 下载yololib(https://github.com/KJCracks/yololib),编译后放到工程目录下(或者直接放到usr/bin下)。
  2. 在工程中创建一个Framework暂时叫它HookTest,创建个OC类,然后在类中添加+(void)load方法。
  3. 在上面的appsign.sh中加入
    ./yololib "\$TARGET_APP_PATH/\$APP_BINARY" "Frameworks/HookTest.framework/HookTest"
    
    然后执行。

未完待续…

代码注入成功了,通过class-dump和Xcode的Debug View Hierarchy可以拿到部分信息,通过Method Swizzing可以进行一些hook操作。
TODO://工具分析。


转载:https://blog.csdn.net/nsf724947554/article/details/115017248
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场