introspy使用方式以及具体原理

introspy的官网地址以及deb包地址:https://isecpartners.github.io/Introspy-iOS/

在官网https://github.com/iSECPartners/Introspy-iOS/releases中 该工具仅仅放出支持IOS7的版本,IOS8,IOS9均未放出deb安装包。

所以,我下载了源码,试图在IOS9上编译一份,结果如下


introspy使用方式以及具体原理_第1张图片

查阅原因发现 是我安装的theos安装版本太高了 把theos安装低版本 可安装

结果又发现如下


introspy使用方式以及具体原理_第2张图片

这就没有办法了,这个工具的源码不支持IOS9。

这里会感觉到很奇怪,这个工具关theos什么事。

关联如下

1:这个工具本身的作用 就是针对一些私有API进行监控,并将日志输出到xcode自己的log中。

2:这个工具采取的监控的原理 就是使用theos编写tweak API,从外部进行插入dylib的原理,只不过它已经将一个已有的tweak拆分成很多不同种类监控的文件。如下图


introspy使用方式以及具体原理_第3张图片


introspy使用方式以及具体原理_第4张图片

比如其中的NSData的tweak是这样的


introspy使用方式以及具体原理_第5张图片

完全就是theos中 tweak hook的语言组织 而且hook的即是IOS私有类NSData中的关键函数 与之前对theos中的调研一致

而之外的一些类文件 则是为不同类型的hook提供工具类,如上图的CallTracer类

此处的Tweak起着一个总的调度的作用,makefile打包安装成最终的deb形式。

如下图tweak调用各种不同类型的hook


introspy使用方式以及具体原理_第6张图片

在IOS7中,追踪的信息会被保存成一个数据库introspy-com.XX.XX.db 这个数据库存放在 ./private/var/mobile/Applications/E5DF194C-0B29-4211-B243-68DBA847DCDE/Library/introspy-com.XX.XX.db里面

Introspy-Analyzer直接将这个数据库直观的解析出来,当然在xcode的log上也会有显示

在总的调度tweak中 有这个路径的数据库的初始化和写入



introspy使用方式以及具体原理_第7张图片

此为我们记录分析提供了很好的工具和思路

虽然现在未能使用这个工具 但是这个工具给我们研发工作一个很好的范例,它本身已经解决了如下问题

1:很多私有API的检测问题,证实了通过外部插入dylib是目前最好的hook方式

2:它已经解决了通过一个插件就能自动开关所有应用的hook的问题 这是在IOS6上的使用状况(官网的图)

因为现在无法使用,所以仅仅看这个图的话,这个工具已然满足多样本实时监控


introspy使用方式以及具体原理_第8张图片

这种即是IOS上 setting bundle的一种机制 为插件单独添加preferences 还有一种解决方案:FLEX嵌入:https://yohunl.com/ios-yue-yu-de-tweakkai-fa/

在源码中找到了 Preferences中plist文件 这个在theos创建工程的时候选择创建application就能生成settings。

tweak中调度的代码中,对开启了监控的app的bundle ID进行了过滤:即开启了的,为其创建DB,没有开启的便不为其创建DB。

但为何能实现在不用重新加载tweak的前提下就能实现多APP的监控??

这里我找到一种解决多样本控制的办法 在原创建的工程文件里 有一个plist存放的是有效bundle ID。


introspy使用方式以及具体原理_第9张图片

发现其中的bundle ID是可以添加很多的,只要这个app满足 则对这个app生效


introspy使用方式以及具体原理_第10张图片

测试结果发现只要原始的tweak插件生成过程中,有这个bundle ID的,则hook一律有效,不必重新生成插件。

所以,我猜想,introspy是将这个bundle ID的选择权利通过setting bundle的添加交给了用户,让用户手动输入是否支持监控,从而在手机插件的内部操作了这个plist文件,来实现多样本监控。

在introspy的源码处 tweak总调度插件处找到了证明我猜想的代码



introspy使用方式以及具体原理_第11张图片

theos tweak实现多样本自动支持的问题得到解决


introspy使用方式以及具体原理_第12张图片

这个图说明了tweak的bundle ID的生效过程,也是introspy能动态监控的原理。

但是基于本项目动态养殖涉及到的问题,需要找到tweak存放bundle ID的plist文件的位置,由于越狱系统仅仅开放部分文件权限,所以目前并不知道这个plist文件存放的位置,如能找到这个

则有如下的流程

样本静态分析得出app的bundle ID—>找到tweak在iphone中存放plist的文件,并将bundle ID添加到其中--->tweak对这个app生效—>app安装,监控目的达到

发现可以找到这个文件


introspy使用方式以及具体原理_第13张图片

这个文件的路径是: //Library/MobileSubstrate/DynamicLibraries

由此 只需编写shell命令来写入这个文件即可

3:这个工具 为输出监控日志提供了很好的思路 可以使用syslogd这个插件 也可以使用xcode自动log工具 如下图


introspy使用方式以及具体原理_第14张图片

还可以使用IOS的DB数据库操作,每一个app单独为其创建一个DB。introspy则是使用的这样方式的输出。

4:同时这个工具 为我们写自动化工具监测 提供了良好的模板框架的借鉴。

综上所述 IOS下的hook有两种方式:

1:采用外部加载插入dylib的方式,这种以theos tweak工具为代表,并进一步演化出了introspy的监控输出日志的工具。

2:采用内部method swizzling来hook,代表工具即是cycript。这种工具需要采用句柄来一步步获取目标函数所在对象的指针,达到hook的目的。

第一种方式与我们预期的相匹配。

你可能感兴趣的:(introspy使用方式以及具体原理)