Esta es una vieja pregunta, pero recientemente tuve curiosidad sobre esto. Encontré un método que no requiere recompilación adbd
, pero sí requiere su
(estoy usando Chainfire SuperSu 2.45).
Suponiendo que bash
se encuentra en /system/bin/bash
, y su
está en /system/xbin/su
, es esencialmente algo como esto:
adb shell
(use un shell interactivo. Invocar este proceso como una línea podría hacer que ADB deje de funcionar si hay un problema)
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
Tenga en cuenta que sus caminos pueden diferir; uso which bash
y which su
para estar seguro.
chmod 777 /system/bin/sh
- Prueba de la cáscara antes de salir:
/system/bin/sh
. Si se produce un error, corregir el error o revertir mediante la restauración de la copia de seguridad: cp /system/bin/sh.bak /system/bin/sh
.
- Opcionalmente montaje / sistema; la mayoría de los dispositivos harán esto automáticamente:
mount -o remount,ro /system
Y tu estas listo.
Simplemente simular BASH a SH no funciona porque bash emula SH cuando se invoca de esta manera.
Sin embargo, al mirar strace, parece buscar un bashrc
cuando un BASH simbólico se llama como 'sh --login'. Si bien esto podría ser utilizado para "encadenar" shells a través de un script, como se mencionó anteriormente, la forma en que adbd
invoca SH está codificada.
Si hay un problema y ha eliminado (o movido) /system/bin/sh
ADB no tendrá un shell que le permita solucionar el problema. Si esto sucede, tiene algunas opciones:
- Reinicie en una recuperación que tenga
adbd
(como CWM o TWRP) y abra un shell adb para copiar /system/bin/sh.bak a / system / bin / sh nuevamente.
- Use adb para copiar la copia de seguridad:
adb root; adb remount; adb shell; adb pull /system/bin/sh.bak; adb push sh.bak /system/bin/sh
tenga en cuenta que esto no funcionará en todos los dispositivos; algunos se niegan a permitir que adb vuelva a montar / system rw de esta manera.
- Use un emulador de terminal que se pueda configurar para ejecutar un shell diferente; tenga en cuenta que varios intentarán / system / bin / sh primero y forzarán el cierre.
sh
, nobash
, cuando uso adb para conectarme. Cual build está usando?