выполнения приложений вне системной песочницы использование всех системных вызовов, в т.ч. fork(2) возможность запуска неподписанных бинарников возможность использования динамических библиотек активируется при помощи бинарного патча на ядро Sandbox Системный фреймворк для ограничения доступа, управляется набором правил (аналог systrace, DTrace) Активен для всех установленых приложений (в ˜/Applications/).
AppStore интеграция привычных UNIX-приложений на iPhone: OpenSSH gdb <your favorite unix tool here> темы оформления расширеная функциональность: доступ ко всем системным вызовам использование демонов инъекция в приложения (в том числе системные демоны и менеджеры: SpringBoard, etc.)
программами, библиотеками и операционной системой, обеспечивающих взаимодействие этих компонентов на низком уровне на данной платформе Mach-O Mach Object стандарт ABI в Mac OS X (mach-o(5)) mobile$ file /System/Library/CoreServices/SpringBoard.app/SpringBoard /System/Library/CoreServices/SpringBoard.app/SpringBoard: Mach-O executable acorn
в режиме интерпретатора реализован на ptrace(2) class-dump генератор прототипов классов и протоколов на базе runtime-секции бинарника IDA профессиональный инструмент для дизассемблирования и анализа кода ARM Help встроенный в OSX ARMARM с индексированием man(1) ваш друг, товарищ и брат
посылать USSD-запрос оператору с текстом ∗101# 2 будет перехватывать интерфейс USSD-оповещений в SpringBoard и временно отключать его 3 будет обрабатывать ответ и выдирать из него остаток на счету 4 будет показывать остаток в форме, доступной через SBSettings 5 и будет автоматически обновлять баланс каждые пять минут
CoreTelephony и commcenter. Необходимый нам код скорее всего находится в MobilePhone, изучим его с помощью class-dump, IDA и GDB... Судя по списку классов, нам надо смотреть в PhoneApplication, особенно красив метод - (BOOL)dialPhoneNumber:(NSString *)phone forUID:(int)fp12 dialAssist:(BOOL)fp16; // IMP=0x0000a14c
этом не забываем про “магические” self и cmd в r0 и r1). Остановим выполнение MobilePhone в gdb прямо в начале потенциального метода: (gdb) b *0xa14c Breakpoint 1 at 0xa14c (gdb) cont Continuing. и посмотрим на phone, как только брекпоинт сработает: Breakpoint 1, 0x0000a14c in ?? () (gdb) po $r2 *101# (тут po сокращение от print-object, команды, которая вызывает -description на целевом ObjC-объекте)
CoreTelephony: CTCallDialWithID После анализа тела функции выше, можно смело утверждать о назначании двух аргументов этой функции. Попробуем запустить ее самостоятельно: (gdb) p (int)*0x5e3ac(@"*101#", -1) 0x0 функция выполнилась, а на экране – UI отправки USSD запроса. Искомый API для инициализации USSD запросов найден.
и выполнить необходимый код. Так, Winterboard перехватывает open и возвращает не оригинальные файлы с графикой, а файлы из каталогов текущей темы. Функции: инъекция в любую ARM/Thumb C-функцию инъекция в любой Objective-C метод загрузка пользовательских библиотек или бандлов
SpringBoard. получим список классов с помощью class-dump и изучим их. Нашей цели скорее всего соответствует класс SBUSSDAlert. с помощью анализа бектрейса у методов этого класса (используя брейкпоинты в gdb и адресам полученным из class-dump), что в методе +registerForAlerts происходит регистрация SpringBoard в системе событий CoreTelephony.