19

我正在对一个我没有源代码的 iOS 应用程序进行审查。为了更好地控制环境,我在越狱的 iPad 上运行该应用程序。

我希望能够监控应用程序正在进行的 API 调用......理想情况下,我想找到类似 Rohitab 的基于 MS Windows 的API Monitor的东西,而不是 iOS。

我做了一些研究,发现 KennyTM 的一个名为“ Subjective-C ”的项目似乎可以满足我的需要。实际上,我一直在使用 cycript 脚本以及Google 代码站点上提供的 libsubjc.dylib

但是,我一直无法弄清楚如何正确地让它开始记录应用程序的调用。这是由Subjective-C (libsubjc)的作者编写的 cycript 脚本的链接。我也粘贴了下面的脚本。

/*

libsubjc.cy ... Use libsubjc in cycript.
Copyright (C) 2009  KennyTM~ <kennytm@gmail.com>

[...GPL3...]
*/

dlopen("libsubjc.dylib", 10);
if (!dlfun) {
    function dlfun(fn, encoding, altname) { var f = new Functor(dlsym(RTLD_DEFAULT, fn), encoding); if (f) this[altname || fn] = f; return f; }
}

dlfun("SubjC_start", "v");
dlfun("SubjC_end", "v");

dlfun("SubjC_set_file", "v^{sFILE=}");
dlfun("SubjC_set_maximum_depth", "vI");
dlfun("SubjC_set_print_arguments", "vB");
dlfun("SubjC_set_print_return_value", "vB");
dlfun("SubjC_set_print_timestamp", "vB");

SubjC_Deny = 0, SubjC_Allow = 1;

dlfun("SubjC_clear_filters", "v");
dlfun("SubjC_filter_method", "vi#:");
dlfun("SubjC_filter_class", "vi#");
dlfun("SubjC_filter_selector", "vi:");
dlfun("SubjC_default_filter_type", "vi");
dlfun("SubjC_filter_class_prefixes", "viI^*");
dlfun("SubjC_filter_class_prefix", "vi*");

dlfun("fopen", "^{sFILE=}**");
dlfun("fclose", "i^{sFILE=}");

我已经能够加载 libsubjc cycript 脚本,并调用 SubjC_start 函数。但是,如何为以dlfun("SubjC_set_file", "v^{sFILE=}");开头的行指定输入文件句柄

有没有人成功使用带有 Subjective-C 库 (libsubjc.dylib) 的“libsubjc.cy”cycript 脚本来监控应用程序的 API 调用?

更新

这至少会生成输出文件,但我没有看到输出文件(/tmp/test.txt)中填充的任何信息。

cycript -p SpringBoard libsubjc.cy; cycript -p SpringBoard
f = fopen("/tmp/test.txt", "w");

SubjC_set_file(f);
SubjC_set_maximum_depth(15);
SubjC_set_print_arguments(YES);
SubjC_set_print_return_value(YES);
SubjC_set_print_timestamp(YES);
SubjC_default_filter_type(SubjC_Deny);
SubjC_start();
//do stuff
SubjC_end();

或者,如果有人知道在越狱设备上监控 API 调用(无源代码)的另一种方法,请告诉我!

4

1 回答 1

-2

在您的计算机上设置代理服务器以重定向和跟踪所有 API 调用。这是进入 iOS 网络流量峰值的常用方法,您不需要越狱设备。

于 2020-08-11T07:00:26.640 回答