четверг, 16 февраля 2012 г.

Android root из Linux

Это руководство для тех, кто хочет получить права root на своем Android телефоне.


[Предварительное рутование может и не потребоваться при переходе непосредственно на нестандартные прошивки, такие как: CM7 или MIUI через Odin/Heimdall, в любом случае вам потребуется ADB (пункты 1-4)]


Прежде чем начнем сделаем резервную копию данных на всякий случай.

1. Установка ADB
  • Скачайте Android-SDK для linux. [Это пакет инструментов для разработчиков под Android] 
  • Распакуйте директорию /tools на рабочий стол. [Возможно для этого понадобится установить архиватор 7zip. Он есть в репозиториях Ubuntu.] 
  • Создайте директорию "bin" и поместите туда программу ADB:
mkdir -p ~/bin
mv ~/Desktop/tools/adb ~/bin/

2. Сбор необходимой информации
  •   На вашем телефоне перейдите Насторйки=>Приложения=>Разработка (Settings=>Applications=>Development) и включите опцию Отладка по USB(USB debugging)
  • Подключите ваш телефон к компьютеру. [*В режиме телефона, не в режиме USB накопителя] 
  • В терминале на компьютере выполните "lsusb" без кавычек
  • Одна из строк в результате должна быть похожа на что-то вроде (в зависимости от производителя вашего телефона):
    Bus 001 Device 002: ID 04e8:681c Samsung Electronics Co., Ltd
  • Запишите или запомните первые 4 символа после ID. Это идентификатор производителя (Vendor ID, в нашем примере 04e8). Номера Bus и Device будут разными всякий раз при переподключении телефона к компьютеру или после его перезагрузки.
  • В терминале выполните "id" без кавычек, эта команда покажет имя и группу пользователя под которым вы вошли в систему (если вы не уверены, что знаете их точно)

3. Установка првила Udev для работы ADB
  •   Откройти любимый текстовый редатктор с правами root. Например, в терминале Kubuntu наберите "kdesudo kate".
  • Вставьте следующую строку без переносов в редактор и измените как указано ниже:
    SUBSYSTEM=="usb", SYSFS{idVendor}=="<идентификатор производителя Vendor ID>", OWNER="<имя пользователя>" GROUP="<имя группы>"
    Для нашего примера "<идентификатор производителя Vendor ID>" заменяем "04e8". Не трогаете кавычки но заменяете < > и все, что в нутри.

  • Сохраните файл по этому пути /etc/udev/rules.d/51-android.rules
  • И ещё по этому пути /lib/udev/rules.d/51-android.rules
[Примечание: Вообще вам нужен первый из них, но он может отличаться в разных системах]
  • В терминале, наберите ls /etc/udev/rules.d/51-android.rules дабы убедиться, что файл на месте, аналогично для второго пути.
  • Перезапустите udev или перезагрузите компьютер чтобы изменения вступили в силу
[Примечание: в некоторых руководствах при настройке првил udev рекомендуется устанавливать права доступа 0666 которые открывают доступ к файлу всем. Здесь мы назначаем доступ одному пользователю, которому это нужно, так будет безопаснее. Приоритет правила установили 51, это не принципиально, можно назначить и другой.]

4. Проверяем что получилось
  • В терминале наберите "lsusb", как делали это ранее
  • Одна из строк должна быть похожа на: 
    Bus 001 Device 002: ID 04e8:681c Samsung Electronics Co., Ltd
  • В данный момент нас интересуют номера после Bus и Device, которые, возможно, изменились если вы перезагрузили компьютер.
  • В терминале выполните "ls -l /dev/bus/usb/001/002" ВНИМАНИЕ 001/002 это Bus/Device из примера выше, замените Bus/Device на цифры из вашего вывода команды "lsusb".
  • Если в результате команды имя пользователя и группа отличаются от "root root" можно продолжать дальше. Если это не так, перечитайте и повторите шаги 2 и 3.
  • *Убедитесь что ваш телефон все еще в режиме Отладка по USB. Должен быть красный треугольник с восклицательным знаком в строке состояния вашего телефона (зависит от темы и версии Android).
  • В терминале наберите "sudo adb devices" [*sudo понадобится только при первом запуске adb.]
Вы должны увидеть свой телефон в списке.

5. Загрузка Samsung Fascinate Root Package
Эти файлы необходимы, хотя драйвера не нужны для Linux.

6. Распаковка 4-х файлов в
~/bin
Эту директорию мы создали в шаге 1, там уже должен быть файл adb. Вы можете распаковать куда-нибудь загруженный архив и поместить необходимые файлы в ~/bin  (это su, rage.bin, busybox, Superuser.apk).

7. Переход в  ~/bin

В терминале наберите "cd ~/bin", а затем "ls", должно быть 5 файлов.

8. Перенос файлов на телефон и запуск root:
Выполните каждую из следующих строк по отдельности в терминале, скопируйте и встаьте (жмите Enter после вставки каждой строки):

./adb push su /sdcard/su
./adb push rage.bin /data/local/tmp/rage.bin
./adb push busybox /sdcard/busybox
./adb shell
[Примечание: символ приглашения ввода строки должен измениться на $, это означает, что мы удаленно подключились к телефону]
cd /data/local/tmp
chmod 0755 rage.bin
./rage.bin

[Примечание:  Эта комманда определит ограничение процесса, найдет номер процесса adb, а затем запускает процессы до исчерпания этого ограничения. Вы быстро вернетесь в строк сприглашением $, но ЭТО НЕ ВСЕ. ЖДИТЕ пока не выведется что-то похожее на "[+] Forked 3705 childs." и вы вернетесь в свою домашнюю директорию.]

9. Зафиксируем права root
  • В терминале вернитесь в директорию ~/bin введите "./adb shell"

    На этот раз вы должны получить приглашение # вместо $. Это означает, что теперь вы удаленно зашли на телефон как root.
  • Скопируйте и вставьте каждую строку по отдельности (жмите Enter после каждой строки):
mount -t rfs -o remount,rw /dev/block/stl9 /system
cd /system/xbin
cat /sdcard/su > su
cat /sdcard/busybox > busybox
chmod 4755 su
chmod 4755 busybox
exit
./adb install Superuser.apk

10. Убедимся что получили права root
  • Перезапускаем телефон
  • В терминале выполняем "~/bin/adb shell"
    Вы должны получить приглашение
    Выполните "su"
    На телефоне должно появиться всплывающее сообщение где запрашивается подтверждение использования прав суперпользователя. После того, как вы разрешите, приглашение должно измениться на #
Это сообщение будет появляться всякий раз, когда вы устонавливаете и запускаете программу требующую привелегий пользователя root.
Теперь запустите приложение SuperUser, оно должно показать список программ имеющих привелегии root пользователя.

P.S. Исходный материал взят здесь

11 комментариев:

  1. freeman@Flynn-0:~/android-sdk-linux/platform-tools$ ./adb shell
    $ cd /data/local/tmp
    $ chmod 0755 rage.bin
    $ ./rage.bin
    [*] CVE-2010-EASY Android local root exploit (C) 2010 by 743C

    [*] checking NPROC limit ...
    [+] RLIMIT_NPROC={3873, 3873}
    [*] Searching for adb ...
    [+] Found adb as PID 1786
    [*] Spawning children. Dont type anything and wait for reset!
    [*]
    [*] adb connection will be reset. restart adb server on desktop and re-login.
    $ freeman@Flynn-0:~/android-sdk-linux/platform-tools$

    "На этот раз вы должны получить приглашение # вместо $"
    Приглашение все еще $.

    ОтветитьУдалить
  2. Было такое на одном из аппаратов, решить не получилось, пришлось рутовать из винды через SuperOneClick, причем он обратил внимание, что телефон уже рутован. Возможно дело в последней версии android-sdk

    ОтветитьУдалить
  3. "Установка правил udev":
    пользовалась этим способом, но в один прекрасный день он перестал работать, позже обнаружилось, что "...SYSFS has been replaced or depreciated by ATTR/ATTRS".
    т.е. теперь надо писать:
    SUBSYSTEM=="usb", ATTRS{idVendor}=="идентификатор производителя Vendor ID", OWNER="имя пользователя" GROUP="имя группы"
    но, кстати, как быстрый одноразовый способ без перезагрузки: можно сделать просто chmod +w /dev/bus/usb/xxx/yyy или chown пользователь:группа /dev/bus/usb/xxx/yyy (не знаю, насколько безопасно, у меня на openSuse проблем не возникало).

    ОтветитьУдалить
  4. перевод http://androidforums.com/fascinate-all-things-root/236081-how-root-using-ubuntu.html ?

    ОтветитьУдалить
    Ответы
    1. Читайте внимательно в конце поста

      Удалить
  5. У меня после запуска rage.bin рвется связь, появляется шелл с $, через некоторое время курсор перескакивает на новую строчку - и так висит (ждал 30 минут - не отлипло). Может дело в том что у меня androind 4.1.2?

    ОтветитьУдалить
  6. На 4.1.x не пробовал, проблемы были с одним устройством, похожие на ваши, не помню как решал, пробуйте с чистого листа, перезагрузить комп и устройство, или только устройство, вобщем кажется что-то в этом роде.

    ОтветитьУдалить
  7. Делаю "В терминале наберите "sudo adb devices""
    Получаю "sudo: adb: command not found" =(

    ОтветитьУдалить
    Ответы
    1. укажите явно путь к adb который должен находиться в Android SDK или пропишите путь к нему в переменной окружения PATH

      Удалить
  8. >6. Распаковка 4-х файлов в ~/bin
    и где взять эти 4 файла?

    ОтветитьУдалить
    Ответы
    1. Посту 4 года. Ссылку из п.5 пробовали открывать?

      Удалить