Enable run in bg что это

All GPS Problem Solution and fix for Smartphone(including MT6589,MT6577,MT6572 Major fixed)

Sunday, 1 December 2013

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

34 comments:

6572 here. i tried several times again and again. i couldnt fix it yet. still searching. i found gps’ on red but they dont turn to green or yellow.

is there a spesific settings for it. your phone menu is a liitle bit different than mine.

I tried thqt to but stil it is not working

Hi, and thanks for the guide. I have got one small problem though. The «Location Based Service» selection is disabled (out grayed) while the YGPS selection is OK to use. I have the MT6572. Do you know what is wrong and what I can do about it?

A system app named ‘ locationEM.apk ‘ is required here.
you can collect it from any custom or stock rom according to your os version. then using root explorer copy the file to system/app.
fix the permission like rw-r—r—

Then you can open Location Based Service.

Have you tried calling the company and telling them what is going wrong? I wonder if there are problems with the satellite and not the GPS. That would be very interesting if a satellite was causing problems like this. http://www.smartfleetusa.com/

Hi.
I have installed IGO on my Android but it seems that it cannot collaborate with the cellphones GPD.
It cant find my current position and every time I put an adress for destination, the same message appears:
«»»A route cannot be calculated to the given destination(s).
The road network between the rout points is not continuous»»»»»»
Can anybody help me?
Thank you.

No luck for MTK 6572 despite of all tricks. Any help please?

i have try it on tablet lenovo a5500 and all the time i open a gps program i get the message :
sl request received for up session
how to stop this?

When i bought my v967s used to lock in 45 to 60 seconds.Last 2 months stopped locking at all.Following your instructions locks in 3. seconds.Thank you very much my friend.

I followed your instructions, in a Jiayu G3DCN (MTK6577 Dual-core stock rom 4.1.2, from jiayu.es) and works like a charm.

Suddenly my phone has a GPS absolutely functional. Awesome!

I suggest Here Maps (formerly Nokia Here Maps) for android for secure navigation. I don´t know why but the GPS this one app its much faster and exact than other similar apps.
And it have a wonderfull offline navigation experience.

Sorry for my bad english.

Regards and THANK YOU!
Andrés

Thanks for sharing the solutions of GPS problems. One more thing, I am glad to browse your blog.
online Truck booking | Custom gps solution

Hi, I get 4-5 green satellites out of the 12 or so in total. Is that enough? I enabled background mode, do I need to restart the app and go to ygps each time I turno on the phone, wait for the fix and then I am done? Do I have to leave the app open all the time I need to use GPS (all day, basically!).

I found myself with a brand new Lenovo S660 which is a good phone but the the GPS turned out to be unusable! If this does the job, you saved a cellphone! 😉

Ok, GPS is working fine when I get green satellites but all of them will go back to red after a while in background.

Plus, the app drains the battery fast, I guess we should run it only when needed.

In this case, I guess I will need to change the phone anyway 🙁

Источник

Особенности Jupyter Notebook, о которых вы (может быть) не слышали

Jupyter Notebook – это крайне удобный инструмент для создания красивых аналитических отчетов, так как он позволяет хранить вместе код, изображения, комментарии, формулы и графики:

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

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

Jupyter поддерживает множество языков программирования и может быть легко запущен на любом сервере, необходим только доступ по ssh или http. К тому же это свободное ПО.

Основы

Список хоткеев вы найдете в Help > Keyboard Shortcuts (список периодически дополняется, так что не стесняйтесь заглядывать туда снова).

Отсюда можно получить представление о взаимодействии с блокнотом (notebook). Если вы будете постоянно работать c Jupyter, большинство комбинаций вы быстро выучите.

Экспорт блокнота

Простейший способ — сохранить блокнот в формате IPython Notebook (.ipynb), но так как их используют не все, есть и другие варианты:

Построение графиков

Есть несколько вариантов построения графиков:

Magic-команды

Магические команды (magics) превращают обычный python в магический python. Magic-команды — это ключ к могуществу IPython’а.

Можно управлять переменными среды для вашего блокнота без перезапуска Jupyter-сервера. Некоторые библиотеки (такие, как theano) используют переменные среды, чтобы контролировать поведение, и %env — самый удобный способ.

Выполнение shell-команд

В Notebook можно вызвать любую shell-команду. Это особенно удобно для управления виртуальной средой.

Подавление вывода последней строки

Иногда вывод не нужен, и в этом случае можно или использовать команду pass с новой строки, или поставить точку запятой в конце строки:

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

вызовет следующее всплывающее окно:

Используйте %run для выполнения кода на Python

Но эта команда может выполнять и другие блокноты из Jupyter! Иногда это очень полезно.

Обратите внимание, что %run — это не то же, что импорт python-модуля.

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Загрузит код напрямую в ячейку. Можно выбрать файл локально или из сети.

Если раскомментировать и выполнить код ниже, содержание ячейки заменится на содержание файла.

%store — ленивая передача данных между блокнотами

%who для анализа переменных глобального пространства имен

Тайминг

Если вы хотите замерить время выполнения программы или найти узкое место в коде, на помощь придет IPython.

Профилирование: %prun, %lprun, %mprun

%lprun позволяет профилировать с точностью до строк кода, но, кажется, в последнем релизе Python он не работает, так что в этот раз обойдемся без магии:

Дебаг с помощью %debug

У Jupyter есть собственный интерфейс для ipdb, что позволяет зайти внутрь функции и посмотреть, что в ней происходит.

Это не PyCharm — потребуется время, чтобы освоить, но при необходимости дебага на сервере это может быть единственным вариантом (кроме pdb через терминал).

Немного более простой способ — команда %pdb, которая активирует дебаггер, когда выбрасывается исключение:

Запись формул в LateX

Маркдаун ячейки могут отрисовывать формулы LateX с помощью MathJax.

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Маркдаун — важная часть блокнотов, так что не забывайте использовать его выразительные возможности!

Использование разных языков внутри одного блокнота

Если вы соскучились по другим языкам программирования, можете использовать их в Jupyter Notebook:

Анализ Big Data

Существует несколько решений, чтобы запрашивать/обрабатывать большие объемы данных:

Ваши коллеги могут экспериментировать с вашим кодом, ничего не устанавливая

Такие сервисы, как mybinder, предоставляют доступ к Jupiter Notebook со всеми установленными библиотеками, так что пользователь может с полчаса поиграться с вашим кодом, имея под рукой только браузер.

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

Написание функций на других языках

Иногда скорости NumPy бывает недостаточно, и мне необходимо написать немного быстрого кода. В принципе, можно собрать нужные функции в динамические библиотеки, а затем написать обертку на Python…

Но гораздо лучше, когда скучная часть работы сделана за нас, правда?

Ведь можно написать нужные функции на Cython или Fortran и использовать их напрямую из кода на Python.

Для начала нужно установить модули

Лично я предпочитаю Fortran, на котором, я считаю, удобно писать функции для обработки большого объема численных данных. Подробнее о его использовании можно почитать здесь.

Должен заметить, что есть и другие способы ускорить ваш код на Python. Примеры можно найти в моем блокноте.

Множественный курсор

С недавнего времени Jupyter поддерживает множественный курсор, такой, как в Sublime или IntelliJ!

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Источник: swanintelligence.com/multi-cursor-in-jupyter.html

Расширения Jupyter-contrib

устанавливаются с помощью

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Это целое семейство различных расширений, включая, например, jupyter spell-checker и code-formatter, которых по умолчанию в Jupyter нет.

RISE: презентации в Notebook

Расширение, написанное Damian Avila, позволяет демонстрировать блокноты как презентации. Пример такой презентации: bollwyvl.github.io/live_reveal/#/7

Это может пригодиться, если вы обучаете использованию какой-либо библиотеки.

Система вывода Jupyter

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

В этом примере я просматриваю содержимое директории с картинками в моем репозитории и отображаю первые пять из них.

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это
Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Я мог бы получить тот же список bash-командой,

потому что magic-команды и bash-вызовы возвращают переменные Python:

Повторное подключение к ядру

Давным давно, если вы запускали какой-нибудь долгий процесс и в какой-то момент подключение к серверу IPython прерывалось, вы полностью теряли возможность отслеживать процесс вычислений (если только вы не записывали эти данные в файл). Приходилось или прерывать работу ядра с риском потерять некоторые результаты, или ждать окончания процесса, не имея представления о том, что в данный момент происходит.

Теперь опция Reconnect to kernel позволяет заново подключиться к работающему ядру, не прерывая вычислений, и увидеть последний вывод (хотя какая-то часть вывода все же будет потеряна).

Пишите ваши посты в Notebook

такие, как этот. Используйте nbconvert, чтобы экспортировать в HTML.

Источник

Ломаем Android. Как глубока кроличья нора?

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Мой первый Android телефон Galaxy Note N7000 был приобретен сразу после анонса в октябре 2011 года. Благодаря одному немецкому умельцу под ником bauner, у меня была возможность использовать последнюю версию CyanogenMod (ныне LineageOS). До тех пор, пока полтора года назад телефон не умер от китайской автомобильной зарядки.

Замену искал долго и остановился на Kyocera (да, они и телефоны выпускают) KC-S701. Он отличается брутальным внешним видом и отсутствием сенсорных кнопок. О root доступе к телефону я тогда даже и не задумывался, полагая, что нынче каждый телефон тем или иным способом имеет возможность получения root. И найдется умелец, который сможет под него портировать CyanogenMod. Я ошибался.

За полтора года было выпущено всего одно обновление — фикс падения ядра от специально сформированного ping пакета. А Android KitKat уже год назад был не первой свежести. Root доступ на этот телефон так никто и не получил, и никакой информации о нем не было. Отмечу, что тоже самое железо используется в американской версии телефона Kyocera Brigadier E6782, в котором по-умолчанию активизирован режим fastboot и нет ограничения на запуск неподписанных ядер (именно запуск, а не прошивку, и только при использовании непропатченного bootloader’а, CVE-2014-4325) и присутствует возможность загружаться в эти режимы путём зажатия кнопок телефона. Стараниями Verizon (а может Kyocera?) версия Android на Brigadier была обновлена до Lollipop.

Итак, я решил разобраться с процессом получения root на Android самостоятельно.

Два месяца назад я ничего не знал об устройстве Android (а сейчас я еще больше не знаю). Большую часть знаний пришлось добывать изучением исходных кодов и экспериментами, т.к. информации о взломе Android в интернете очень мало. Последующее описание справедливо для Android 4.4 KitKat, но не исключено, что оно заработает и на более новых версиях.

Хочу обратить ваше внимание на то, что в данном обзоре описан исключительно мой конкретный опыт взлома Android на конкретной модели телефона, поэтому будьте предельно осторожны с его применением в своей практике, если не хотите внезапно получить мертвый телефон. Перед началом исследований я рекомендую забыть о том, что вы пользуетесь взламываемым телефоном в повседневной жизни и сделать backup с последующим hard reset. Это обезопасит ваши данные при совершении ошибки.

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

Все исследования проводились в Linux окружении.

Dirtycow (CVE-2016-5195)

Простыми словами dirtycow (рабочий эксплойт под Android) позволяет заменить память любого процесса (полезно, если хорошо знаешь ASM) или любой доступный для чтения файл, даже если он находится на readonly файловой системе. Желательно, чтобы подменяемый файл был меньше либо равен по размеру заменяемому. Основная атака в dirtycow для Android — подмена /system/bin/run-as — подобие sudo для отладки приложений. Начиная с API android-19 (таблица соответствия версий API и Android) /system/bin/run-as имеет CAP_SETUID и CAP_SETGID capabilities флаги (в старых версиях используется обычный suid bit — 6755).

Если файловая система будет примонтирована в режиме read-write, то всё, что dirtycow подменяет, окажется на файловой системе. Потому необходимо сделать backup оригинального файла и восстановить его после получения доступа, либо не перемонтировать файловую систему в режиме read-write. Как правило раздел /system в Android по умолчанию примонтирован в режиме read-only.

Не зря dirtycow считается одной из серьезнейших уязвимостей, обнаруженных в Linux. И при наличии знаний с помощью dirtycow можно обойти все уровни защиты ядра, в том числе и SELinux.

SELinux

adbd и консоль

Получаем root доступ

root, да не тот

Первым делом я сделал дамп всей прошивки, boot и recovery:

Перезагружаюсь в обычный режим, запускаю эксплойт, проверяю hash recovery раздела — hash соответствует оригинальному. Пробую записать данные опять — hash поменялся! Вспоминаю про page cache, чищу ( echo 3 > /proc/sys/vm/drop_caches ) — hash старый. Т.е. всё, что я пишу в блочное устройство улетает без ошибок в /dev/null и иногда оседает в Linux cache. Но обновление прошивки ведь как-то происходит? И пользовательские данные как-то записываются во внутреннюю память. Надо копать дальше.

Пробуем отключить SELinux

На тот момент я думал, что все ошибки об отсутствии привилегий вызваны SELinux (я полностью забыл о том, что могут быть урезаны capabilities). Логов dmesg я не видел, logcat ничего релевантного не показывал. И я начал думать как отключить SELinux.

Первая зацепка, которую я смог найти:

Т.е. я при помощи dirtycow могу перезаписать /sepolicy и командой setprop selinux.reload_policy 1 загрузить обновленную политику.

В моём случае /sepolicy содержал только allow, что значит — при enforcing режиме SELinux в Android разрешено делать только то, что объявлено в политике. А процессу init разрешалось только загружать политику, но не отключать:

Моей задачей было — разрешить init контексту задать selinux->enforce в permissive (setenforce 0).

Первая же мысль: стоковая политика не подходит этому телефону и он при отсутствии прав начинает тупить.

Я собрал новую политику, в которой просто описал все существующие SELinux context и объявил их permissive. Тоже не помогло.

Потом я решил пересобрать политику и по возможности добавить привилегии для shell контекста.

Чуть позже я нашел утилиту sepolicy-inject, которая добавляет привилегии в уже скомпилированный sepolicy файл. Если правило уже существует, то добавление максимальных привилегий не увеличивает конечный размер политики. К сожалению запуск утилиты добавляет всего одно правило за раз. Написал скрипт, который добавляет максимальные привилегии для каждого правила. Результатом был файл с политикой, в которой каждое правило содержало максимальные привилегии. Размер файла совпадал с оригинальным. И это опять не помогло.

Можно было добавить любой permissive домен, загрузить новую политику и работать в контексте этого домена (кстати, supersu от chainfire для новых версий Android так и работает). Но даже это не дало возможности отключить SELinux. Я решил копать в другом направлении.

Копаем recovery

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Выясняю, что initramfs содержит публичный ключ res/keys в формате minicrypt, которым проверяется цифровая подпись ZIP файла. Оказалось это стандартный тестовый ключ Android, и что я могу подписать этим ключём любой архив. Проверить это можно следующим образом:

Моя 64Gb флэшка была отформатирована в exfat. Нашел старую sdcard на 2Gb, отформатировал её как vfat, записал ZIP, вставил её в телефон. Recovery в этот раз смог примонтировать карточку и я мог просматривать её содержимое на телефоне. Однако при установке ZIP опять возникла ошибка: E:failed to set up expected mounts for install; aborting.

Т.е. перед тем как применить ZIP, recovery отмонтирует все разделы, но в моём случае что-то идёт не так.

Копаем исходники ядра

Лицензия GPL обязывает производителей смартфонов выкладывать исходники ядра. Спасибо Линусу и Столлману за это. Иногда производители выкладывают что-то левое, иногда правильные исходники, но без defconfig файла, иногда правильные и очень редко с инструкцией как их собирать (например LG).

В моём случае были исходники с правильным defconfig но без инструкции. Немного попотев я смог собрать ядро и убедился, что это не полная липа.

Через продолжительное время я остановился на двух файлах:

hooks

restart

Тоже интересный для изучения файл. В нем описываются возможные варианты загрузки телефона:

Немного о том, как происходит загрузка на телефонах с процессором Qualcomm:

Встроенный ROM загрузчик Qualcomm (pbl — primary bootloader) загружает раздел sbl1 (secondary bootloader). sbl1 загружает tz (trust zone), затем aboot (android boot, little kernel, lk). Aboot в свою очередь загружает boot, recovery или fota.

Описание разделов, участвующих при загрузке:

Все эти разделы подписаны цепочкой сертификатов.

В некоторых случаях полезно игнорировать обновления прошивки.

На мой телефон имелось обновление. Отважиться на него я мог потому, что я уже имел возможность писать в /cache и прервать обновление в любой момент.

Изучив исходники отвечающего за обновление Java приложения, мне стало ясно как оно происходит:

Перезагрузка происходит не моментально, значит у меня есть возможность удалить файл перед перезагрузкой и посмотреть что происходит с разделом fotamng.

Начинаю изучать данные, которые сдампил. В разделе /cache бонусом получаю логи fota, в которых даже есть логи dmseg! Сама перезагрузка в fota инициализируется байтами «1» в разделе fotamng:

После перезагрузки они обнуляются. В dmesg я обратил внимание на наличие параметра ядра kcdroidboot.mode=f-ksg. Вот оно! Т.е. загрузчик снимает защиту для fota. И чисто теоретически, если я запишу раздел boot в fota и перезагружу телефон в этот режим, то я получу ядро с отключенной защитой Kyocera. Но писать в системные разделы я всё еще не могу.

Изучение исходников little kernel (lk)

То, что находится в разделе aboot — загрузчик Android, ванильные исходники которого находятся по адресу: https://source.codeaurora.org/quic/la/kernel/lk/

Там можно найти и информацию как происходит загрузка в некоторые из режимов. Например я нашел информацию о том, что если в раздел misc записать «boot-recovery», то перезагрузиться в recovery можно без adb reboot recovery. При загрузке в recovery эта метка обнуляется. И если recovery загрузиться не может, то телефон попадёт в boot loop и вы его потеряете. Так что будьте осторожны, а лучше избегайте этого варианта перезагрузки.

Первые успехи

dmesg

uevent_helper

Патченный adbd

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

WiFi в моем телефоне работает через модуль ядра. WiFi включен — модуль загружен. WiFi выключен — модуль выгружен. Если подменить модуль на свой, то при включении WiFi должен загрузиться подставной модуль. На моё счастье цифровая подпись модулей не проверялась. Первое, что я попробовал, это собрать и загрузить модуль, который отключает SELinux путем замены памяти ядра на Amazon Fire Phone: https://github.com/chaosmaster/ford_selinux_permissive

Если при загрузке модуля ядро будет ругаться (disagrees about version of symbol module_layout), то потребуется извлечь Module.symvers из boot раздела. Это можно сделать, используя скрипт https://github.com/glandium/extract-symvers:

Нельзя просто так взять и собрать свой модуль для телефона Kyocera.

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Помните список доступных для загрузки модулей? Модуль должен называться wlan и никак иначе. Решается это просто:

Модуль на удивление загрузился (память, которую занимает модуль wlan сократилась, проверяется командой lsmod), но SELinux не отключился.

Единственное, что я не уяснил, как программно вызвать отключение и включение WiFi. Мне приходится выключать/включать WiFi вручную через интерфейс Android.

Пишем свой модуль

Снимаем защиту

SELinux отключить не удалось, но по аналогии с модулем https://github.com/chaosmaster/ford_selinux_permissive можно попробовать сделать тоже самое, но с Kyocera hooks. Мне нужно лишь задать переменную kc_bootmode или kc_kbfm в единицу.

Получив адрес нужной функции, я мог передать в неё параметр и функция задаст переменную в 1. Опытным путем выяснил, что не все ядра отображают kallsyms для переменных (тип d или D, регистр говорит глобальная переменная или нет), поэтому в примерах я использую указатели на функции. Возможно это определяется опцией CONFIG_KALLSYMS_ALL при компиляции ядра.

Описываю функцию в модуле:

Можно адреса найти динамически:

Загрузка подставного модуля отключила встроенную защиту! Теперь я могу монтировать /system и загружать любой модуль ядра независимо от его имени.

Системная область emmc всё еще доступна только для чтения и не позволяет редактировать /system раздел на постоянной основе. Файлы редактируются, но при очистке cache все возвращается в исходное состояние.

Всё-таки отключаем SELinux

Это делается вызовом функции reset_security_ops :

После этого защита SELinux работать не будет, но система всё еще будет думать, что она включена. Потому возможны некоторые ошибки в работе системы.

Перезагружаемся в download mode

Пришлось ограничить скорость записи, иначе телефон отваливается и запись прекращается. Возможно это результат переполнения кэша mass storage загрузчика. Пришлось написать хак:

При помощи этого же способа я примонтировал /system раздел к компьютеру и вручную записал на него supersu. Первоначальная задача выполнена: перманентный root доступ получен. Осталось автоматизировать загрузку подставного WiFi модуля, который отключает hooks. И хорошо бы, чтобы WiFi после этого оставался работоспособным. А еще лучше разблокировать загрузчик, чтобы загружать своё ядро.

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

Цифровая подпись aboot и boot разделов

В качестве эксперимента я попробовал записать boot раздел в раздел fota, зная, что при загрузке fota снимаются все ограничения. Здесь я сильно рисковал, т.к. мог получить bootloop, похожий на bootloop recovery. Метка загрузки в fota записывается в раздел fotamng и если раздел не загрузится, то я получу бесконечную перезагрузку.

К сожалению, boot раздел, записанный в fota не загрузился, а bootloop я, к счастью, не получил. Не понятно почему тогда boot раздел, записанный в recovery успешно загрузился. Толку от этого конечно нет, для recovery используется та же защита, что и для boot. Не знаю чем вызвано подобное поведение. Возможно различными смещениями ramdisk и tags:

В Secure boot whitepaper от Qualcomm говорится о том, что подписывается sha256 hash от sha256 hash’ей нескольких сегментов ELF загрузчика. Количество сегментов определено в Subject’е сертификата. Например OU=05 00002000 SW_SIZE говорит о том, что в подписи содержится sha256 hash от первых 256 hash’ей областей по 32 байта (0x2000/32=256). Сам по себе aboot не содержит ELF заголовка и описание больше подходит к sbl1 (secondary boot loader).

Есть описание работы little kernel от Qualcomm, но и там нет ничего про алгоритм создания подписи aboot. Задача определить алгоритм все еще актуальна.

Эксперименты с загрузчиками

Для проведения экспериментов я заказал из штатов за символическую сумму Kyocera Brigadier с разбитым экраном.

Я проверил цифровые подписи aboot загрузчиков. Subject’ы сертификатов оказались идентичными, следовательно они могут быть взаимозаменяемыми. Решился на эксперимент: прошить aboot от KC-S701 в Brigadier. Загрузчик заработал. На удивление, защита emmc от записи с этим загрузчиком не включилась и я смог спокойно восстановить загрузчик от Brigadier. Понимая все риски, я решил прошить загрузчик от Brigadier на KC-S701. Я бы получил возможность загружать любое неподписанное ядро и использовать fastboot. В этот раз телефон не загрузился.

То, что еще требует работы или выяснить не удалось

Загрузка Fota

Почему boot раздел не грузится из раздела fota? Ведь они подписаны одним ключём. Если бы загрузка произошла, то я бы получил разлоченный телефон, в котором не пришлось бы подменять модули.

Расшифровка Kyocera properties

Kyocera наряду с android system properties использует свой внутренний механизм properties, который мне тоже не удалось выяснить. Наверняка там хранятся интересные опции, которые могут влиять в том числе и на снятие защиты bootloader’а. В телефоне есть библиотека libkcjprop_jni.so и демон kcjprop_daemon. Библиотеку можно подключить и использовать её функции, но у меня пока не нашлось времени этого сделать.

Опции пишутся на файловую систему, внутри бинарные данные:

Kexec

Kexec позволяет из ядра Linux загрузить другое ядро. По умолчанию в production релизах ядер отключают поддержку Kexec, но его можно включить через модуль ядра. Затем из user-end можно загрузить любое ядро, которое заменит текущее. Это выглядит как хак, но если хочется загружать своё ядро — этот вариант имеет своё место под солнцем.

Уязвимость в QSEE

QSEE — защита в процессорах Qualcomm, в которой недавно уже достаточно давно обнаружили уязвимость. Суть уязвимости — полный доступ к выполнению команд на уровне Trust Zone. Вплоть до загрузки любого ядра.

Пока еще разбираюсь в этом вопросе. Насколько я понял мне необходимо получить доступ к области emmc, называющейся RPMB. Этого можно добиться отправкой специально сформированной SCM командой. В области RPMB (Replay Protected Memory Block) содержатся биты, которые отвечают за lock/unlock статус.

Заключение

Enable run in bg что это. Смотреть фото Enable run in bg что это. Смотреть картинку Enable run in bg что это. Картинка про Enable run in bg что это. Фото Enable run in bg что это

Код модулей, aboot загрузчики и библиотека для работы с Kyocera Propertiies находятся в моём репозитории на github: https://github.com/kayrus/break_free.

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *