Ini adalah pertanyaan lama, tetapi saya sendiri baru-baru ini ingin tahu tentang ini. Saya menemukan metode yang tidak memerlukan kompilasi ulang adbd
, tetapi itu memang membutuhkan su
(Saya menggunakan Chainfire SuperSu 2.45).
Dengan asumsi bash
terletak di /system/bin/bash
, dan su
di /system/xbin/su
, pada dasarnya sesuatu seperti ini:
adb shell
(gunakan shell interaktif. Menggunakan proses ini sebagai one-liner dapat menyebabkan ADB berhenti bekerja jika ada masalah)
mount -o remount,rw /system
mv /system/bin/sh /system/bin/sh.bak
echo -e '#!/system/bin/bash\n/system/xbin/su -mm -l -s /system/xbin/bash' > /system/bin/sh
Perhatikan bahwa jalur Anda mungkin berbeda; gunakan which bash
dan which su
untuk memastikan.
chmod 777 /system/bin/sh
- Menguji shell sebelum Anda keluar:
/system/bin/sh
. Jika Anda mendapatkan error, memperbaiki kesalahan atau revert dengan mengembalikan cadangan: cp /system/bin/sh.bak /system/bin/sh
.
- Opsional remount / sistem; sebagian besar perangkat akan melakukan ini secara otomatis:
mount -o remount,ro /system
Dan kamu sudah selesai.
Cukup dengan menghubungkan BASH ke SH tidak berfungsi karena bash mengemulasi SH ketika dipanggil dengan cara ini.
Namun, setelah melihat strace, sepertinya mencari bashrc
ketika BASH yang disatukan disebut sebagai 'sh --login'. Meskipun hal ini bisa digunakan untuk "chainload" shell melalui skrip, seperti yang disebutkan di atas cara adbd
memanggil SH adalah hardcode.
Jika ada masalah dan Anda telah menghapus (atau pindah) /system/bin/sh
ADB tidak akan memiliki shell untuk memberi Anda memperbaiki masalahnya. Jika ini terjadi, Anda memiliki beberapa opsi:
- Reboot ke pemulihan yang memiliki
adbd
(seperti CWM atau TWRP) dan buka adb shell untuk itu, untuk menyalin /system/bin/sh.bak lagi ke / system / bin / sh.
- Gunakan adb untuk menyalin cadangan:
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
Perhatikan bahwa ini tidak akan berfungsi pada semua perangkat; beberapa menolak untuk mengizinkan adb melakukan remount / sistem rw dengan cara ini.
- Gunakan emulator terminal yang dapat diatur untuk menjalankan shell yang berbeda; perhatikan bahwa beberapa akan mencoba / system / bin / sh terlebih dahulu dan tutup paksa.
sh
, tidakbash
, ketika saya menggunakan adb untuk menghubungkan. Membangun apa yang Anda gunakan?