如何在越狱的iOS设备上监控应用程序的API调用?

20

我正在审查一款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=}");开头的那一行?

有人成功地使用"libsubjc.cy" cycript脚本与Subjective-C库(libsubjc.dylib)来监视应用程序的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调用的另一种方法(无需源代码),请告诉我!


3
相关链接:在iOS上记录objc_msgSend。请注意,您需要提供需要翻译的具体内容。 - user529758
该工具的作者@KennyTM在Stack Overflow上。也许他会看到这篇帖子并提供一些想法? - Nate
https://dev59.com/Pl_Va4cB1Zd3GeqPYvYp - TZubiri
模拟器可能比越狱设备更适合。 - TZubiri
2个回答

1
我不知道有直接等效于API Monitor的工具。然而,Frida是一款常用的移动应用程序检测工具,有一个iOS使用教程。一旦安装完成,您可以使用类似frida-trace -U -i "CCCryptorCreate*" Twitter这样的命令来追踪API调用,以跟踪Twitter应用程序到以CCCryptorCreate开头的函数的调用。

1
我10年前就问过这个问题 :-) 但我认为Frida是今天的正确答案。 - Mick
1
@Mick 嘿,那只是9年零10个月前。 - leo60228

-2

在您的计算机上设置代理服务器以重定向和跟踪所有API调用。这是查看iOS Web流量的常见方法,而且您不需要越狱设备。


请避免在回答中提出问题(澄清或修辞性的)。考虑将条件回答的措辞如“如果您的问题是...那么解决方案是...”。 - Yunnosch
这不是一个Web API。我指的是本地系统调用。 - Mick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接