Ios — Тестирование iOS-приложения. Kiwi + Nocilla


Содержание

Kickfolio: тестирование приложений для iOS в браузере

Новый и довольно необычный способ тестирования приложений для мобильной операционной системы от Apple был представлен на этой неделе. Новая тестовая платформа, построенная на основе HTML5, получила название Kickfolio. С ее помощью разработчики могут без труда тестировать свои iOS-приложения или их новые версии прямо в веб-браузере.

Для того чтобы воспользоваться услугами нового сервиса нужно всего лишь загрузить приложение в ZIP-архиве и вам будет дан ответ в виде ссылки, пройдя по которой можно оценить приложение в действии. Для управления в эмуляторе используется клавиатура и мышь, можно задействовать как портретный, так и ландшафтный режим экрана. Также страница тестирования поддерживает комментарии и форму обратной связи с разработчиком.

Существует и платная версия Kickfolio. С ее помощью можно получить доступ к встроенным в сервис средствам для продвижения приложения. После 15-дневного тестового периода дальнейший доступ к тестовой платформе придется оплачивать. Начальная цена $50 в месяц. За эту сумму можно будет загрузить для тестирования одно или два приложения. Для всех желающих опробовать Kickfolio есть бесплатная демонстрационная версия приложения Angry Bots от Unity Technologies.

В ближайшее время можно будет судить о том, как к новинке отнесутся разработчики, но для небольших начинающих компаний Kickfolio может оказаться крайне удобным средством для тестирования своих приложений перед запуском их в App Store. В заключение, предлагаю ознакомиться с видео, где iOS-эмулятор Kickfolio запущен на Samsung Galaxy Nexus. [9to5]

iOS Kiwi / Nocilla Тесты, не вызывающие блоки

Я пытаюсь познакомиться с базой тестирования Kiwi BDD. Я использую его в сочетании с Nocilla для издевательства HTTP-запросов. Оба проекта выглядят потрясающе, но у меня есть некоторые трудности с этим. У меня есть следующая тестовая спецификация:

Извините за длинный фрагмент кода. Я хочу, чтобы я дал контекст. Как вы можете видеть, я тестирую поведение объекта, который делает запрос GET и сообщает результаты в блоке «success» и сообщает об ошибках в блоке «failure». У меня есть два __block vars для успешного хранения и неудач. В настоящее время тест проверяет, что значение «success» var имеет значение (не ноль). Этот тест проходит. Однако, отлаживая этот тест, кажется, что ни один из блоков не выполняется. Успех Json выглядит нулевым. Я ожидал, что Nocilla передаст содержимое тела заглушки параметру блока успеха. Так мой тест построен неправильно?

Общая структура вашего теста выглядит нормально. Для асинхронного тестирования используйте это:

Причина вышеизложенного: != nil и beTrue заключается в том, что нет необходимости в сочетании с комбинацией, которая может использоваться для проверки на возможное значение nil. В приведенном выше тесте будет обнаружено, что successJson изначально равен нулю и, таким образом, будет продолжать опрос этого значения до тех пор, пока ваш обратный вызов не сделает его не равным нулю.

Обратите внимание: если вы делали положительный тест, например, для проверки successJson == @ «test», тогда вы могли бы использовать более простую форму для ожидания:

Также обратите внимание, что вы можете использовать shouldEventuallyBeforeTimingOutAfter(2.0) чтобы увеличить тайм-аут по умолчанию (на 1 секунду я думаю) на любой тайм-аут, который вы хотите для асинхронных ожиданий.

IOS Тестирование: Проверьте элементы, если существует в UIViewController, используя KIWI

Я использую KIWI для тестирования моего приложения IOS. Я хотел бы спросить, как проверить, если элемент существует в UIViewController, однако, я объявил элемент внутри файла реализации, а не в файле заголовка.

В принципе, вы хотите проверить , если на экране появляется определенный элемент пользовательского интерфейса.

Во — первых, это не то , что модульное тестирование лучше всего подходит для, модульные тесты должны проверить , если некоторые куски кода ведут себя , как ожидается , в соответствии с как можно больше комбинаций входов.

Во- вторых, вы можете сделать некоторые приготовления , если вы действительно хотите , чтобы проверить это, как добавить HomeViewController+Internal.h заголовок , где вы размещаете «частный» член. Или, если контроллер представления таблицы объявляется как свойство, вы можете попросить сгенерированный поглотитель для свойства (например: [controller usersTableViewController] если имя свойства usersTableViewController )

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

XCTest UI и Unit тестирование для iOS

После творческого кризиса, снова в деле)))

Для тех, кому интересно узнать про тестирование iOS приложений, предлагаю посмотреть видео, в котором будут разбираться с возможностями, особенностями и сложностями при работе с нативным фреймворком XCTest для тестирования iOS-приложений.

Есть любитель поминусить просто так, но если найдется чел, который объяснит, почему пост достоин минуса, буду благодарен.


Дубликаты не найдены

Почему-то многие хвастаются UI-тестами, но никто не рассказывает чего стоит их поддержка. В 90% случаев затраты на написание и поддержку превышают профит. от их использования. UI тесты для мобилок — это вложение которое окупается очень долго.

Если это ваш код, у меня для вас плохие новости:

1 )когда вы сравниваете цвета вы делаете массу ненужных преобразований.

2) Если вам так надо извлечь свойства объектов, чем писать костыль для каждого класса проще просто для каждого объекта определить нужные вам свойства и доставать их через keypath (перегрузив valueForKey там где это невозможно из коробки).

3)проверка titleColorForState — это вообще не очень корректно, т.к. оно в общем случае не отражает текущее состояние кнопки, соответственно гораздо правильнее использовать titleLabel.textColor

Минусую, с объяснением и без просмотра самого видео. Здесь — не ютюб. Те, кто хотят смотреть видео — пойдут туда. Когда видео дополняет пост, это нормально. А когда весь пост, это загаживание интернета в попытках увеличить просмотры своего видео, глупо ждать чего-то кроме минусов.

Тестирование приложений IOS через TestFlight

В отличии от тестирования приложений для Android, где тестовое приложение представляет собой установочный файл, с IOS дела обстоят несколько сложнее. Подход централизованного тестирования является фактически единственным возможным методом для быстрой доставки приложения от разработчика до тестировщика (или заказчика).

Тестирование проводится при помощи приложения TestFlight, которое обеспечивает доставку и установку тестовых программ. Время тестовой версии с момента ее отгрузки составляет 60 дней, после чего ожидается загрузка обновленной версии. Если новая версия не отгружена, то тестирование прекращается.

Тестирование разделяется за внутреннее и внешнее. В обоих случаях, составляется список тестировщиков. В случае внешнего тестирования, приложение должно пройти дополнительную «beta»-проверку. Из практики, данная проверка проводится от 1 до 2-х дней. Внутренняя проверка рассчитана на сотрудников компании, которые доверяют разработчикам. Мы склонны применять именно внутреннее тестирование из-за его быстрой динамики.

Этап 1

Для тестирования Вам потребуется знать AppleID, с которым работает устройство. Для просмотра активного AppleID Вам необходимо зайти в Настройки -> iTunes Store и App Store

Список адресов AppleID необходимо передать разработчикам (или организатору тестирования). Внимание! требуется только AppleID и желательно Фамилия и имя, пароль сообщать НЕ требуется. Если мы являемся Вашими разработчиками, то отправьте нам список через форму внизу статьи или на почту dev@ios-lab.ru

Цукерберг рекомендует:  Gulp - Помогите разобраться с BrowserSync + Gulp

Этап 2

После регистрации Вашего AppleID, на почту Вам придет письмо примерно следующего содержания:

Перейдите по ссылке из письма. В открывшемся окне браузера, Вам необходимо согласиться с условиями и подтвердить намерения.

Этап 3

Для ускорения процесса, Вы можете сообщить разработчику о том, что все тестировщики уже подтвердил свое участие (через форму в конце статьи или на почту dev@ios-lab.ru)

Теперь Вам необходимо установить приложение TestFlight из AppStore.

Этап 4

После подтверждения, разработчик подключает Вас к конкретному тестируемому приложению, после чего Вы получаете следующее письмо


Перейдите по приглашению из письма и Вы установите целевое приложение. С этого момента Вы можете начинать тестирование.

Обновление

Если разработчик выкатил новый релиз, то Вам потребуется выполнить обновление через TestFlight практически так же, как и любое другое обновление в AppStore.

По истечении срока тестирования, приложение останется работать на Вашем устройстве. Удалить его можно точно так же, как и любое другое.

Не допускайте наличия тестовой и релизной версии приложений на Ваших устройствах. Перед скачиванием релиза, рекомендуется удалить тестовую.

Отзыв о тестовой версии

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

Отзыв составляется в виде письма разработчикам, на указанный ими адрес для связи.

Форма заявки для подключения к тестированию

Спасибо за заявку! Когда мы добавим новых тестировщиков, мы обязательно с Вами свяжемся!

Ios — Тестирование iOS-приложения. Kiwi + Nocilla

Kiwi: Simple BDD for iOS

Kiwi is a Behavior Driven Development library for iOS development. The goal is to provide a BDD library that is exquisitely simple to setup and use.

The idea behind Kiwi is to have tests that are more readable than what is possible with the bundled test framework.

Tests (or rather specs) are written in Objective-C and run within the comfort of Xcode to provide a test environment that is as unobtrusive and seamless as possible in terms of running tests and error reporting.

Specs look like this:

The Kiwi Wiki is the official documentation source.

To install via CocoaPods, add this to your Podfile :

Or via Carthage, add this to Cartfile.private :

For all the questions / suggestions you have, that aren’t bug reports please use our Google Group

20 приложений для iPhone, которые нужны каждому


В этой статье собраны полезные приложения для iPhone, которые упрощают жизнь и помогают в разрешении различных житейских и рабочих вопросов.

Wunderlist

Самый простой и понятный менеджер задач, который поможет запланировать все ваши дела и довести их до завершения.

Создавайте проекты, списки, напоминания, систематизируйте задачи с помощью папок, прикрепляйте к ним документы и файлы. Wunderlist имеет широкие возможности для совместной работы: задачи можно делегировать или обсуждать, делая это на любых платформах и устройствах, включая даже Apple Watch.

Fantastical

Очень удобный календарь, ориентированный исключительно на Apple-устройства и считающийся одной из лучших альтернатив стандартному календарю.

Главной фишкой Fantastical является распознавание естественного языка, когда вместо точной даты можно писать «завтра утром» или «встреча на полчаса», а также интеграция с большим количеством сервисов и сторонних приложений, включая «Google Карты», Facebook, Twitter, 1Password.

Spark

Добротный почтовый клиент c большим количеством настроек и возможностей для кастомизации.

Есть поддержка Gmail, Exchange, iCloud, Yahoo и других популярных служб, а также интеграция с облачными сервисами. Удобное управление жестами, календарь, умный инбокс и поиск, push-уведомления, настраиваемые панели, менеджер файлов — это лишь малая часть достоинств, за которые вы полюбите Spark.

Scanbot 6

Отличный сканер от Evernote, с помощью которого можно быстро и с удобством создавать цифровые копии ваших документов.

Работает практически на полном «автомате» и одинаково хорошо распознает как стандартные документы, так и более мелкие визитки, квитанции и прочие бумажки. Разумеется, здесь есть интеграция с Dropbox, iCloud Drive и другими сервисами.

Documents

С этим приложением вы сможете держать все свои документы под рукой, с удобством просматривая и редактируя их.

В вашем распоряжении полнофункциональный файловый менеджер, понимающий уйму форматов, который можно подключить к облачным хранилищам и различным сервисам. PDF, .DOC, JPG или MP4 — нет никакого значения, потому что встроенный просмотр умеет открывать любые файлы.

Snapseed

Хороший бесплатный фоторедактор с самыми различными инструментами, начиная от обрезки и поворота фото, до цветокоррекции и фильтров.

В приложении очень удобный интерфейс, позволяющий в два счета выполнять те или иные операции с помощью жестов. В Snapseed много тонких настроек, для каждого фото сохраняется история изменений, но ключевое отличие от конкурентов — это возможность редактировать определенные участки кадра, не затрагивая всего фото.

Переводчик Google

Пожалуй, лучший онлайн-переводчик для iPhone.

Умеет переводить с 80 языков, имеет поддержку голосового и рукописного ввода, функцию «Фотоперевод», а также примеры употребления отдельных слов и фраз. Отличный переводчик на все случаи жизни, который должен быть установлен на каждом iPhone.


Convertible

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

Здесь вам и поддержка валют более 160 стран мира, и виджет для быстрого конвертирования, и встроенный калькулятор, и еще много чего полезного.

1Password

Лучший менеджер паролей, в котором можно хранить данные сайтов, кредитных карт, документов и другую конфиденциальную информацию.

Просто введите все ваши данные один раз, и вам не придется вспоминать их всякий раз, когда они понадобятся — вся информация всегда будет у вас под рукой. О сохранности данных можно не беспокоиться — они будут защищены с помощью надежного 256-битного AES-шифрования, а также единого мастер-пароля.

ВКармане

Отличный менеджер и сейф для копий ваших документов и персональных данных.

Номер и серия паспорта, ИНН, номера банковских карт и прочая важная информация — «ВКармане» будет помнить все это за вас, нужно просто добавить один или несколько документов, и они всегда будут у вас под рукой. Все добавленные данные будут надежно защищены с помощью Touch ID или пароля и 256-битного AES-шифрования.

MoneyWiz 2

Полезное приложение для учета ваших финансов. С ним вам будет проще сводить дебет с кредитом — нужно только не забывать вносить все ваши траты и доходы, и все деньги будут у вас как на ладони.

Из ключевых возможностей можно выделить поддержку нескольких счетов, составление бюджетов, отчеты за выбранный период, синхронизацию с Mac-версией и виджет «Центра уведомлений», который позволит быстро добавлять транзакции даже не открывая приложения.

Wikipanion

Практичный клиент для использования Wikipedia. В приложении реализован удобный поиск, чтение и переход от статьи к статье. Можно добавлять закладки, причем не только на статью, но и на отдельные её разделы.

Кроме того, можно делиться ссылкой на статью с друзьями, сохранить изображение в «Фотопленку» или перейти на карте в место, описанное в статье. Всем, кто часто читает Wiki с мобильного, мы рекомендуем Wikipanion.

Pocket

Этот инструмент позволит вам добавлять понравившиеся статьи, видео и другой контент из Сети в локальное хранилище, чтобы просмотреть его в любое время даже без наличия интернета.

Благодаря расширению, отправлять посты в Pocket можно из любого приложения и места системы.

Feedly

Лучший агрегатор RSS-лент, который поможет быстро и удобно читать контент из источников, на которые вы подписаны.

Вам всего лишь нужно указать интересующие темы, и Flipboard сверстает для вас персональный журнал. Статьи в нем можно лайкать, еще больше повышая точность подбора контента. Вы сможете делиться материалами с друзьями или отправлять их в различные сервисы (например, в Pocket).


Overcast

Удобный менеджер подкастов. С Overcast вы сможете наслаждаться любимыми шоу на всех ваших устройствах, включая Apple Watch.

Помимо подписки на новые подкасты, приложение позволяет организовать ваши существующие подписки и даже защитить их паролем. Есть расширенная поддержка жестов, настройки скорости воспроизведения, синхронизация прослушанных эпизодов на всех девайсах, а также встроенный браузер и полная поддержка AirPlay для воспроизведения подкастов на Apple TV.

Shazam

Приложение, которое по фрагменту песни может назвать вам её исполнителя и выдать всю подробную информацию.

Просто поднесите iPhone к источнику звука и дождитесь, пока приложение распознает трек. Работает даже в условиях сильной зашумленности и при резких посторонних звуках. Теперь не придется в очередной раз гадать, что за классная песня играет по радио, — достаточно просто использовать Shazam, который всегда будет у вас под рукой.

Цукерберг рекомендует:  Поиск клиентов - Где Как вы находите заказчиков на фрилансе

Foursquare

Клиент популярной социальной сети, которая позволяет пользователю узнавать, в каких местах бывают его друзья, а также показывать свое местоположение.

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

Яндекс.Карты

Картографический сервис от российского интернет-гиганта, который многие предпочитают аналогичному решению от Google.

С помощью приложения можно найти любой адрес и получить самую подробную информацию о пробках и оптимальных маршрутах для поездок как на общественном транспорте, так и на собственном авто. Спутниковые снимки, панорамы улиц, народная карта, маршруты общественного транспорта (для 38 городов России и 21 города Украины) и офлайн-карты — все в вашем iPhone, который всегда под рукой.

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

2ГИС — это все организации вашего города, а также их контакты, адреса, время работы, плюс детальная трехмерная карта и маршруты проезда на авто или общественном транспорте.

Opera mini

Безусловно, Safari прекрасен, но неплохо держать под рукой альтернативный браузер. Главные киллер-фичи: доступ к сайтам через VPN, режим экономии трафика и встроенный блокировщик рекламы.

А какие приложения добавили бы в этот список вы? Расскажите нам о ваших любимых приложениях для повседневного использования.

Ios — Тестирование iOS-приложения. Kiwi + Nocilla

QIWI — приложение популярной платежной системы для iOS устройств. Благодаря ему вы сможете выполнять оплату и совершать переводы буквально в пару «тапов».

Пополнение баланса и оплата услуг

КИВИ предлагает несколько способов пополнения личного счета. Пользователям доступно зачисление средств с банковской карты, переводы с других электронных кошельков и пополнение «наличкой» с использованием терминала. Кроме того, можно воспользоваться возможностью вывода средств с мобильного счета.

Управлять своими финансами, сберегающимися в личном кошельке QIWI, не сложнее, чем управлять счетами в банках с помощью мобильных приложений. Да и возможности идентичны: оплата государственных и частных услуг, пополнение аккаунтов на сетевых ресурсах и погашение задолженностей (штрафов ГИБДД, кредитов).


Для регистрации в платежной системе Вам понадобится только активный мобильный номер и несколько минут свободного времени. Авторизация в приложении может происходит путем ввода PIN кода, а также с использованием Face ID и Touch ID.

Преимущества и недостатки

Отличия между QIWI и другими платежными системами не велики. Общий функционал один и тот же, вот в плане удобства и интуитивности данная ПС значительно выигрывает у конкурентов в лице WebMoney и Яндекс Деньги. Тем не менее, по сравнению с последними, QIWI имеет более высокую минимальную сумму вывода. Также система автоматически деактивирует неиспользуемый аккаунт со списанием средств. Учитывайте эти особенности перед началом использования.

Пентестинг приложений iPhone – часть 5

Рассматривается динамический анализ iOS-приложений

В первой статье данной серии мы обсуждали анализ трафика приложений iPhone. Вторая, третья и четвертая части были посвящены подробному анализу небезопасных мест хранения данных на iPhone. В данной статье мы рассмотрим динамический анализ приложений iOS (анализ во время выполнения). Динамический анализ позволяет атакующему манипулировать поведением приложения во время его выполнения, чтобы обойти механизмы безопасности и извлечь из памяти конфиденциальные данные. Перед тем, как перейти собственно к анализу, нам сначала нужно рассмотреть архитектуру приложения iOS и защитные механизмы, действующие во время его выполнения.

Архитектура приложений iOS

Приложение iOS представляет собой zip-архив с расширением .ipa. Архив содержит исполняемый двоичный файл и файл iTunesArtwork, который используется iTunes для управления приложением. Ниже показана типичная структура приложения iOS.

Папка в директории Payload, имя которой заканчивается на .app, содержит двоичный файл приложения, все ресурсы приложения вроде изображений и аудиозаписей, профиль, определяющий разрешения приложения, и подпись кода.

Двоичный файл приложения iOS скомпилирован под архитектуру ARM и использует файловый формат Mach-O (mach object). Данный файловый формат состоит из трех основных разделов: заголовка, загрузочных команд и сегментов/секций. Ниже показана структура файлового формата Mach-O.

Структура Mach-O файлов iOS-приложения может быть просмотрена на подвергшемся джейлбрейку устройстве с помощью утилиты otool. Otool доступен из пакета Darwin CC Tools в Cydia.

Заголовок

Раздел позволяет идентифицировать файл Mach-O и содержит основную информацию о типе файла вроде целевой архитектуры и флагов, влияющих на интерпретацию остальной части файла. Чтобы просмотреть Mach-O заголовок приложения iOS, подключитесь к iPhone через SSH и выполните команду:

otool –h ApplicationBinary

Вот заголовок Mach-O приложения Facebook для iOS.

Значения cputype и subtype в заголовке Mach-O определяют целевую архитектуру приложения. В показанном примере видно, что приложение Facebook имеет архитектуру ARM7.

ARM7s (iPhone 5) = cputype 12/ subtype 11
ARM7 (iPhone 4 & 4S) = cputype 12/ subtype 9
ARM6 (iPhone 3GS) = cputype 12/ subtype 6

Приложения, которые скомпилированы для нескольких архитектур, содержат более одного файла Mach-O. Соответствующие двоичные файлы также называются универсальными или толстыми. Чтобы посмотреть Mach-O заголовок универсального двоичного файла, выполните в SSH-терминале следующую команду:

otool –arch all -h ApplicationBinary

На рисунке выше видно, что приложение CardInfo скомпилировано для процессоров с архитектурами ARM7 и ARM7s.

Загрузочные команды


Загрузочные команды определяют то, как сегменты файла располагаются в памяти, а также линковочные характеристики файла (связи с библиотеками). Они содержат первоначальную разметку файла в виртуальной памяти, расположение таблицы символов, состояние выполнения главного потока программы и информацию о подключаемых разделяемых библиотеках. Загрузочные команды (LC_ENCRYPTION_INFO) также определяют, зашифрован ли файл. Чтобы просмотреть загрузочные команды, выполните в SSH-терминале следующую строку:

otool –Vl ApplicationBinary

Данные:

Файл Mach-O содержит собственно данные приложения в одном или нескольких сегментах. В каждом сегменте может быть некоторое количество секций, в том числе, нулевое. Каждая секция сегмента содержит код или данные определенного типа. Точное количество сегментов, секций и их расположение в памяти описывается в разделе загрузочных команд.

Механизмы защиты приложений iOS во время выполнения

Платформа iOS предоставляет множество защитных механизмов, например, ASLR, защита от повреждения стека и ARC. Понимание этих механизмов защиты важно для выполнения реверсирования и анализа iOS-приложений.

Рандомизация адресного пространства (ASLR)

ASLR – важный метод противодействия эксплоитам, появившийся в iOS 4.3. ASLR значительно усложняет удаленную эксплуатацию уязвимостей к повреждению памяти за счет рандомизации размещения объектов приложения в памяти. По умолчанию приложения iOS используют ограниченную ASLR, которая рандомизирует размещение только части объектов в памяти. Чтобы задействовать ASLR максимально, приложение должно быть скомпилировано с флагом -fPIE -pie (в XCode этому флагу соответствует опция «Генерировать зависимый от расположения код»). В последнем выпуске XCode этот флаг выбран по умолчанию. На рисунке ниже показано состояние различных разделов памяти при частичном и полном применении ASLR.

Чтобы определить, было ли приложение скомпилировано с флагом PIE, подключитесь к iPhone по SSH и выполните команду:

otool –Vh ApplicaitonBinary

На рисунке выше в конце вывода мы видим слово PIE. Это означает, что приложение Facebook было скомпилировано с данным флагом.

Защита от повреждения стека

Защита от повреждения стека – это механизм борьбы с эксплоитами, который защищает от атак переполнения стека путем помещения перед локальными переменными некоторого случайного, но известного значения, называемого стековой канарейкой (по аналогии с живыми канарейками, которых брали с собой шахтеры, чтобы проверить отсутствие взрывоопасных газов). При возврате из функции проверяется значение стековой канарейки. В случае переполнения канарейка будет повреждена, и, узнав об этом, приложение сможет защититься от переполнения. Чтобы включить защиту от повреждения стека, приложение нужно скомпилировать с флагом –fstack-protector-all.

Приложения iOS, которые используют стековых канареек, содержат в двоичном коде строки _stack_chk_fail и _stack_chk_guard. Чтобы определить, использует ли приложение защиту от повреждения стека, подключитесь к iPhone по SSH и выполните следующую команду:

otool –I –v ApplicationBinary | grep stack

Данный снимок экрана свидетельствует о том, что приложение Facebook использует защиту от повреждения стека.

Автоматический подсчет ссылок (ARC)

ARC – еще один механизм для борьбы с эксплоитами, введенный в iOS 5. Он защищает приложения от уязвимостей к повреждению памяти путем перекладывания ответственности за управление памятью с разработчика на компилятор. ARC можно включить, установив значение «yes» для опции «Objective-C Automatic Reference Counting». По умолчанию данный механизм включен.

Цукерберг рекомендует:  Javascript - Как узнать значение переменной в js

Приложения iOS с включенным ARC содержат в двоичном файле строку _objc_release. Чтобы определить, использует ли приложение ARC, выполните в SSH-терминале следующую команду:

otool –I –v ApplicationBinary | grep _objc_release

Показанный выше снимок экрана говорит о том, что приложение Facebook скомпилировано с поддержкой ARC.

Механизмы защиты во время выполнения создают дополнительный слой безопасности приложения. Поэтому хорошей практикой является явное включение этих механизмов при компиляции приложения, а в ходе тестирования на проникновение стоит проверить их наличие.


Реверсирование приложений iOS

Чаще всего iOS-приложения пишутся на языке Objective-C. Objective-C – это динамический язык, основанный на принципах передачи сообщений между объектами. Поскольку язык является динамическим, все классы, методы и прочие компоненты хранятся внутри двоичного файла. Данная информация может быть извлечена с помощью утилиты class-dump-z, созданной kennytm.

Установка class-dump-z

  1. На подвергшемся джейлбрейку устройстве установите из Cydia утилиты wget и unzip.
  2. Подключитесь к iPhone по SSH и выполните указанные ниже команды

wget -U Mozilla/5.0 http://www.securitylearn.net/wp-content/uploads/tools/iOS/class-dump-z.zip
unzip class-dump-z.zip
mv class-dump-z /usr/bin

Чтобы выгрузить из приложения iOS информацию о классах, перейдите в поддиректорию приложения, заканчивающуюся на .app, и запустите следующую команду:

На рисунке ниже показана выгруженная информация о классах приложения Gmail для iOS. Здесь не содержится каких-либо полезных данных, поскольку двоичный файл зашифрован. Приложения, загруженные из AppStore, шифруются с помощью FairPlay DRM для защиты от пиратства.

Чтобы выяснить, является ли приложение зашифрованным, запустите в SSH-терминале следующие команды:

otool –l ApplicationBinary | grep crypt

cryptid 1 говорит о том, что приложение зашифровано. Для незашифрованных приложений значение cryptid равно 0.

Часто первым шагом при реверсировании iOS-приложений является снятие шифрования. Расшифровка приложения позволяет атакующему лучше понять, как работает приложение, внутреннюю структуру его классов, и подготовить двоичный файл для реверсирования. Изначально незашифрованными являются приложения, которые используют модель распространения in-house или являются самоподписанными.

Расшифровка приложений iOS

Когда iOS-приложение запускается, загрузчик расшифровывает его и загружает в память. Данный факт лег в основу хорошо отлаженного метода, позволяющего снимать с приложения защиту от копирования FairPlay. Процесс расшифровки включает в себя следующие шаги:

  1. Нахождение смещения и размера зашифрованных данных внутри двоичного файл приложения.
  2. Нахождение адреса, по которому приложение загружается в память (если оно было скомпилировано с флагом PIE, то этот адрес будет меняться при каждой загрузке).
  3. Выгрузка расшифрованной части приложения из памяти с помощью отладчика (например, gdb).
  4. Замещение зашифрованных данных приложения выгруженными расшифрованными данными.
  5. Изменение значение cryptid на 0.

Весь данный процесс можно автоматизировать с помощью приложений из Cydia, которые называются Clutch и Rasticrac.

Расшифровка iOS-приложения Gmail с помощью Clutch


  1. На подвергшемся джейлбрейку устройстве зайдите в Cydia и добавьте репозиторий http://AppAddict.org/repo, перейдя к пункту Manage->Sources.
  2. Скачайте из Cydia ClutchPatched и IPA Installer.
  3. Подключитесь к iPhone по SSH и наберите команду ‘Clutch’. Она перечислит все установленные на iPhone приложения.
  4. Если теперь указать Clutch определенное приложение, он расшифрует его и сохранит расшифрованные данные в файле с расширением ipa внутри папки /var/root/Documents/Cracked/. На рисунке ниже показано, что Clutch взломал приложение Gmail и сохранил расшифрованные данные в файле /var/root/Documents/Cracked/Gmail-v2.2.0.8921.ipa.
  5. Данный файл ipa можно установить на iPhone прямо из SSH-терминала, используя следующую команду:

installipa –c [iPAPath]

На рисунке ниже показаны выгруженные данные о классах расшифрованного приложения Gmail.

Полный дамп классов расшифрованного приложения позволяет узнать список классов и их методов, что позволяет глубже взглянуть на то, как устроено приложение. Как только дамп классов получен, мы можем искать интересующие нас классы, методы и проводить динамический анализ (анализ во время выполнения).

Динамический анализ через Cycript

Динамический анализ включает в себя реверсирование приложения и анализ его потока управления для обхода блокировок, аутентификации, доступа к конфиденциальной информации в памяти, нарушения логических проверок и доступа к закрытым областям приложения. Objective-C – рефлективный язык, он позволяет модификацию своего поведения во время выполнения. На iPhone поведение приложения во время выполнения можно легко менять с помощью CyCript. CyCript можно найти среди пакетов Cydia.

Cycript – это язык программирования, сочетающий в себе Objective-C и Javascript. Cycript позволяет вмешиваться в процесс ОС и дает доступ ко всем классам, полям и методам выполняющегося приложения.

Перед тем, как приступить к динамическому анализу, необходимо изучить поток выполнения iOS-приложения.

Objective-C по сути является надстройкой над C, поэтому его выполнение начинается с функции main(). Фактически, main() вызывается, когда пользователь нажимает на значок приложения. Главная функция в свою очередь вызывает метод UIApplicationMain. Данный метод инициализирует объект UIApplication, отображает графический интерфейс (окна, представления), создает делегат приложения и запускает цикл обработки сообщений. Делегат приложения отслеживает высокоуровневые действия/события в приложении. С помощью Cycript мы можем подключиться к запущенному процессу и получить доступ к его объекту UIApplication. UIApplication – это синглтон, который представляет приложение и действует как центр управления. Так что, получение доступа к данному объекту – это получение доступа к внутренней структуре приложения.

Возможности Cycript показаны в следующих далее примерах. В целях демонстрации я использовал старую версию приложения Photo Vault. Перед внедрением в процесс с помощью cycript мы сначала выгрузим информацию о классах приложения через class-dump-z.

Доступ к полям объектов через Cycript

Приложение Photo Vault сохраняет конфиденциальность фотографий за счет ограничения доступа по паролю. Когда мы запускаем приложение в первый раз, оно просит пользователя установить пароль. В последующие разы для получения доступа к защищенным фотографиям пользователю нужно ввести правильный пароль. Ниже описаны шаги, как узнать пароль через динамический анализ посредством Cycript.

  1. Запустим приложение Photo Vault. Оно запросит пароль.
  2. Подключимся к iPhone по SSH и получим информацию о процессе с помощью команды ps ax.
  3. Внедримся в процесс, используя команду cycript –p [PID] .
    Замечание: Если вы знаете имя приложения, вы можете также внедриться в его процесс, используя команду cycript –p [ApplicationName] .
  4. В командной строке cycript мы можем получить доступ к экземпляру приложения либо путем вызова метода [UIApplication sharedApplication], либо используя переменную UIApp.
  5. Чтобы найти делегат приложения, выполним команду UIApp.delegate.
  6. Найдем в выгруженной информации о классах делегат приложения PhotoVaultAppDelegate и рассмотрим секцию @interface (также полезной будет секция @protocol). Секция @interface содержит объявление всех методов и свойств, а @protocol – группу связанных методов, которые объект может вызвать через свой делегат.
  7. В делегате приложения содержится интересующее нас свойство – strPass. Запросим значение, хранимое в этом свойстве, набрав в командной строке UIApp.delegate.strPass.
  8. Ура! Мы получили пароль к фотографиям. Можем ввести его в приложении и получить доступ к защищенным фотографиям пользователя.

Cycript также позволяет модифицировать значения полей, вызывать методы и перезаписывать существующие методы прямо во время выполнения программы.

Это пятая часть серии статей о пентестинге приложений iPhone. В шестой части будет рассмотрен динамический анализ приложений iOS с помощью gdb и подмена методов с помощью Cycript.

Ссылки

  1. Debunking NSLog Misconceptions http://oleb.net/blog/2011/06/app-launch-sequence-ios/
  2. Hacking and Securing iOS Applications by Jonathan Zdziarski
  3. «Apple iOS 4 Security Evaulation» by Dino Dai Zovi

Подписывайтесь на каналы «SecurityLab» в Telegram и Яндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

Тестирование приложения в App Store и Google Play

В данной статье мы рассмотрим как заказчик может получить промежуточную версию приложения App Store/Google Play от разработчика и принять участие в тестировании. Разберем на примере приложения “VideoБитва” (Play and Play).

TestFlight от App Store

TestFlight — служба бета-тестирования Apple для приложений iOS.

Чтобы приступить к тестированию приложений при помощи TestFlight, необходимо получить приглашение по электронной почте от разработчика или воспользоваться ссылкой общего доступа.

Участники команды разработчика в App Store Connect могут присоединиться в качестве внутренних тестировщиков, которым будут доступны все сборки приложения. Также разработчик может пригласить пользователей присоединиться к тестированию приложения с помощью сообщения с приглашением или общедоступной ссылки. Если участник команды разработчика в App Store Connect не является внутренним тестировщиком, его можно добавить в качестве внешнего тестировщика, при условии прохождения приложения бета-ревью в App Store.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих