Я выполняю обзор приложения iOS, для которого у меня нет исходного кода. Чтобы получить больше контроля над средой, я запускаю приложение на взломанном iPad.
Я бы хотел отслеживать вызовы API, которые делает приложение... в идеале я хотел бы найти что-то вроде Rohitab MS Windows на основе API-монитор, но вместо этого для iOS.
Я провел некоторое исследование и нашел проект KennyTM под названием " Subjective-C", который кажется, что он может делать то, что мне нужно. Я фактически использовал cycript script, а также libsubjc.dylib, доступный на сайте Google.
Однако мне не удалось выяснить, как правильно заставить его запускать вызовы журналов для приложения. Здесь ссылка на cycript script, написанная автором Субъективной-C (libsubjc). Я также вставил script ниже.
/*
libsubjc.cy ... Use libsubjc in cycript.
Copyright (C) 2009 KennyTM~ <[email protected]>
[...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 script и вызвать функцию SubjC_start. Однако, как я могу указать дескриптор входного файла для строки, начинающейся с dlfun ( "SubjC_set_file", "v ^ {sFILE =}" );
Кто-нибудь успешно использовал cycript libsubjc.cy с библиотекой Subjective-C (libsubjc.dylib) для мониторинга вызовов API приложения?
UPDATE
Это, по крайней мере, генерация выходного файла, но я не вижу никакой информации, заполненной в выходном файле (/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 (без исходного кода) на джейлбрейк-устройстве, пожалуйста, дайте мне знать!