В этой статье мы поговорим о методах выгрузки классов для 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).
Последовательность действий:
Далее вы можете продолжить исследование вашего приложения. К примеру, поискать скрытые методы, которые впоследствии опять же можно «хукнуть» при помощи Cycript
Успешных исследований
Ссылки
8bit from ininjas: http://ininjas.com/forum/index.php?topic=4781.0;theme=12