Я написал пакетный файл для Windows, который заменяет рекламу экрана блокировки Amazon изображениями пользователей на рутированном Kindle Fire HD 7 ", 2013 (kfsowi). Только что узнал, что испортил команды adb, потому что я запускал "adb insecure", поэтому получал доступ su, не записывая его. в команды adb.
Что мне нужно: для запуска в пакетном файле мне нужны однострочные команды adb shell su для извлечения/передачи /data
на это устройство. (Или я мог бы использовать adb -d shell su -c "mount -o remount rw, /data
в одной строке, за которой следует вытягивание или нажатие)
Я исправил команду ls следующим образом:
adb ls "/data/securedStorageLocation"
adb shell su -c "ls ./data/securedStorageLocation"
Теперь мне нужно то же самое для тянуть и толкать. Эта проблема:
adb pull "/data/securedStorageLocation" "C:/destination"
remote object '/data/securedStorageLocation/' does not exist
Выше происходит, даже если я сначала запускаю:adb -d shell su -c "mount -o remount rw, /data
Может ли кто-нибудь сказать мне, как сделать pull и push с помощью adb shell и su?
РЕДАКТИРОВАТЬ: adb root
команда не получает root на этом устройстве
Ну, вам нужно выполнить несколько команд, так как я не верю, что это сработает в одной.
Вам нужно сделать:
adb shell
su
cd /data/path/of/file
cp /data/path/of/file/copyme /data/local/tmp
chown shell.shell /data/local/tmp/copyme
exit
exit
adb pull /data/local/tmp/copyme /destination/copyme
Это работает для меня каждый раз.
/data/local/tmp/copyme
окончательно (после тянуть)Спасибо за это обсуждение. Это привело меня к решению, которое достаточно хорошо сработало для меня при резервном копировании моего телефона, который не будет монтировать его внутренний ext4, прежде чем я сделаю что-то радикальное, пытаясь это исправить (очевидно, для этого нужны права root).
Обратите внимание, что adb shell
обычно настраивается текстовый терминал (поэтому можно преобразовывать отдельные символы конца строки в CRLF, искажая двоичные данные, такие как изображения разделов или архивы TAR). Хотя вы можете обойти это в версиях adb для Unix/Linux (например, добавить stty raw
в свою команду с оболочкой) или использовать более новый adb с exec-out
параметром, в Windows он по-прежнему записывает CRLF в свой вывод. Ловкий трюк заключается в том, чтобы передавать данные через кодирование и декодирование base64 (двоичные файлы доступны для Windows в массовом порядке). Также обратите внимание, что ошибки или подробные сообщения, напечатанные stderr
в оболочке, в конечном итоге попадают stdout
в adb shell
программу в хост-системе, поэтому вы хотите отказаться от них после неизбежных первоначальных экспериментов.
Вот оно:
adb shell "su -c 'cat /dev/block/mmcblk0p25 | base64' 2>/dev/null" | base64 -d > p25
Windows может легко написать сценарий, чтобы охватить все разделы (можно просмотреть список с помощью ls -la /dev/block/
и / или с помощью cat /proc/diskstats
или cat /proc/partitions
), например:
for /L %P in (1,1,25) do ..\platform-tools\adb shell "su -c 'cat /dev/block/mmcblk0p%P | base64' 2>/dev/null" | base64 -d > s3-mmcblk0p%P.img
(Обратите внимание на использование %%P
в пакетных файлах CMD или %P
в интерактивной оболочке).
Не забывайте, что есть также mmcblk0boot[01]
разделы, и что mmcblk0
общий содержит все эти разделы в оболочке GPT, как и любой другой жесткий диск или имитатор одного :)
Чтобы оценить размеры отдельных разделов, вы можете посмотреть на вывод:
fdisk -u -l /dev/block/mmcblk0*
К сожалению, мне не удалось быстро и легко tar cf - mmcblkp0*
получить содержимое раздела, поэтому я мог передать его, например, 7z x -si
и получить данные в виде нескольких файлов в переносимом однострочном формате.
Для tar
некоторых файлов вы можете:
adb shell "su -c 'cd /mnt/data && tar czf - ./ | base64' 2>/dev/null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz
ОБНОВЛЕНО: Найдены еще несколько приемов для передачи бинарных данных.
Надеюсь, это поможет кому-то еще, Джим Климов
adb exec-out
может быть решение, но по какой-то причине у меня не сработало.sudo adb shell su 0 -c 'dd if=/dev/block/mmcblk0 | base64 2>/dev/null' | base64 -d >./mmcblk0.img 2>/dev/null
base64
?!adb root; adb push /local/file /distant/root/owner/file
«adb root» перезапустит adbd как root, после чего ваш толчок будет принят
Не обязательно он будет однострочным, но можно попробовать сделать следующие действия:
/sdcard
, или на внешнюю SD-карту)Возможный недостаток: между первым и последним шагом вредоносное приложение, если вы его «используете», может прочитать и/или изменить файлы во временном общедоступном каталоге. На практике это очень маловероятно.
Я использую приведенный ниже пакетный скрипт ( extract-db-from-emulator.bat
), чтобы вывести локальную базу данных на хост:
@@echo off
SET adb_path="%USERPROFILE%\AppData\Local\Android\sdk\platform-tools\"
SET application_id="com.example.myapp"
SET root_access_filepath="/data/user/0/%application_id%/databases/local.db"
SET pullable_filepath="/mnt/sdcard/DCIM/local.db"
SET host_directory="%USERPROFILE%\Desktop"
SET root_command="su 0 cp"
%adb_path%adb.exe shell "%root_command% %root_access_filepath% %pullable_filepath%"
%adb_path%adb.exe pull %pullable_filepath% %host_directory%
Я вижу ошибку с
adb shell "su -c '<your command>'"
su: неверный uid/gid '-c'
Решение есть в линуксе
adb shell su 0 '<your command>'
-c
перед командой, например:sudo adb shell su 0 -c 'whoami'
Иззи
adb push
илиadb pull
в корневом режиме, демон adb на устройстве должен работать в корневом режиме (что и делает ADBInsecure).радуйся
Иззи
adb root
к работе). Может стоит отдельного вопроса?