# Module #3
# Обратная разработка
iOS достаточно непростая платформа для обратной разработки. Зависит это напрямую от того, что приложения создаются с использованием Swift или Objective-C. Эти языки программирования которые используются для компиляции приложений. Поэтому после создания приложения большое количество данных алгоритма теряется навсегда.
Чтобы изучать такие приложения нужно использовать специальные преобразования:
- Декомпиляцию
- Дезасемблирование
Как дополнительная сложность в приложениях iOS для доступа к функциям используются селекторы. Это указатели, которые получают свое значение только при запуске приложения. Отчего анализ приложения становится в ряде случаев возможен только в рантайме.
## Декомпиляция
Процедура получения кода, который будет близок к исходному с помощью которого было собрано приложение. Иногда декомпиляция использует промежуточное представление, которое будет упрощать анализ, но не будет повторять исходный код приложения.
Один из методов ускорения изучения приложения.
Успех процедуры зависит от особенностей платформы, которую исследуют.
Так как для iOS алгоритм, который создал программист помещается в файл типа Mach-O, при отсутствии механизмов защиты и запутывания кода. Возможно восстановить до 80% всего алгоритма.
Полное восстановление алгоритма возможно лишь в случаях, если для анализа используют дополнительные методики анализа ПО - динамическая инструментация или отладка.
## Дизамблирование
Процесс получения низкоуровнего представления алгоритма приложения. Зачастую это получение набора команд на языке ассемблера, который используется платформой.
Для iOS это получение кодманд языка ассемблера для процессоров ARM.
Основная особенность языка ассемблера платформы - фиксированная длина команды, использование многопозиционных команд.
Пример дизассемблированного кода:

Для того чтобы исследовать приложение лучше всего использовать инструменты:
- Hopper;
- IDA Pro [Тестовая версия](https://forum.reverse4you.org/t/leaked-ida-pro-7-2-hexrays-2-x64/10623);
### Полезные вкладки/кнопки
В качестве основного инструмента для изучения приложений будем использовать IDA PRO.
Подробный не официальный гайд можно найти [тут](https://www.amazon.com/IDA-Pro-Book-Unofficial-Disassembler/dp/1593272898).
Для всех исследований нам понадобится:
- Вкладка Strings
- Вкладка Hex
- Вкладка GraphView
## Особенности обратной разработки для iOS
Особенности работы с приложением зависят от того какой язык програмирования использовался для разработки приложения.
В случае с Objective-C получение данных и изучение алгоритма возможно только в случае запуска приложения(динамический анализ)
В случае с Swift может сработать статический анализ, однако будет затруднение в чтении данных об объектах языка. Чтобы разбирать полученные названия, можно прибегнть к помощи Xcode(xcrun swift-demangle)
## Практическое задание
- Установить ознакомительную версию IDA PRO
- Познакомиться с представением данных
- Провести навигацию по дереву вызова функций