我正在对我没有源代码的iOS应用程序进行审核。为了获得对环境的更多控制,我在越狱的iPad上运行该应用程序。
我希望能够监控应用程序正在进行的API调用...理想情况下,我希望找到类似Rohitab基于MS Windows的API Monitor,而不是iOS。
我做了一些研究,发现KennyTM的一个名为“Subjective-C”的项目似乎可以满足我的需要。我实际上一直在使用cycript脚本和libsubjc.dylib available on the Google code site。
但是,我一直无法弄清楚如何正确地让它开始记录应用程序的调用。这是Subjective-C(libsubjc)的link to the cycript script, written by the author。我也粘贴了下面的脚本。
/*
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调用(没有源代码)的另一种方式,请告诉我!
答案 0 :(得分:-1)
答案 1 :(得分:-1)
在计算机上设置代理服务器以重定向和跟踪所有API调用。这是进入iOS网络流量的一种常用方法,不需要越狱的设备。