iOS逆向动态调试代码逻辑的手段对比

  • iOS逆向动态调试代码逻辑的手段对比
    • 图形界面的
      • 基于Xcode
        • MonkeyDev(+Xcode)
          • 优点
            • 整套环境,方便逆向调试
            • 集成了常用的工具,包括
              • 砸壳等
              • 反调试的相关代码
              • LLDBTools
          • 缺点
            • 对于原有复杂的entitlement权限的app:调试运行起来,会有各种问题
              • 后来确认,是丢失了entitlement权限的问题
                • 由于其没完全开源,导致无法轻易解决和规避
            • 每次调试要重新安装app,对于大的app,比较耗时
        • iOSOpenDev(+Xcode) + 动态断点调试
          • 优点
            • 可以触发断点暂停去查看各种变量值
            • 可以完整利用iOSObjC底层的机制,实现调试的目的
              • 比如<NSXPCConnection: 0x281cfc640>可以去查看po的描述po [0x281cfc640 _shortMethodDescription],可以看到所有的属性
                • 对比:Frida中,就难以方便的和完整的查看到这些属性
          • 缺点
            • 前提:要app进程可调试
              • 注:关于app或进程可调试
                • iOS 15+
                  • XinaA15:自带支持,很好
                    • 但是只支持arm64eA12+的芯片(比如iPhone11),而arm64ePAC,导致ARM代码模拟和反编译,会更困难
                  • palera1n:的rootful越狱,暂时完美支持任意app和进程可调试
                    • 但是可通过codesign重签名暂时实现单个的app或进程的可调试
            • 改动代码要重新编译安装插件,重新触发调试环境
    • 命令行的
      • iOSOpenDev(+Xcode)+仅hook输出log日志
        • 优点
          • 只要hook代码写好,可以hook的范围比较广,几乎任何app或进程均可
        • 缺点
          • 只能从Console.app控制台中查看hook的log日志,无法动态调试
      • lldb(+debugserver)
        • 优点
          • 重签名后的debugserver,支持调试任意app或进程
        • 缺点
          • 只能用命令行的lldb(无法像Xcode中一样带图形界面使用)
      • Frida
        • Frida(+js脚本)
          • 优点
            • 任意app和进程均可调试
            • 改动代码立刻生效
          • 缺点
            • 无法暂停去查看各种变量值
        • frida-trace
          • 优点
            • 可以输出带缩进的ObjC函数调用关系,且带颜色,易读
          • 缺点
            • 对于输出内容太长,虽然支持导出到日志,但是却丢失了缩进,不利于查看函数调用关系

results matching ""

    No results matching ""