InspectiveC核心功能详解:从对象监视到方法拦截的完整调试方案

InspectiveC核心功能详解:从对象监视到方法拦截的完整调试方案

【免费下载链接】InspectiveCobjc_msgSend hook for debugging/inspection purposes.项目地址: https://gitcode.com/gh_mirrors/in/InspectiveC

InspectiveC是一款基于MobileSubstrate和Fishhook的Objective-C消息调试工具,专为iOS应用调试和方法拦截设计。它通过hookobjc_msgSend函数,实现对Objective-C对象和方法调用的实时监控,帮助开发者深入分析应用运行时行为。无论是跟踪特定对象的生命周期,还是拦截关键方法调用,InspectiveC都提供了轻量级且高效的解决方案。

🌟 核心功能解析

🎯 对象与类级别监视

InspectiveC支持多维度的监控粒度,满足不同调试场景需求:

  • 单个对象跟踪:通过watchObject(id obj)函数可锁定特定对象,记录其所有方法调用
  • 类实例监控:使用watchClass(Class clazz)监视某个类的所有实例(不含子类)
  • 自动生命周期管理:被监控对象接收dealloc消息时会自动取消监视,避免内存泄漏

🔍 方法级拦截与过滤

针对方法调用的精准控制能力:

  • 全局方法拦截:通过watchSelector(SEL _cmd)监控任意方法的调用情况
  • 对象方法过滤:使用watchSelectorOnObject(id obj, SEL _cmd)仅跟踪特定对象的目标方法
  • 类方法筛选watchSelectorOnClass(Class clazz, SEL _cmd)可限定类实例的特定方法

📝 结构化日志输出

日志默认存储于/var/mobile/Documents/InspectiveC目录(沙盒应用位于/var/mobile/Containers/Data/Application/<App-Hex>/Documents/InspectiveC),采用<exe>/<pid>_<tid>.log命名格式。日志包含完整的调用栈层级关系,例如:

***-|SpringBoard@<0x15455d320> _run|*** +|NSAutoreleasePool alloc| +|NSAutoreleasePool allocWithZone:| NULL -|NSAutoreleasePool@<0x170442a00> init| -|SpringBoard@<0x15455d320> _accessibilityInit| -|SpringBoard@<0x15455d320> performSelector:withObject:afterDelay:| @selector(_accessibilitySetUpQuickSpeak) nil 1.5

🚀 快速上手指南

🔧 环境准备

  1. 安装Theos开发环境并配置iOS SDK
  2. 从项目的stable_debs目录下载最新deb包
  3. 安装后将libinspectivec.dylib复制到$THEOS/libInspectiveC.h复制到$THEOS/include

💻 三种使用方式

方式一:Cycript实时注入(推荐)

通过Cycript动态注入目标进程:

root# cycript -p SpringBoard cy# // 加载InspectiveC动态库(使用cycript/InspectiveC.compiled.cy中的命令) cy# watchObject(choose(SBUIController)[0]) // 监视特定对象 cy# watchSelector(@selector(viewDidLoad)) // 拦截指定方法
方式二:Tweak集成Wrapper

在Tweak中通过DEBUG guard集成:

#if INSPECTIVEC_DEBUG #include "InspCWrapper.m" #endif

使用简化API:

watchClass([UIViewController class]); setMaximumRelativeLoggingDepth(5); // 限制递归日志深度 enableCompleteLogging();
方式三:直接链接库文件

在Makefile中添加链接配置:

<YOUR_TWEAK_NAME>_LIBRARIES = inspectivec

直接调用核心API:

#include "InspectiveC.h" InspectiveC_watchInstancesOfClass([UIView class]); InspectiveC_watchSelector(@selector(layoutSubviews));

🛠️ 高级配置与优化

📊 日志深度控制

通过setMaximumRelativeLoggingDepth(int depth)调整日志递归深度,平衡调试信息量与性能开销。建议在复杂调用场景中设置为3-5,简单场景可设为10以上。

⚡ 性能优化建议

  • iOS 10+系统建议使用Fishhook模式编译:make package USE_FISHHOOK=1 FOR_RELEASE=1
  • 多线程环境下可通过enableLogging()/disableLogging()控制线程级日志开关
  • 生产环境建议使用disableCompleteLogging()关闭全量日志

📱 架构支持

  • 完整支持arm64架构,对arm32架构仅支持基础功能(暂不支持obj_msgSend[st|fp]rethook)
  • 兼容iOS 9及以上系统,包括最新的iOS 15测试版本

📚 扩展资源

  • 头文件定义:InspectiveC.h
  • 包装器实现:InspCWrapper.m
  • Cycript脚本:cycript/InspectiveC.compiled.cy
  • 示例项目:example/目录包含完整的Tweak示例

🔮 未来功能展望

InspectiveC的开发 roadmap 包括:

  • 块和C函数替换日志支持
  • 返回值打印功能
  • 多线程性能优化
  • 可视化调试界面集成

通过InspectiveC,开发者可以构建自定义的调试工作流,深入理解Objective-C运行时机制。无论是逆向工程分析还是应用调试优化,这款轻量级工具都能提供强大的技术支持。

【免费下载链接】InspectiveCobjc_msgSend hook for debugging/inspection purposes.项目地址: https://gitcode.com/gh_mirrors/in/InspectiveC

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考