Какая функция / системный вызов используется iOS для чтения и записи файлов

Я хочу перехватить чтение / запись файлов на iOS, чтобы обеспечить прозрачную функциональность шифрования / дешифрования для некоторых моих приложений.

Я знаю, что для этого могу использовать различные методы SDK для чтения / записи файлов, но это влечет за собой ОЧЕНЬ тяжелую работу и подвержено ошибкам (я могу пропустить использование какого-либо метода, что приведет к сбою / неправильному поведению моего приложения).

Если во всех этих методах используется какой-то общий системный вызов / функция, то я бы предпочел поменять его и сэкономить на тяжелой работе + сделать его более надежным. Есть ли такая общая точка входа?

PS: Принятие в магазин приложений здесь не является критерием, поскольку все эти приложения предназначены для внутреннего развертывания на предприятии.

Спасибо!


person Karthik    schedule 13.08.2012    source источник
comment
Вы можете изучить встроенную защиту данных на iOS (прокрутите немного вниз по этой ссылке) вместо того, чтобы изобретать колесо. В корпоративном развертывании вы должны иметь возможность принудительно ввести требование кода доступа, которое включает встроенное шифрование.   -  person rickster    schedule 17.02.2013
comment
Эм, отсутствует фактическая ссылка ... здесь мы идем.   -  person rickster    schedule 17.02.2013


Ответы (1)


Для этого вам понадобится взломанное устройство.

Существуют системные вызовы POSIX read и write, которые могут быть взломаны (вот как - не для iOS, но все равно Дарвин ...)

Вы также можете использовать MobileSubstrate (http://iphonedevwiki.net/index.php/MobileSubstrate) для перехватить функции read () и write () в стандартной библиотеке C, которая почти исключительно используется для реализации многих базовых фреймворков и методов (включая CocoaTouch - Foundation, CoreFoundation и, по сути, некоторые стандартные библиотеки C и C ++ а также и т. д.) - так что, скорее всего, вам не нужно будет напрямую изменять системные вызовы. Пример:

static size_t (*orig_write)(int fd, void *buf, size_t n);

size_t hijacked_write(int fd, void *buf, size_t n)
{
    // do something, then
    return orig_write(fd, buf, n);
}

// in some initialization:
MSHookFunction(write, hijacked_write, (void **)&original_write);
person Community    schedule 13.08.2012
comment
Спасибо. PS: Для этого мне не нужно иметь джейлбрейк. Я могу сам написать swizzling-код и использовать его в своем приложении. Я просто не могу отправить его в магазин приложений. - person Karthik; 13.08.2012
comment
@Karthik, ты действительно должен быть JB'en. MSHookFunction требует исправлений ядра. - person ; 13.08.2012
comment
Извините, я только что понял, что нам нужно иметь исправленное ядро, поскольку нам нужно записать нашу собственную логику на страницу памяти, которая должна быть как записываемой, так и исполняемой; что не позволяет ядро ​​по умолчанию :( - person Karthik; 13.08.2012