美文网首页
ios-class-guard - Swift & OC Mix

ios-class-guard - Swift & OC Mix

作者: ienos | 来源:发表于2020-06-09 16:28 被阅读0次

    Swift OC 代码需要混淆代码

    一、class-dump

    • 能够从可执行文件中获取类/方法和属性的信息, ios-class-guard 从 class-dump 演化而来
    • 逆向工程中会使用的工具,如果可执行文件 Mach-File 是从 AppStore 上下载的,都是经过签名加密的,需要先进行砸壳

    1. class-dump 的原理

    利用 Objective-C 语言的 runtime 特性,将存储在 Mach-O 文件中的 @interface 和 @protocol 信息提取出来,并生成对应的 .h 文件

    二、ios-class-guard 混淆原理

    ios-class-guard 由 class-dump 演化而来,对 Mach-O 文件进行静态扫描,通过文件地址分析出类、方法的名字,然后通过宏定义替换方法成无序随机字符串来达到混淆的效果

    三、ios-class-guard 混淆结果

    使用 ios-class-guard 的 option,最后 -o 会输出方法名的宏定义,-m 生成方法名和随机字符串的映射表,需要将 -o 输出的宏定义头文件导入到 Prefix.pch

    四、ios-class-guar 的使用

    1. 安装 ios-class-guard
    brew install ios-class-guardbrew install --HEAD ios-class-guard

    2. 下载 obfuscate_project 混淆脚本
    curl -o obfuscate_project https://raw.githubusercontent.com/Polidea/ios-class-guard/master/contrib/obfuscate_project && chmod +x obfuscate_project

    3. 编辑 obfuscate_project 混淆脚本

    修改一下几个参数

    • 主要是修改这几个参数, 下面是使用 workspace 管理时的参数修改(如果不是使用 workspace ,就注释 WORKSPACE 那一行,解开 PROJECT 的注释)
    • WORKSPACE、PROJECT、SCHEME、CONFIGURATION、CONFIGURATION 根据实际项目填写
    • SDK 版本号可以使用 xcodebuild -showsdks 进行查看
    obfuscate_project

    4. 运行 obfuscate_project 混淆脚本

    bash obfuscate_project


    下面我们来分析一下 obfuscate_project 脚本的代码

    • Clean current workspace
      清除 git 最近的提交
    Clean current workspace
    • Just in case: wipe build
      清除 build/文件夹
    Just in case: wipe build
    • Automatically detect PODS
      检测 pod 所在位置,并执行 pod install
    Automatically detect PODS
    • Build project to fetch symbols
      build 项目
    Build project to fetch symbols
    • Insert SYMBOLS_FILE to all .pch found in project
      将混淆符号的 .h 文件导入到 含有 -Prefix.pch 的文件中
    Insert SYMBOLS_FILE to all .pch found in project

    脚本中默认 $SYMBOLS_FILE 文件名为 symbols.h

    symbols
    • Obfuscate project

    可以看出混淆项目的主要指令是 ios-class-guard,脚本中使用了一下参数:
    $CLASS_GUARD_OPTS_SDK: (--sdk-root )
    $CLASS_GUARD_OPTS (自定义 ios-class-guard 参数)
    -O "$SYMBOLS_FILE" (输出含有宏定义的 .h文件 )
    "$app/$TARGET" (<mach-o-file>)

    Obfuscate project

    ios-class-guard 所有参数


    ios-class-guard
    • -F 过滤不需要混淆的类 -F !AppDelegate
    • -i 过滤掉不需要使用的符号
    • --sdk-root 指定 SDK,目前只支持 iPhoneSimulator SDK
    • -m 保存符号映射表 .json,默认为 symbols.json
    • -O 输出定义混淆符号的头文件

    ios-class-guard 不支持 Swift

    ios-class-guard 工具在 Github 上不支持 Swift,遇到带 Swift 项目会报错,具体报错: Error: Cannot find offset for address XXXXXXXX in stringAtAddress:

    ios-class-guard Error.png

    后面通过 Github 找到一个支持 Swift 的 class-dump ,结合 ios-class-guard 源代码。最终实现 Category 的过滤 -F、以及能够在 Swift 和 OC 混编代码中执行;最终实现也只是对 OC 代码进行混淆,Swift 不做改动 -- ios-class-guard-Swift

    目前 ios-class-guard-Swift 暂未支持用 install.sh 安装 ios-class-guard,需要手动编译一下;然后将生成的可执行文件 exec 拖到 /usr/local/bin,之后就可以通过终端执行 ios-class-guard 命令

    ios-class-guard 不支持 iPhoneOS SDK

    ios-class-guard Error.png

    从上面的报错信息,我们还可以看出除了 Error: Cannot find offset for address XXXXXXXX in stringAtAddress: 的报错之外,还有 Warning: Failed to load: XXXXXXXX.dylib

    通过 Github 的 issue 找到相关解释,ios-class-guard 不支持 iPhoneOS SDK,所以在选择参数时需要选择 iPhoneSimulator,例如 ios-class-guard --sdk-root /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.2.sdk

    ios-class-guard iPhoneOS SDK

    然后在作者的回答中也有提到,PreEmptive Protection for iOS - Rename (or PPiOS-Rename)
    使用相同的原理,但是它将使用 iPhoneSimulator 支持 iPhoneOS SDK,但是经测试,该工具只能用于纯 OC 项目,并不支持 OC 与 Swift 混编的项目

    PPiOS-Rename

    ios-class-guard --sdk-root

    执行以下命令
    ios-class-guard -O XXX --sdk-ios /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.2.sdk 'XXXX.app' 出现了以下提示报错

    --sdk-ios

    后面在 issue 中找到相关回答

    issue

    解决方案是用 --sdk-root 代替 --sdk-ios

    --sdk-root

    ios-class-guard OC & Swift

    ios-class-guard 执行结果,会输出宏定义 .h 文件,当我们导入该 .h 时,OC 的类/方法被定义为混淆字符串。

    注意:如果在混编项目中,Swift 中调用 OC 的类或扩展,需要忽略该 OC 类或扩展的混淆。在执行 ios-class-guard 添加 -F 参数,例如 -F !AppDelegate

    相关文章

      网友评论

          本文标题:ios-class-guard - Swift & OC Mix

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