Cold boot android emulator

Анализ трафика приложений на Android Emulator. Причем здесь Root?

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

Классический путь начинается с установки какого-нибудь Charles, настройки в нем proxy-сервера и попытки слушать трафик, однако мы быстро натыкаемся на проблему — все адекватные современные приложения используют HTTPS, а поэтому — на ваше устройство придется установить сертификат, который и позволит слушать трафик. Тут то и начинается самое интересное.

Давайте создадим чек-лист, на который будем ориентироваться в процессе:

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

⚑ Вы находитесь здесь

⚐ Установка сертификата для MITM

⚐ Проверка работоспособности прослушки трафика

⚐ Перенос сертификата в системное хранилище

Установка Android Emulator

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

1. Выбираем любой подходящий вариант, с важной оговоркой — это должна быть сборка без Google Play, но с Google Play Services (далее будет видно). Соответственно — выбираем устройство без треугольника

2. Выбираем любой интересующий образ в котором есть Google Play APIs

3. Устанавливаем параметр Cold Boot

Установка сертификата для proxy-sniffer

Для прослушки трафика я буду пользоваться Fiddler Everywhere. И покажу порядок настройки данной софтины, согласно которому мы закроем еще один пункт нашей дорожной карты.

Тут я сделаю небольшое лирическое отступление — данная программа платная, да и еще по подписке, и стоить будет, в лучшем случае — 10$ в месяц. Но, у вас будет триал в 30 дней, после которого нужно больше золота, поэтому можно использовать любой другой инструмент. Сам я пытался заюзать Postman — в нем тоже есть proxy-tooling, однако, корневые сертификаты, которые генерирует Postman, не пригодны для установки в Android 10 / 11. Однако, служба поддержки уже бдит, и, надеюсь, за отведенные 30 дней триала все заработает как надо (в Postman) и вы сможете пользоваться наиболее удобным (с моей точки зрения) инструментом для решения данной задачи. Когда это случится — я дополню данную статью. А теперь возвращаемся к процессу установки сертификата на устройство (эмулятор).

Нам необходимо раскрыть пункт Advanced Settings в настройках Fiddler, и экспортировать корневой сертификат. В данный момент я пользователь Windows и на данной ОС он окажется на рабочем столе, подсказка об этом показывается по наведению на значок вопроса.

После экспорта сертификата, плавным движением кистей рук, переносим его на запущенный эмулятор — файл окажется в папке . /Downloads . После чего можно сразу идти в настройки и устанавливать наш серт:

Отлично! Можем поставить галочку у еще одного пункта:

⚑ Установка сертификата для MITM

Проверяем, все ли ок

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

А также бесконечное количество попыток SSL-handshake в Fiddler. Кажется, пора поставить прочерк сразу напротив двух пунктов нашей дорожной карты:

Читайте также:  Что может быть свадебным андроид

⚑ Проверка работоспособности прослушки трафика

Я есть root

Мне кажется, что наступил момент рассказать, для чего нам вообще рут? Все дело в том пресловутом изменении Android 7, после которого пользовательские сертификаты перестали быть доверенными. Посему — нам необходимо сделать что-то с нашим установленным сертификатом, чтобы мы смогли использовать его для изучения трафика нашего рабочего приложения. И сделать это можно, только если ваш девайс рутован. Тут же заключается и причина использования эмулятора, да и связанные с этим особенности: без эмулятора вам придется иметь постоянно рутованное устройство, если это отдельный выделенный смартфон — то проблем с этим особенно и нет (ну, кроме зарядки, постепенного устаревания и ограничений конкретной модели), однако, если у вас свой личный аппарат — то минусы от root могут быть существенными — не работающая система безопасности, сломанный Google Pay или отвалившиеся камеры. Ну и помимо всего прочего — эмулятор позволяет легко изменить версию Android (правда, придется повторить все действия, перечисленные тут, но у вас уже будет эта статья, а я вот это все пишу её не имея).

А теперь приступим. Благодаря прекраснейшему проекту весь процесс сводится к запуску всего лишь одного скрипта, с небольшими подготовительными работами. Также, обращайте внимание на то, что выводится в консоль и если вы пользуетесь Windows — то запускайте не .sh , а .bat . Возможно, WSL будет тут как раз кстати, но моя система, скажем так, с некоторыми особенностями, которые WSL использовать не позволяют (если вы знаете, как завести на Ryzen 5000-серии и WSL и Android Emulator — то прошу написать об этом комментарий).

А вот и сами работы:

Плюс, нужно перезагрузить эмулятор. Ну и, у пользователей Windows путь до образа будет примерно таким:

На выходе мы получаем рут, который сохраняется при перезагрузке эмулятора, но wipe делать не стоит.

Делаем сертификат доверенным

Для этого нам понадобится перенести его в хранилище доверенных сертификатов. Тут рут нам и нужен (не только тут, но это позже).

Для этого мы запускаем цепочку следующих команд:

После чего наблюдаем следующую картинку в системных сертификатах:

Наш сертификат стал системным, поэтому закроем еще один пункт:

⚑ Перенос сертификата в системное хранилище

И давайте сразу проверим наше приложение:

Отлично! Теперь мы можем слушать HTTPS-трафик любых (ли?) приложений с эмулятора. Давайте, чтобы закрепить результат, попробуем еще одно приложение — Avito (как говорили Ник и Майк — это крепкий орешек).

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

SSL-Unpinning

На данную тему есть множество решений, но, как правило, все они крутятся вокруг одной идеи — пересборки приложения, которое вы хотите изучить. Данный подход весьма громоздкий, сложный и может сподвигнуть к прокрастинации, поэтому нужно что-то такое, что позволит сделать все намного проще и универсальнее. И рецепт этого чего-то прямо тут, бесплатно и без СМС:

Благодаря наличию root установим Xposed

Благодаря Xposed установим модуль для отвязки SSL-привязки

Profit. (два пункта тут смотрелись бы уныло)

А теперь давайте по порядку.

Установка Xposed

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

Скачиваем последнюю версию Magisk-модуля с интересным названием Riru и устанавливаем его посредством Magisk

Закрываем эмулятор, а затем снова запускаем (данный шаг эмулирует перезагрузку, которая у меня, по каким-то причинам, не работает, если работает у вас — может быть достаточно и её)

Читайте также:  Root для android одной кнопкой

Находим в репозитории Magisk модуль с названием Riru — LSPosed и устанавливаем его

Снова ребутим эмулятор

Открываем приложение LSPosed, в котором необходимо установить уже Xposed-модуль SSLUnpinning

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

После этого вы оказались в ситуации, когда у вас есть эмулятор с:

Полноценным рутом (Magisk)

Установленным MITM-сертификатом в User-space

Установленным Xposed (LSPosed)

Установленным модулем для SSL-Unpinning

В процессе имея следующий набор картинок:

Можно честно поставить галку:

Настал час проверить, работает ли этот паровоз:

Работает! Ник и Майк ошиблись! Можем ставить и последнюю галку:

Какие есть нюансы? Во первых — при каждом включении эмулятора будет необходимо снова делать сертификаты доверенными (в принципе, после всех этих процедур можно отключить Cold Boot, и тогда не придется, но рано или вам придется перезагрузить эмулятор «жестко», и тогда потребуется поработать и с сертификатами). Возможно, тут есть постоянное решение или это можно, на худой конец, автоматизировать, но я устал. Во вторых — не все приложения в принципе хотят запускаться на эмуляторе. Самый надежный вариант — иметь набор выделенных телефонов на разных версиях Android, все из которых будут иметь весь арсенал инструментов из данного мануала (с небольшими изменениями), но он не всегда возможен.

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

Делаем приготовления (ставим Android Studio), чтобы иметь возможность установить / запустить эмулятор

Устанавливаем эмулятор с параметрами, определенными выше

Устанавливаем интересующие нас приложения на эмулятор методом перетаскивания курсором и убеждаемся, что они в принципе работают и все это будет не зря

Получаем root (Magisk) посредством инструкции, указанной выше

Источник

Android emulator gives error “Resetting for cold boot: emulation engine failed” and exits

After updating AS now emulator quits every time I start it. Below is the screenshot I managed to capture before it disappeared.

In the logs the following are printed

14:49 Emulator: WARNING: change of renderer detected.

14:49 Emulator: C:UsersNuxAppDataLocalAndroidSdkemulatorqemuwindows-x86_64qemu-system-x86_64.exe: error while loading state for instance 0x0 of device ‘goldfish_pipe’

14:49 Emulator: deleteSnapshot: for default_boot

14:49 Emulator: qemu: unsupported keyboard cmd=0x84

14:49 Emulator: qemu: unsupported keyboard cmd=0x84

14:49 Emulator: Process finished with exit code 0

I already tried the following:

  1. Delete all my virtual devices and created new ones.
  2. Wipe Emulator data.
  3. Tried to lunch emulator manually in AVD.
  4. Launch emulator with the option «Cold boot now».

And none of them worked. Any help will be appreciated!

Answers

I had the same problem. What worked for me:

  1. Editing the AVD configuration and on Graphics I selected «Software».
  2. Lower uncheck «Device Frame».(without this step it was keeping crashing).
  3. Wipe data
  4. Cold boot.

And now it works fine. Hope my advice will help to anyone.

Late to answer but I think this will help..

  • First and foremost what is your PC’s configuration?? , how much RAM?? b’coz higher the API level you set , more processing time will be taken by emulator..
  • If you have good configuration PC, then as mentioned by many, you should Wipe user data from AVD and uncheck load from snapshot and then give this a try..
  • Still prob, delete the AVD and recreate.
  • Still prob, then try Android x86 instead of armeable simulators. Android x86 are much more faster ..
  • Your eclipse is updated as you mentioned then try opting for x86 emulators.. Refer here..
  • Try restarting Eclipse as a last resort. 😛

Developing an application is generally for a targeted devices, so if possible run and test on real device itself.

Источник

Quick Boot for Android Emulator in Practice

Dec 29, 2017 · 4 min read

Читайте также:  Самый популярный виджет погоды для андроид

Recently a game changer was announced in Android Developers Blog — super fast boot for Android emulator. Less than 6 seconds and it’s ready to go.

How cool is that!

Quick Boot — Released as a stable feature today, Quick Boot allows you to resume your Android Emulator session in under 6 seconds.

The first time you start an Android Virtual Device (AVD) with the Android Emulator, it must perform a cold boot (just like powering on a device), but subsequent starts are fast and the system is restored to the state at which you closed the emulator last (similar to waking a device). [source]

This is how the first boot looks:

“Saving state…” is happening on exit automatically:

But… what to do if Android emulator stuck at some point and doesn’t react to any interactions? Close emulator and reopen it again? Not really. Only if you want to save a broken state…

Let’s find out how we can configure and smarter use Quick Boot feature with UI or the command line.

1. Update Android Studio/Emulator

Thi s functionality is included in the newest version of Android Studio and enabled by default for your existing virtual devices and for new ones.

We accomplished this by completely re-engineering the legacy emulator snapshot architecture to work with virtual sensors and GPU acceleration. No additional setup is required because Quick Boot is enabled by default starting with Android Emulator v27.0.2. [source]

2. Configure emulator behaviour for a virtual device

Fortunately, there are some configuration options which we can manage.

  • In Android Virtual Device Manager if creating a new virtual device or editing an existing one (behind Advanced Settings button)

$ emulator -avd Virtual_Device_Name_API_26 [options]

-no-snapshot-save performs a quick boot if possible, but does not save the emulator state on exit. [source]

  • In extended settings for a running Android Emulator

With option “Ask” on exit it will look like this:

Once I had a case when Android emulator got frozen. I just exited the emulator in order to reboot it. I forgot that Quick Boot exist and it saved that unwanted state of my virtual device. Who cares if it does respond in my case? At least the boot was super fast! I love this feature.

So I needed to reboot my emulator without using a previous state. “ How can I “unstuck” my emulator? Hm, I will disable Quick Boot feature for a while: close the emulator without saving the current state and reopen it to have a fresh new start! It will just do a cold boot, right? Easy!” I thought. Nope!

The configuration didn’t work as I expected. Quick Boot feature is so smart that it keeps the latest saved state from #1 (cold boot) … to #n (your last exit if enabled). As I already had a saved state #n, and even if on exit I declined saving the current state (#n+1), it boots to a previous saved state #n again. And why did I think that I could get a new #1? Never mind.

3. Reset/ignore a saved state

Alright. We can always ignore a saved state and reboot an emulator in UI or in the command line. Fresh start for my emulator!

  • In Android Virtual Device Manager

$ emulator -avd Virtual_Device_Name_API_26 [options]

-no-snapshot-load performs a cold boot, and saves the emulator state on exit.

-no-snapshot disables the Quick Boot feature completely—it does not load or save the emulator state. [source]

Conclusion

Thanks for Quick Boot feature! I really love it. Android emulator boots MUCH faster now!

Thanks for reading! 👍

PS. Less time on boot, more time on exit 😉

Источник

Оцените статью