17.03.2013

Выгрузка информации о классах зашифрованных iOS-приложений

image

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

Первый большой шаг при исследовании iOS-приложений – просмотр информации о классах в бинарных файлах. Используя ее, мы можем просматривать скрытые классы и методы, которые определены в скомпилированном исходнике. Что же мы можем с этим сделать? Как только мы сможем управлять API операционной системы iOS при помощи Cycript и MobileSubtrate, можно менять как скрытые, так и системные функций, и тем самым делать все, что мы захотим во время выполнения приложения. В предыдущем примере мы показали, как обойти проверку джейлбрейка, сделав так, что функция “isJailbroken” всегда возвращает false.

Обычно выгрузить информацию о классах можно утилитой class-dump-z. В вышеупомянутом примере при помощи нее мы обнаружили метод “isJailbroken”.

Для того чтобы использовать class-dump-z приложение должно быть расшифровано. На низком уровне можно расшифровать его, используя отладчик GDB, который достает из памяти незашифрованный сегмент после того, как программа запущена в телефоне.

Однако у этого способа есть одно неудобство: грамотный разработчик может реализовать в программе антиотладочные методы, которые не позволят нам «подцепить» GDB к исполняемому файлу. Также возможна реализация других механизмов защиты от отладки.

В таком случае, как можем ли мы заглянуть внутрь зашифрованного бинарного файла?

Ответ: Cycript

Как говорилось ранее, Cycript используется во время выполнения приложения и может «цепляться» к запущенной программе и изменять ее функции. К тому же, у Cycript существует много дополнительных возможностей, одну из которых мы будем использовать. Все это (например, выгружать заголовочные файлы) Cycript может делать благодаря рефлексивной природе Objective-Cи его MVC-архитектуре. Более подробно с основами программирования под iOS вы можете ознакомиться в бесплатном видеокурсе Стэнфордского университета. А теперь вернемся к нашим исследованиям.

Для использования этой техники вам необходим телефон с полным доступом к файловой системе (jailbroken-телефон), cycript, wget и weak_classdump (расширение Cycript).

Последовательность действий:

  1. Используя cydia, установите на телефон cycript и wget.
  2. Скачайте weak_classdump: wget –no-check-certificate https://raw.github.com/limneos/weak_classdump/master/weak_classdump.cy.
  3. Запустите cycript с расширением weak_classdump, в качестве одного из параметров укажите исследуемое приложение: cycript -p [APP_NAME] weak_classdump.cy; cycript -p [APP_NAME].
  4. В командной строке cy# наберите: weak_classdump_bundle([NSBundle mainBundle],”/tmp/APPNAME”).
  5. Подождите некоторое время (пока происходит выгрузка классов).
  6. В директории /tmp/APPNAME должны появиться файлы с полной информацией о классах (см. пример ниже).

Далее вы можете продолжить исследование вашего приложения. К примеру, поискать скрытые методы, которые впоследствии опять же можно «хукнуть» при помощи Cycript

Успешных исследований

Ссылки

8bit from ininjas: http://ininjas.com/forum/index.php?topic=4781.0;theme=12

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

CAPTCHA