Як отримати кореневий доступ на емуляторі Android?


146

У мене є всі версії SDK для Android (від 1.5 до 2.3.3), і я спробував багато методів отримання кореня в емуляторі Android. Я не використовую жодного пристрою Android і тестую все на емуляторі (AVD).

Мені потрібно отримати кореневий доступ до будь-якого з емуляторів Android для використання функцій 'iptables' та 'busybox'. І щоб використовувати iptables, я повинен мати доступ до root. Команда Atleast 'su' повинна виконуватися в емуляторі терміналу.

Я також встановив z4rootдодаток,

Але це займає дуже багато часу і не закінчує вкорінення, а застрягає. деякі кажуть, що якщо ми знизимо систему до рівня RC30, таким чином ми зможемо отримати кореневий доступ. якщо це правда, то як це зробити? Я використовую і Linux, і ОС Windows.

Скажіть будь-хто мені будь-який метод, щоб викорінити мій емулятор.


Я думаю, ви можете використовувати "Root.apk", що зберігається у filecrop (VISIONary в системі Android), щоб викорінити емулятор, оскільки при кожному перезавантаженні він викорінює систему. Z4root не може працювати, тому що йому потрібно перезавантажити, щоб зробити кореневий доступ робочим. Вибачте за погану англійську, я французька.
JeremLeOuf

Де я можу це взяти? Чи є посібник для цього?
андроїд розробник

6
Зауважте, що андроїд-емулятори вже «вкорінені». Вам не потрібно нічого робити, щоб отримати корінну оболонку adb, оскільки вона вже працює як root за замовчуванням. Тут обговорюється встановлення зламаного "su" або подібного shim, що дозволяє коду програми запускати допоміжні програми, що працюють як root.
Кріс Страттон

2
Використовуйте Genymotion genymotion.com Це дуже швидко і має root за замовчуванням.
klimat

1
Ви встановили зображення wrnong. дивіться тут -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Відповіді:


136

Ці відповіді все непотрібно складно :)

$ > adb shell
generic_x86:/ $
generic_x86:/ $ exit
$ > adb root
restarting adbd as root
$ > adb shell
generic_x86:/ #

52
Запуск adb rootрезультатів у "adbd не може запускатися як root у виробництві". Ви використовуєте певний емулятор? Будь ласка, надайте більше деталей.
orodbhen

3
Ви не можете використовувати цей корінь для жодної програми.
Енібі

5
Якщо хтось намагається змусити це працювати над новими образами системи Google Play, adbd встановлюється захищеним у ramdisk.img. Мені вдалося обійти це, використовуючи ramdisk.img із зображення API Google. Я тестував як зображення 7.0, так і 8.0.
tstaylor7

46
Якщо adb rootпомилка подає adbd cannot run as root in production builds, див. Stackoverflow.com/a/45668555/1682419 - Вам потрібен "Образ системи Google APIs", а не "Образ системи Google Play".
Jerry101

10
@JRaymond Я набрав корінь adb, але нічого після цього не надрукував

75

Як виконувати кореневий емулятор Android (тестовано на Android 7.1.1 / Nougat)

Вимоги :

Інструкції

  1. Встановіть SuperSu.apk

    • По-перше, встановіть додаток SuperSu, просто перетягніть його (якщо використовується остання версія емулятора чи завантаження через adb, тобто adb -e install supersu.apk)

    • Після його встановлення під час запуску на екрані відображається екран, як показано нижче, із зазначенням "Бінарний код SU не встановлений ..". Ця помилка лише підтверджує, що пристрій ще не вкоренився.

введіть тут опис зображення


  1. Зробіть системний розділ емулятора для запису

    • Як це говорить, нам потрібно надати емулятору дозвіл на запис системних файлів.

    • Введіть наступний код для цього: emulator -avd {emulator_name} -writable-system

Якщо у вас є більше одного AVD, ви можете отримати список avds за допомогою команди: emulator -list-avds

Примітка. Перейдіть до папки інструментів, де встановлено Android SDK, і відкрийте там командний рядок натисканням клавіші shift та клацання правою кнопкою миші.


  1. Натискання на бінарне в системний каталог

    • Витягніть Recovery flashable.zip (містить су-бінарні файли різних архітектур)

Важливо! Використовуйте лише su binary, який відповідає вашій архітектурі avd, наприклад x86, arm тощо.

  • Переконайтеся, що ви використовуєте adb як корінь, а також вам потрібно здійснити повторний перегляд. Просто введіть ці коди

adb root

adb remount

Тепер прийшов час натиснути на бінарне:

Це код, який я успішно використав :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(я не маю на увазі моє конкретне місце розташування бінарних даних, будь-яке місце в порядку, поки немає білого простору)

Примітка. Щоб розібратися binабо xbinзробити в консолі раніше:> adb shell,>ls /system/xbin/su

Якщо цього не вдалося, спробуйте це натиснути на цей каталог /system/xbin/su. Також для емуляторів, що працюють під управлінням Android 5.1 та нижче, використовуйте suта неsu.pie


  1. Змінення дозволів на бінарні файли

    • Далі зробимо трохи модифікації дозволів su binary. Це потрібно зробити в емуляторному пристрої через adb:

    adb -e shell su root cd /system/bin chmod 06755 su

Важливо !! Візьміть до відома su бінарний шлях (шахта є / система / бін)


  1. Встановлення installдирективи щодо субінарного та встановлення adaemon

Введіть коди:

su --install

і для налаштування демона:

su --daemon&

Важливо !! Візьміть на замітку проміжки


  1. Встановлення SELinux на дозвільне (тобто вимкнення SE Linux)

    • Нарешті вимкніть selinux за допомогою цього коду:

setenforce 0


  1. Відкрийте додаток SuperSU, і він може попросити оновити бінарні файли, ви можете використовувати метод Normal.

Примітка. Якщо у вас виникають завантажувальні системи, скоріше не оновлюйте бінарні файли, просто використовуйте їх як є.


Це майже все !!

Відкрийте будь-яку програму, яка вимагає дозволів SU просто подвійно перевірити, і дійсно SuperSU запитає, чи хочете ви надати їй права доступу.

введіть тут опис зображення

Для кореневого збереження кореневого Users\AppData\Local\Temp\Android Emulatorфайлу (двостороннім методом) скопіюйте system.img з каталогу temp ( файл зазвичай називається випадковим чином, наприклад, 1359g.tmpз великим розміром) та замініть за замовчуванням system.img.

Оновлення :

Я зауважив, що простіше отримати тимчасовий образ системи в Linux, ніж Windows. Ви можете спробувати використати знімок.

Оновлення 4 серпня 2018 року

З появою емулятора 27.3.xтепер значно полегшується збереження кореня за допомогою функції знімка (якщо копіювання system.imgметоду не працює):

В ідеалі це більше схоже на hibernarig віртуальний пристрій з недоторканою конфігурацією, отже, все збережено.

Знімки

Тепер ви можете зберегти кілька знімків AVD для заданої конфігурації пристрою та вибрати, який із збережених знімків завантажувати під час запуску емулятора. Запустити віртуальний пристрій, завантаживши знімок, дуже схоже на пробудження фізичного з режиму сну, на відміну від завантаження його з вимкненого стану.

Це означає, що єдина вимога до запуску емулятора - це додавання -writable-systemпараметра до звичайної emulator -avd [avdname]команди для запуску емулятора. ( Запуск емулятора просто за допомогою emulator -avd [avdname]не запускає вкорінену версію / копію або може призвести до помилки )

Тестовано на рівні 22

Також щодо проблем із завантаженням дивіться інший пост: Android Emulator: Як уникнути циклу завантаження після вкорінення? та їх оновлення.

Зауваження

Більшість вмісту посилань було для старих версій Android, а отже, причина для різних команд і шляхів, які я змінив.

Подяка;


1
Примітка: Щоб з’ясувати бін або xbin, виконайте в консолі перед:> оболонка adb,> ls / system / xbin / su
djdance

1
@xavier_fakerat так, я зупинив оновлення бінарних файлів. Проблема полягає в тому, що після кожної перезавантаження мені доведеться перезавантажувати машину і запускати su --install && su --daemon&емулятор, після чого setenforce 0отримувати корінь. Чи знаєте ви будь-яке постійне виправлення root під час перезавантаження?
Крістіан Голдуну

1
Приємно! Цей метод також працює для реальних пристроїв, до яких ви можете отримати доступ через root через adb.
Mygod

1
Ви мені відповіли, чому андроїд-емулятор несподівано закривається після вкорінення зображення, коли не використовується -write-система. Це тому, що знімки.
Родрірокр

1
Я використовую Pixel 2 XL: У людей, схоже, є однакові проблеми з Pixel XL: forum.xda-developers.com/pixel-xl/how-to/…
noraj

33

Ось список команд, які потрібно запустити під час роботи емулятора, я тестую це рішення на avd на Android 2.2:

adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system  
adb push su /system/xbin/su  
adb shell chmod 06755 /system  
adb shell chmod 06755 /system/xbin/su

Він передбачає, що бінарний файл знаходиться в робочому каталозі. Ви можете знайти су і суперпользователь тут: http://forum.xda-developers.com/showthread.php?t=682828 . Ці команди потрібно запускати кожен раз при запуску емулятора. Ви можете написати скрипт, який запускає емулятор та викорінює його.


15
Будь ласка, включіть сюди відповідні частини свого блогу. ТАК - це місце для відповідей, а не посилань.
cHao

2
Немає такого файлу чи каталогу "SU"
Mahendran

4
Це не працює на емуляторі 2.2, 2.3 або 2.3.3. Я отримую лише помилки для adb push: поза пам'яттю, dir не порожній і т. Д.
Pointer Null

2
@mice: Як говорить помилка, ви не можете натиснути бінарний файл, оскільки на віртуальному пристрої недостатньо місця. Під час запуску емулятора ви можете додати -partition-sizeпараметр для визначення розміру розділу. Спробуйте запустити емулятор зtools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
На нових емуляторах команда reount може не працювати, ви можете замінити: adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system на: adb root adb remount
Kamran Ahmed

20

Для AVD з 5.1.1 і 6.0 я використовував наступний скрипт у Windows:

set adb=adb -s emulator-5558
set arch=x64
set pie=
adb start-server
%adb% root
%adb% remount
rem %adb% shell mount -o remount,rw /system
%adb% shell setenforce 0
%adb% install common/Superuser.apk
%adb% push %arch%/su%pie% /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push %arch%/su%pie% /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
rem %adb% shell mount -o remount,ro /system

exit /b

Потрібен UPDATE.zip від SuperSU. Розпакували їх у будь-яку папку. Створіть файл bat із вмістом вище. Не забудьте вказати необхідну архітектуру та пристрій: set adb=adb -s emulator-5558і set arch=x64. Якщо ви маєте Android вище або рівний 5,0, перейдіть set pie=на set pie=.pie. Виконати його. Ви отримуєте тимчасовий корінь для поточного запуску.

Якщо ви отримали помилку при перезавантаженні системного розділу, вам потрібно запустити AVD з командного рядка. Дивіться нижче перший крок для Android 7.

Якщо ви хочете зробити його стійким - оновіть бінарне в SuperSU та зберігайте system.img з папки temp як заміну за замовчуванням system.img.

Як перетворити отриманий тимчасовий корінь у постійний

По-перше - це переходить до SuperSu. Він пропонує бінарне оновлення. Оновлення в звичайному порядку. Перезавантажити відхилити.

Друга - стосується лише емуляторів. Той самий AVD. Суть полягає в тому, що зміни в зображенні системи не будуть збережені. Їх потрібно зберегти для себе.

Вже є інструкції, що різняться для різних емуляторів.

Для AVD ви можете спробувати знайти тимчасову файлову систему.img, зберегти її десь і використовувати при запуску емулятора.

У Windows він розташований у %LOCALAPPDATA%\Temp\AndroidEmulatorі має назву щось на кшталт TMP4980.tmp.

Ви копіюєте його в папку avd device ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) і перейменовуєте в system.img.

Тепер він буде використовуватися на старті, замість звичного. Щоправда, якщо зображення в SDK буде оновлено, воно буде мати старе.

У цьому випадку вам потрібно буде видалити це system.imgі повторити операцію з його створення.

Більш докладний посібник російською мовою: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Для android 7 потрібно виконати додаткові кроки: 1. Потрібно запустити емулятор вручну. Перейдіть у папку sdk sdk\tools\lib64\qt\lib. Запустити з цього емулятора папок такі параметри -writable-system -selinux disabled :

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. Вам потрібно перезапустити adbdз root:

    adb -s емулятор-5554 корінь

І система перерахунку:

adb -s emulator-5554 remount

Її можна робити лише один раз за емулятор запуску. І будь-яке інше перерахунок може порушити режим запису. Через це вам не потрібно запускати будь-які інші команди з перерахунком, як-от mount -o remount,rw /system.

Інші кроки залишаються однаковими - завантажуйте бінарне, запускайте бінарний як демон і так далі.

Зображення з AVD Android 7 x86 з коренем: AVD Android 7 x86 з root


Якщо ви бачите помилку щодо PIE при виконанні suбінарного файлу - тоді ви завантажуєте в емулятор неправильний бінарний файл. Ви повинні завантажувати бінарне ім’я su.pieвсередині архіву, але на емуляторі він повинен бути названий як su, а не su.pie.


Чи можете ви сказати мені кроки, щоб зробити корінь стійким?
Сатья

update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Енібі

Я використовував ці кроки, щоб отримати system.img від temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) скопіював цей system.img з temp у системні образи Android SDK, але коли я перезапустіть емулятор, тоді емулятор не перебуває у кореневому стані ... Підкажіть будь ласка правильний шлях
Satya

краще скопіюйте в каталог AVD. але спочатку потрібно оновити бінарне в SuperSu у звичайному режимі.
Енібі

Я оновив бінарний файл у звичайному режимі і скопіював у каталог AVD, тоді також root не зберігається
Satya

13

Я вважаю, що найпростіший спосіб - створити псевдонім для команди sh, наприклад

adb shell
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Тестовано на Android Emulator 3.0 та новіших версіях.


Це працювало і для мене (на емуляторі x86_64 android 5.02), тоді як пропозиція встановити в xbin не стала.
Яник

7
Я отримавmount: '/system' not in /proc/mounts
Kenny Wyland

система вийшла з ладу з 72
Duna

3

Ось моя пачка з усім необхідним. Або ви можете використовувати цей сценарій:

echo on
set device=emulator-5554
set avd_name=
set adb=d:\Poprygun\DevTools\Android\Android-sdk\platform-tools\adb -s %device%
set emulator=d:\Poprygun\DevTools\Android\Android-sdk\emulator\emulator
set arch=x86
set pie=

echo Close all ANDROID emulators and press any key
pause
start %emulator% -avd Nexus_One_API_25 -verbose -writable-system
echo Wait until ANDROID emulator loading and press any key
pause

%adb% start-server
%adb% root
%adb% remount
%adb% shell setenforce 0
%adb% install D:\SuperSU\SuperSU.apk
%adb% push D:\SuperSU\su\%arch%\su.pie /system/bin/su
%adb% shell chmod 0755 /system/bin/su
%adb% push D:\SuperSU\su\%arch%\su.pie /system/xbin/su
%adb% shell chmod 0755 /system/xbin/su
%adb% shell su --install
%adb% shell "su --daemon&"
pause
exit /b

2

Я щойно замінив і призначив атрибути su до ~ / Android / Sdk / system-images / android-22 / google_apis / x86 / system.img, а тепер на android 5 у мене завжди є root навіть для нових систем, досить встановити SuperSu. apk

Android 6 is necessary only
adb root
adb shell
>/system/xbin/su --daemon &
>setenfoce 0

після цього SuperSu.apk бачить корінь. Але я не оновлюю двійковий файл


1

Я використовував частину методу з наведених вище розчинів; однак вони не спрацювали повністю. В останній версії Енді це працювало для мене:

На Енді (Root Shell) [Щоб отримати, натисніть правою кнопкою миші значок HandyAndy та виберіть Term Shell]

Всередині оболонки запустіть ці команди:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
cd /system/bin
cat sh > su && chmod 4775 su

Потім встановіть SuperSU та встановіть SU двійкові. Це замінить щойно створений нами двійковий SU. (Необов’язково) Видаліть SuperSU та встановіть Superuser CWM. Встановіть su binary знову. Тепер корінь працює!


1

Я спробував багато з перерахованих вище пропозицій, включаючи SuperSU, і не міг змусити себе працювати, але знайшов щось набагато простіше, що працювало для моїх цілей. У моєму випадку я хотів лише мати можливість запускати sqlite в командному рядку. Я просто запустив емулятор зі старшою версією Android (Lollipop) і одразу отримав кореневий доступ.


-1

Я виявив, що емулятор API 23 x86_64 за замовчуванням вкорінений.


З того, що я знаю, тільки те, що у вас #, коли ви вводите "корінь adb", не означає, що програми можуть скористатися перевагами root-привілеїв. Будь-яке пробне записування в будь-якому місці в системі призвело до помилки RO, навіть намагаючись перерахувати його як RW.
Fusseldieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.