Android emülatöründe root erişimi nasıl elde edilir?


146

Tüm Android SDK sürümlerine (1.5'den 2.3.3'e) sahibim ve Android emülatöründe root almak için birçok yöntem denedim. Herhangi bir Android cihazı kullanmıyorum ve her şeyi emülatörde (AVD) test etmiyorum.

'Iptables' ve 'busybox' işlevselliğini kullanmak için Android emülatörlerinden herhangi birinde root erişimi almam gerekiyor. Ve iptables kullanmak için root erişimine sahip olmalıyım. Terminal emülatöründe en az 'su' komutu yürütülmelidir.

Ayrıca z4rootuygulama yükledim ,

Ancak çok uzun zaman alır ve köklenmeyi bitirmez ve sıkışır. Bazıları sistemi RC30'un altına düşürürsek, bu şekilde kök erişimine sahip olabileceğimizi söyler. bu doğruysa, o zaman nasıl yapılır? Hem Linux hem de Windows işletim sistemini kullanıyorum.

Lütfen birisi bana öykünücümü köklendirmek için herhangi bir yöntem söyle.


Ben emülatör kök filecrop (android sistemde VISIONary) depolanan "Root.apk" kullanabilirsiniz düşünüyorum, çünkü, her yeniden önyükleme, sistem kök. Z4root çalışamıyor çünkü root erişiminin çalışmasını sağlamak için yeniden başlatılması gerekiyor. Kötü İngilizce için üzgünüm, Fransızım.
JeremLeOuf

Bunu nereden alabilirim? Bunun için bir kılavuz var mı?
android geliştirici

6
Android emülatörlerinin zaten "köklü" olduğunu lütfen unutmayın. Kök adb kabuğunu almak için herhangi bir şey yapmanız gerekmez, çünkü zaten varsayılan olarak kök olarak çalışır. Burada ele alınan şey, uygulama kodunun root olarak çalışan yardımcı programları başlatmasına izin vermek için saldırıya uğramış bir "su" veya benzer bir şim yüklemektir.
Chris Stratton

2
Kullanım Genymotion genymotion.com Çok hızlı ve varsayılan olarak köke sahiptir.
klimat

1
wrnong görüntüsünü kurdunuz. buraya bakın -> stackoverflow.com/questions/43923996/…
wwwwwwwwwwww

Yanıtlar:


136

Bu cevapların hepsi gereksiz yere karmaşık :)

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

52
Koşu adb rootsonuçları "üretimde kök kurar gibi adbd koşamam". Belirli bir emülatör mü kullanıyorsunuz? Lütfen daha fazla ayrıntı sağlayın.
orodbhen

3
Bu kökü herhangi bir uygulama için kullanamazsınız.
Enyby

5
Birisi bunu yeni Google Play sistem görüntüleri üzerinde çalışmak için almaya çalışıyorsa, adbd ramdisk.img dosyasında güvenli olmaya ayarlıdır. Google API'ları resminden ramdisk.img kullanarak bu sorunu çözebildim. Hem 7.0 hem de 8.0 görüntülerini test ettim.
tstaylor7

47
Hata adb rootverirse adbd cannot run as root in production builds, bkz. Stackoverflow.com/a/45668555/1682419 - "Google Play Sistem Görüntüsü" yerine "Google API'ları Sistem Görüntüsü" gereklidir.
Jerry101

10
@JRaymond adb root yazdım ama bundan sonra hiçbir şey yazdırıldı

75

Android emülatörünü köklendirme (Android 7.1.1 / Nougat'ta test edilmiştir)

Gereksinimler :

Talimatlar

  1. SuperSu.apk dosyasını yükleyin

    • Öncelikle SuperSu uygulamasını yükleyin, sadece sürükle ve bırak yapın (en son emülatör sürümünü veya adb üzerinden sideload çalıştırıyorsanız adb -e install supersu.apk)

    • Kurduktan sonra, çalıştırdığınızda aşağıda gösterildiği gibi “SU ikili kurulu değil ..” ifadesini gösteren bir ekran gösterir. Bu hata, cihazın henüz köklü olmadığını doğrular.

resim açıklamasını buraya girin


  1. Öykünücünün sistem bölümünü yazılabilir yap

    • Önerdiği gibi, emülatöre sistem dosyaları yazma izni vermeliyiz.

    • Bunu yapmak için aşağıdaki kodu yazın: emulator -avd {emulator_name} -writable-system

Birden fazla AVD'niz varsa, şu komutu kullanarak avds listesini alabilirsiniz: emulator -list-avds

Not: Android SDK'nın yüklü olduğu araçlar klasörüne gidin ve üst karakter tuşuna basarak sağ tıklatarak komut istemini açın.


  1. Sistem dizininde su ikili komutunu gönderme

    • Kurtarma flashable.zip dosyasını (farklı mimarilerin su ikili dosyalarını içeren) ayıklayın

Önemli! Yalnızca avd mimarinizle eşleşen su ikili dosyasını kullanın (örn. X86, arm vb.) Ve bu ikili dosyaları çıkardığınız yolu not edin.

  • Adb'yi root olarak çalıştırdığınızdan ve ayrıca yeniden takmanız gerektiğinden emin olun. Sadece bu kodları girin

adb root

adb remount

Şimdi su ikilisini itme zamanı:

Bu başarıyla kullandım kodu :adb -e push C:\Users\User1\Desktop\rootemu\x86\su.pie /system/bin/su

(nevermind benim su ikili konumu hakkında, herhangi bir yer tamam olduğu sürece beyaz boşluk yok)

not: Daha önce anlamak binveya xbinkonsolda yapmak için:> adb shell,>ls /system/xbin/su

Bu başarısız olursa, bunun yerine bu dizine itmeyi deneyin /system/xbin/su. Ayrıca emülatörlerle aşağıda android 5.1 ve çalıştırmak için kullanmak sudeğil,su.pie


  1. Su ikili dosyasının izinlerini değiştirme

    • Şimdi su ikili izinlerini biraz değiştirelim. Bunu adb yoluyla emülatör cihazında yapmalıyız:

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

Önemli!! Su ikili yolunu not edin (benimki / system / bin)


  1. Ayar installsu ikili ve set a üzerinde direktifinidaemon

Kodları yazın:

su --install

ve daemon kurulumu için:

su --daemon&

Önemli!! Boşluğu not edin


  1. SELinux'u Permissive olarak ayarlama (yani SE Linux'u kapatma)

    • Son olarak selinux'u bu kodla kapatın:

setenforce 0


  1. SuperSU uygulamasını açın ve ikili dosyaları güncellemek isteyebilir, Normal yöntemini kullanabilirsiniz.

Not: Bootloops yaşıyorsanız, ikili dosyaları güncellemeyin, sadece olduğu gibi kullanın.


Hepsi bukadar!!

Sadece iki kez kontrol etmek için SU izinleri gerektiren herhangi bir uygulamayı açın ve gerçekten de SuperSU, izin vermek isteyip istemediğinizi sorun.

resim açıklamasını buraya girin

Kök kalıcı güncelleştirme su binary (Normal yöntemi kullanarak) olması için, system.img dosyasını geçici dizinden kopyalayın ( Users\AppData\Local\Temp\Android Emulatordosya genellikle rasgele adlandırılır, örneğin 1359g.tmpbüyük boyutludur) ve varsayılanı değiştirin system.img.

Güncelleme :

Linux'ta geçici bir sistem görüntüsü elde etmenin Windows'dan daha kolay olduğunu belirttim. Anlık görüntü görüntüsünü kullanmayı deneyebilirsiniz.

Güncelleme 4 Ağustos 2018

Emülatörün ortaya çıkmasıyla 27.3.xartık anlık görüntü özelliği ile kök korunmayı çok daha kolay hale getiriyor ( system.imgyöntem kopyalanıyorsa ):

İdeal olarak, yapılandırılmamış sanal cihazın hazırda bekletilmesine benzer, bu nedenle her şey korunur.

Anlık

Artık belirli bir cihaz yapılandırması için birden fazla AVD anlık görüntüsünü kaydedebilir ve öykünücüyü başlattığınızda kaydedilen anlık görüntülerin hangisinin yükleneceğini seçebilirsiniz. Anlık görüntü yükleyerek sanal bir aygıt başlatmak, fiziksel durumu, kapalı durumdan önyüklemek yerine uyku durumundan uyandırmaya benzer.

Bu, emülatörün başlatılması için tek gereksinimin, emülatörü başlatmak -writable-systemiçin normal emulator -avd [avdname]komuta parametre eklemesi anlamına gelir . ( Öykünücüyü yalnızca ile emulator -avd [avdname]çalıştırmak köklü sürümü / kopyayı başlatmaz veya bazı hatalara neden olabilir )

22 numaralı API düzeyinde test edildi

Ayrıca bootloop sorunları için diğer gönderiye bakın: Android Emulator: Köklendikten sonra önyükleme döngüsünü nasıl önleyebilirim? ve güncellemeleri.

Uyarılar

Referans olarak çoğu içerik eski android sürümleri içindi ve bu nedenle değiştirdiğim farklı komutların ve yolların nedeni.

Teşekkür;


1
not: önce bin veya xbin konsolunu yapmak için:> adb shell,> ls / system / xbin / su
djdance 11:17

1
@xavier_fakerat evet, ikili dosyaları güncellemeyi durdurdum. Sorun, her yeniden başlatmadan sonra makineyi yeniden takmak ve su --install && su --daemon&emülatörde çalıştırmak setenforce 0zorunda kaldım , ardından kök almak için. Yeniden başlatma sırasında kök için kalıcı bir düzeltme biliyor musunuz?
Cristian Holdunu

1
Güzel! Bu yöntem aynı zamanda root'a adb üzerinden erişebileceğiniz gerçek cihazlar için de çalışır.
Mygod

1
Bana cevap verdiniz, android emulator neden -writable-system kullanılmadığında görüntüyü kökledikten sonra beklenmedik bir şekilde kapanıyor. Anlık görüntüler yüzünden.
Rodrirokr

1
Pixel 2 XL kullanıyorum: İnsanlar Pixel XL ile aynı sorunu yaşıyor
noraj

33

Emülatör çalışırken çalıştırmanız gereken komutların listesi: Android 2.2'de bir avd için bu çözümü test ediyorum:

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

Su ikili dosyasının çalışma dizininde olduğunu varsayar. Su ve süper kullanıcıyı burada bulabilirsiniz: http://forum.xda-developers.com/showthread.php?t=682828 . Öykünücüyü her başlattığınızda bu komutları çalıştırmanız gerekir. Öykünücüyü başlatan ve köklendiren bir komut dosyası yazabilirsiniz.


15
Lütfen blog yayınınızın ilgili bölümlerini buraya ekleyin. SO cevaplar için bir yer, bağlantılar değil.
cHao

2
Böyle bir dosya veya dizin yok 'SU'
Mahendran

4
Bu emülatör 2.2, 2.3 veya 2.3.3 üzerinde çalışmıyor Sadece adb push için hatalar alıyorum: bellek yetersiz, dir boş değil, vb.
Pointer Null

2
@mice: Hatada belirtildiği gibi, sanal cihazda yeterli alan olmadığı için ikili dosyayı itemezsiniz. Öykünücüyü başlatırken -partition-sizebölüm boyutunu belirleme seçeneğini ekleyebilirsiniz . Emülatörünüzütools/emulator -avd MyAndroidVirtualDeviceName -partition-size 256
abd

2
Daha yeni emülatörlerde remount komutu çalışmayabilir, aşağıdakileri değiştirebilirsiniz adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system : adb root adb remount
Kamran Ahmed

20

5.1.1 ve 6.0 ile AVD için Windows'ta sonraki komut dosyasını kullandım:

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

SuperSU'dan UPDATE.zip dosyasına ihtiyacınız var. Bunları herhangi bir klasöre paketinden çıkarın. Yukarıdaki içeriğe sahip yarasa dosyası oluşturun. Gerekli mimariyi ve cihazı belirtmeyi unutmayın: set adb=adb -s emulator-5558ve set arch=x64. Yukarıdaki Android çalıştırmak veya değişim 5.0 eşit olursa set pie=etmek set pie=.pie. Çalıştır. Geçerli çalışma için geçici kök elde edersiniz.

Yeniden montaj sistemi bölümünde hata varsa AVD'yi komut satırından başlatmanız gerekir. Android 7 için ilk adıma bakın.

Kalıcı olmasını istiyorsanız - SuperSU'da ikili dosyayı güncelleyin ve varsayılan system.img'in yerine system.img dosyasını geçici klasörden saklayın.

Kalıcı olarak ortaya çıkan geçici kök nasıl dönüştürülür

İlk olarak - SuperSu'ya gidiyor. İkili yükseltme sunar. Normal şekilde güncelleyin. Reddetmeyi yeniden başlatın.

İkincisi - sadece emülatörler için geçerlidir. Aynı AVD. Sonuç olarak, sistem görüntüsündeki değişiklikler kaydedilmeyecektir. Onları kendileri için tutmalısın.

Farklı emülatörler için talimatlar zaten var.

AVD için geçici bir dosya sistemi bulmaya çalışabilirsiniz. İmg, bir yere kaydedin ve öykünücüyü başlattığınızda kullanın.

Windows'da bulunur %LOCALAPPDATA%\Temp\AndroidEmulatorve benzeri bir adı vardır TMP4980.tmp.

Bunu bir klasör avd cihazına ( %HOMEPATH%\.android\avd\%AVD_NAME%.avd\) kopyalar ve system.img.

Şimdi her zamanki yerine başlangıçta kullanılacak. SDK'daki görüntü güncellenirse, eskisine sahip olur.

Bu durumda, bunu kaldırmanız system.imgve işlemi oluşturma işlemi üzerinde tekrarlamanız gerekir .

Rusça daha ayrıntılı el kitabı: http://4pda.ru/forum/index.php?showtopic=318487&view=findpost&p=45421931


Android 7 için ek adımlar çalıştırmanız gerekir: 1. Emülatörünü manuel olarak çalıştırmanız gerekir. Sdk klasörüne gidin sdk\tools\lib64\qt\lib. Bu klasör emülatöründen seçeneklerle çalıştırın Şunun -writable-system -selinux disabled gibi:

F:\android\sdk\tools\lib64\qt\lib>F:\android\sdk\tools\emulator.exe -avd 7.0_x86 -verbose -writable-system -selinux disabled
  1. adbdKökten yeniden başlatmanız gerekiyor :

    adb -s emülatörü-5554 kökü

Ve yeniden montaj sistemi:

adb -s emulator-5554 remount

Çalışma emülatörü başına sadece bir kez bağışlanabilir. Ve herhangi bir başka yazma yazma modunu bozabilir. Bu nedenle, remount ile başka komutların çalıştırılmasına gerek yoktur mount -o remount,rw /system.

Diğer adımlar aynı kalır - ikili dosya yükleyin, ikili dosyayı daemon olarak çalıştırın vb.

Köklü AVD Android 7 x86'dan resim: Köklü AVD Android 7 x86


Yürütme suikili PIE hakkında hata görürseniz - o zaman emülatör yanlış ikili yüklemek. Sen adında ikili yüklemelisiniz su.piearşiv içinde, ama emülatörünüzde o kadar adlandırılmalıdır sudeğil, su.pie.


Bana kökü kalıcı hale getirme adımlarını söyleyebilir misiniz?
Satya

update binary in SuperSU and store system.img from temp folder as replace of default system.img.
Enyby

Bu adımları sistem 1im'den almak için kullandım. Temp 1) cp / tmp / android / emulator-X8F7Hr ~ / Desktop / system.img 2) bu sistemi kopyaladı. öykünücüyü yeniden başlat, sonra öykünücü köklü durumda değil ... Lütfen bana doğru yolu yönlendir
Satya

avd dizinine daha iyi kopyalama. ancak önce SuperSu'daki ikili modu normal modda güncellemelisiniz.
Enyby

Ben normal modda ikili güncelledik ve AVD dizinine kopyaladım sonra kök kalıcı değil
Satya

13

Ben en kolay yolu komut için bir takma ad oluşturmak olduğuna inanıyoruz sh, örneğin

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 ve sonraki sürümlerinde test edilmiştir.


Bu benim için de çalıştı (x86_64 android 5.02 emülatörde), ancak xbin'e yüklemek için yukarıdaki öneri işe yaramadı.
Yannick

8
Anladımmount: '/system' not in /proc/mounts
Kenny Wyland

sistem 72 ile başarısız oldu
Duna

3

İşte ihtiyacım olan her şey benim paketi. Veya bu komut dosyasını kullanabilirsiniz:

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

Ben sadece ~ / Android / Sdk / sistem görüntüleri / android-22 / google_apis / x86 / system.img için su özelliklerini değiştirdim ve atadım ve şimdi android 5'de her zaman yeni sistemler için bile köküm var, SuperSu'yu yüklemek için yeterli. Apk

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

bundan sonra, SuperSu.apk kök görür. Ama ikili dosyayı güncellemiyorum


1

Yöntemin bir kısmını yukarıdaki çözümlerden kullandım; ancak tam olarak çalışmadılar. Andy'nin son sürümünde bu benim için çalıştı:

Andy'de (Kök Kabuk) [Almak için HandyAndy simgesini sağ tıklayın ve Terim Kabuğu'nu seçin]

Kabuğun içinde şu komutları çalıştırın:

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

Ardından SuperSU'yu yükleyin ve SU ikili dosyasını yükleyin. Bu, az önce oluşturduğumuz SU ikili dosyasının yerini alacak. (İsteğe bağlı) SuperSU'yu çıkarın ve Superuser'ı CWM ile yükleyin. Su ikili dosyasını tekrar kurun. Şimdi, kök çalışıyor!


1

SuperSU dahil olmak üzere yukarıdaki önerilerin çoğunu denedim ve işe yaramadım, ancak benim amacım için çalışan daha basit bir şey buldum. Benim durumumda, sadece komut isteminde sqlite çalıştırmak istedim. Android'in eski bir sürümüne (Lollipop) sahip bir emülatör açtım ve hemen root erişimine sahip oldum.


-1

Varsayılan API 23 x86_64 öykünücüsünün varsayılan olarak köklendiğini buldum.


Bildiğim kadarıyla, sadece "adb root" yazdığınızda # olması, uygulamaların kök ayrıcalıklarından yararlanabileceği anlamına gelmez. / Sistem içinde herhangi bir yere yazma denemesi, bir RO hatasıyla sonuçlandı ve RW olarak yeniden denemeye çalıştı.
Fusseldieb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.