# Подготовка к установке

В этом документе описываются шаги, которые необходимо выполнить перед установкой. FIRERPA поддерживает множество типов устройств и архитектур, и здесь перечислены подготовительные действия для различных распространенных устройств. Вы можете выбрать подходящий метод в зависимости от вашей ситуации. FIRERPA состоит из клиентской и серверной частей. Клиентская часть в основном включает библиотеки и API для Python, а серверная часть — это служба, работающая на целевом телефоне. Вы можете установить библиотеки Python на свой компьютер для управления телефоном. Аналогично, если вам нужно управлять устройством с помощью Python, вам необходимо установить и запустить Android-сервер на телефоне, это обязательное требование.

## Основные требования

Идеальная среда для запуска FIRERPA — это устройство, на котором только что были получены root-права (например, новый эмулятор, прошивка со встроенными правами, только что полученный root через Magisk). Убедитесь, что у вас есть Android-устройство или эмулятор с root-правами, оперативной памятью более 2 ГБ и свободным местом на диске более 1 ГБ. Рекомендуется использовать последние версии эмуляторов Nox, LDPlayer или эмулятор AVD. Перед запуском **обязательно проверьте** следующее:

- [X] Отключить Magisk Hide
- [x] Отключить frida-server
- [X] После проверки перезагрузить устройство

```{important}
Если вы не выполните вышеуказанные действия, проблемы с совместимостью могут помешать вам полноценно использовать API FIRERPA или удаленный рабочий стол.
```

## Системные настройки

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

### Проверка часового пояса и времени

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

### Отключение специальных возможностей

Откройте системные настройки, найдите «Специальные возможности» (в разделе «Система» или «Дополнительные настройки») и отключите или удалите все приложения, использующие специальные возможности (например, TalkBack, Auto.js и т. д.).

```{note}
Поскольку специальные возможности могут вызывать конфликты, проверяйте этот пункт только в том случае, если у вас возникли проблемы с использованием удаленного рабочего стола FIRERPA или соответствующих API.
```

## Сетевые настройки

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

Для реального устройства достаточно убедиться, что компьютер и телефон находятся в одной сети. Для эмуляторов, созданный по умолчанию эмулятор обычно не имеет прямого доступа к сети вашего хост-компьютера. Если вы используете Android x86 (виртуальную машину Android на базе VMWare), попробуйте установить сетевой режим «Мост» (Bridge mode) в настройках виртуальной машины. Для эмуляторов, таких как LDPlayer и Nox, необходимо в их настройках установить драйвер согласно инструкциям, включить режим моста, а затем перезапустить эмулятор. Для виртуального устройства Android Studio (AVD) таких настроек нет. Если вам нужно подключиться к AVD, сначала выполните команду `adb forward tcp:65000 tcp:65000` и используйте `localhost` для подключения.

```{note}
Для перенаправленных портов или портов, изначально привязанных к петлевому адресу, мы рекомендуем использовать `localhost` вместо `127.0.0.1`, поскольку некоторые из наших инструментов, например для MITM-атак, используют `localhost` для определения того, используется ли подключение через USB.
```

## Прочие настройки

### WSA (Подсистема Windows для Android)

Если вы используете WSA (Подсистема Windows для Android), убедитесь, что версия WSA не ниже 2210.40000 и что у вас есть root-права. Затем откройте настройки WSA -> Subsystem Resources -> выберите Continuous и отключите Advanced Networking. Выберите Developer, включите Developer mode и разверните вкладку, включите опцию «Support single machine UI automation», а затем перезапустите подсистему WSA.

### AVD (виртуальное устройство Android Studio)

Если вы используете AVD (виртуальное устройство Android Studio), сначала увеличьте размер хранилища и оперативной памяти по умолчанию.

В Android Studio нажмите на Virtual Device Manager, создайте новую виртуальную машину, затем найдите ее и нажмите на кнопку редактирования (значок карандаша).
Нажмите Show Advanced Settings, найдите Storage -> Internal Storage и установите значение не менее 2 ГБ, а размер RAM — не менее 4 ГБ.

### Redroid (Android в Docker)

```{attention}
Следующие методы могут не работать в других дистрибутивах Linux.
```

Если вы используете Redroid (Android в Docker), на примере рекомендованной `Ubuntu 20.04`, сначала установите соответствующие модули `linux-modules-extra`.

```bash
apt install linux-modules-extra-`uname -r`
```

Отредактируйте файл `/etc/modules`, скопируйте следующие названия и вставьте их в конец файла, затем перезагрузите хост-машину.

```bash
# redroid modules
mac80211_hwsim

binder_linux
ashmem_linux
```

Наконец, используйте следующую команду для запуска. Измените `redroid_gpu_mode` и другие параметры в соответствии с вашими потребностями.

```{attention}
Обратите внимание, что следующая команда отличается от официальной. Обязательно используйте именно эту команду.
```

```bash
docker run -itd --rm --privileged --pull always -v /lib/modules:/lib/modules:ro -v ~/redroid:/data -p 127.0.0.1:5555:5555 -p 127.0.0.1:65001:65000 redroid/redroid:12.0.0-latest androidboot.redroid_gpu_mode=guest
```

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

```{note}
К Android-контейнеру, запущенному с помощью этой команды, необходимо обращаться с хост-машины по адресу `http://127.0.0.1:65001`.
```