22.03.2014

Безопасность IOS-приложений (часть 19) – использование Introspy внутри собственных скриптов

image

В этой статье мы рассмотрим использование Introspy внутри скриптов в качестве python-модуля.

Автор: Пратик Джианчандани (Prateek Gianchandani)

В этой статье мы рассмотрим использование Introspy внутри скриптов в качестве python-модуля.

Первым делом необходимо импортировать модуль introspy, а также Namespace из модуля argparse.

Рисунок 1: Импорт модуля introspy, а также Namespace из модуля argparse

Затем создадим экземпляр класса Introspy. В качестве аргументов необходимо указать имя базы данных, имя группы, подгруппы и списка. Мы будем указывать только имя базы данных, а в остальных аргумента будем передавать значение None (в этом случае в экземпляре будет содержимое всех групп и подгрупп).

Click to Enlarge

Рисунок 2: Создание экземпляра класса Introspy

Теперь создадим экземпляр с указанием конкретной группы и подгруппы. Названия групп и подгрупп я смог найти только в HTML-отчетах, которые мы создавали в предыдущих статьях. Если вы посмотрите на рисунок ниже, то увидите, что элементы меню могут быть использованы в качестве имен групп, а подменю – в качестве имен подгрупп.

Click to Enlarge

Рисунок 3: Элементы меня и подменю созданного отчета

Именами групп могут быть DataStorage, Crypto, Network, IPC и т. д., а именем подгруппы для группы Network – HTTP. Создадим объект с именем группы Network и именем подгруппы HTTP.

Click to Enlarge

Рисунок 4: Создание экземпляра Introspy с указанием группы и подгруппы

Отобразим все методы и атрибуты, которые доступны в объекте introspy.

Рисунок 5: Перечень методов и атрибутов объекта introspy

Как видно из рисунка выше, у объекта Introspy есть атрибут analyzer. Рассмотрим все методы и атрибуты у этого атрибута.

Click to Enlarge

Рисунок 6: Перечень методов и атрибутов у атрибута analyzer

Содержимое findings (элементы отчета по конкретной группе и подгруппе) можно увидеть либо используя атрибут findings, либо метод get_findings (см. рисунок ниже).

Click to Enlarge

Рисунок 7: Перечень элементов отчета по конкретной группе и подгруппе

Все сигнатуры анализатора можно увидеть внутри атрибута signatures.

Click to Enlarge

Рисунок 8: Перечень всех сигнатур анализатора

На рисунке выше приведен перечень экземпляров объекта signature. Попробуем получить информацию из экземпляров сигнатур. В предыдущей статье мы, изучая файл signatures.py, выяснили, что каждый экземпляр сигнатуры содержит заголовок, описание, фильтр и т. д.

Рисунок 9: Перечень атрибутов объекта сигнатуры

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

Click to Enlarge

Рисунок 10: Цикл по списку и отображение заголовка и описания экземпляров сигнатур

Далее я вывел список всех комбинаций методов и классов, содержащихся в фильтрах каждой сигнатуры. Обратите внимание, что в этом списке может не быть точной реализации метода, используемой фильтром, поскольку метод может принадлежать как классу, так экземпляру класса. К примеру, как видно из рисунка ниже, не существует метода [NSUserDefaults stringForKey:], но существует метод экземпляра [[NSUserDefaults standardUserDefaults] stringForKey:].

Click to Enlarge

Рисунок 11: Перечень комбинаций классов и методов

У каждого объекта анализатора есть атрибут с именем tracedCalls, содержащего перечень всех вызовов, которые были обнаружены во время выполнения приложения. Если мы посмотрим на код класса tracedCalls, мы увидим у него атрибуты callId, method, clazz и т. д.

Click to Enlarge

Рисунок 12: Перечень атрибутов класса tracedCalls

Мы можем просматривать информацию любого экземпляра класса tracedCall. На рисунке ниже приведено содержимое атрибутов первого вызова.

Click to Enlarge

Рисунок 13: Содержимое атрибутов первого вызова

Заключение

В этой статье мы научились использовать модуль introspy внутри наших собственных скриптов, получать различную информацию о сигнатурах, вызовах и т. д. из сгенерированного файла базы данных и отображать эту информацию в том виде, в котором захотим. Это полезно при подготовке нестандартных отчетов во время анализа конкретного IOS-приложения. Эту информацию также можно передавать в другие python-скрипты для выполнения других специфических задач.

Ссылки

или введите имя

CAPTCHA