Pytanie:
Potrzebujesz jednowierszowej powłoki adb su push & pull, aby uzyskać dostęp / dane z pliku wsadowego systemu Windows
sjoy
2014-10-23 10:05:01 UTC
view on stackexchange narkive permalink

Walczę od dwóch dni. Mam nadzieję na pomoc.

Napisałem plik wsadowy dla systemu Windows, który zastępuje reklamy Amazon lockscreen obrazami użytkowników na zrootowanym kindle fire hd 7 ", 2013 (kfsowi). Właśnie się dowiedziałem, że spartaczyłem polecenia adb, ponieważ korzystałem z „niezabezpieczonego adb”, więc uzyskiwałem dostęp do su bez wpisywania go w poleceniach adb.

Czego potrzebuję: Aby uruchomić plik wsadowy, potrzebuję jednowierszowe polecenia powłoki adb su do ściągania z / push do / data na tym urządzeniu (lub mogę użyć -> adb -d shell su -c "mount -o remount rw, / data < - w jednym wierszu, po którym następuje pull lub push)

Naprawiłem polecenie ls w ten sposób:

  • działało z niezabezpieczonym adb: adb ls "/ data / secureStorageLocation ”
  • potrzebowałem: adb shell su -c" ls ./data/securedStorageLocation"”

Teraz potrzebuję tego samego do ciągnięcia i pchania. Problem:
- Przy niezabezpieczonym adb działa to dobrze: adb pull "/ data / secureStorageLocation" "C: / destination"
- Bez niezabezpieczonego adb otrzymuję: zdalny obiekt '/ data / secureStorageLocation /' nie istnieje

Powyższe dzieje się nawet, jeśli po raz pierwszy uruchomię: adb -d shell su -c "mount -o remount rw, / data

Czy ktoś może mi powiedzieć, jak wykonać ciągnięcie i wypychanie za pomocą powłoki adb i su. Próbowałem WIELE permutacji i nie mogę tego rozgryźć. Dziękuję za poświęcony czas.

EDYCJA: polecenie root adb nie uzyskuje roota na tym urządzeniu

Aby użyć `adb push` lub` adb pull` w trybie roota, demon adb na urządzeniu musi działać w trybie root (co robi ADBInsecure).
@Izzy Jak mogę przejść do trybu roota bez niezabezpieczonego adb, jeśli polecenie> adb root
Nie wiem (zawsze używałem „ADB Insecure”, ponieważ nie mogłem też zmusić do działania „adb root”). Może warto osobne pytanie?
Pięć odpowiedzi:
Mike N.
2015-11-23 13:28:24 UTC
view on stackexchange narkive permalink

Cóż, musisz wykonać kilka poleceń, ponieważ nie sądzę, aby zadziałało w jednym.

Musisz:

  1. powłoka adb
  2. su
  3. cd / data / path / of / file
  4. cp / data / path / of / file / copyme / data / local / tmp
  5. chown shell.shell / data / local / tmp / copyme
  6. exit
  7. exit
  8. adb pull / data / local / tmp / copyme / destination / copyme

To działa dla mnie za każdym razem.

czym dokładnie jest shell.shell
@Remario https: // linux.die.net / man / 1 / chown - to znaczy owner.group.Kiedy kopiujesz plik za pomocą SU, właścicielem i grupą będzie root.root.Polecenie adb pull działa jako shell.shell i nie będzie w stanie pobrać pliku z tymczasowej lokalizacji.Zmiana go przed wykonaniem pull pozwoli ci na pozwolenie.
Jim Klimov
2017-03-21 18:39:08 UTC
view on stackexchange narkive permalink

Dziękuję za tę dyskusję. Doprowadziło mnie to do rozwiązania, które działało wystarczająco dobrze dla mnie podczas tworzenia kopii zapasowej telefonu, który nie zamontował swojego wewnętrznego ext4, zanim zrobię coś drastycznego, próbując to naprawić (najwyraźniej wymaga to uprawnień roota).

Zwróć uwagę, że adb shell generalnie konfiguruje terminal tekstowy (więc może konwertować pojedyncze znaki końca wiersza na CRLF, manipulując danymi binarnymi, takimi jak obrazy partycji lub archiwa TAR). Chociaż możesz obejść ten problem w wersjach adb dla systemów Unix / Linux (np. Dodać stty raw do polecenia shelled) lub użyć nowszego adb z opcją exec-out , w systemie Windows nadal zapisuje CRLF na swoim wyjściu. Sprytną sztuczką jest przekazywanie danych przez kodowanie i dekodowanie base64 (pliki binarne są dostępne masowo dla systemu Windows). Zwróć również uwagę, że błędy lub pełne komunikaty drukowane na stderr w powłoce kończą się na stdout programu adb shell w systemie hosta - więc chcesz odrzuć je po nieuniknionych wstępnych eksperymentach.

Oto idzie:

  adb shell "su -c 'cat / dev / block / mmcblk0p25 | base64' 2> / dev / null" | base64 -d > p25  

Może być łatwo napisany przez system Windows w celu pokrycia wszystkich partycji (listę można przejrzeć przez ls -la / dev / block / i / lub przez cat / proc / diskstats lub cat / proc / partitions ), np .:

  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  

(Uwaga, aby użyć %% P w plikach wsadowych CMD lub % P w powłoce interaktywnej).

Nie zapominaj, że istnieją również partycje mmcblk0boot [01] i że ogólnie mmcblk0 zawiera wszystkie te partycje w opakowaniu GPT, tak jak każdy inny dysk twardy lub podszywający się pod jeden z nich :)

Aby oszacować rozmiary poszczególnych partycji, możesz spojrzeć na wynik:

  fdisk -u -l / dev / block / mmcblk0 *  

Niestety nie udało mi się szybko i łatwo wykonać tar cf - mmcblkp0 * i pobrać zawartość partycji, abym mógł ją przesłać np 7z x -si i wyślij dane również jako wiele plików w przenośnym jednowierszowym.

Do tar niektórych plików możesz:

  adb shell "su -c 'cd / mnt / data && tar czf - ./ | base64' 2> / dev / null" | base64 -d > s3-mmcblk0p25-userdata.tar.gz  

AKTUALIZACJA: Znalazłem więcej sztuczek do przesyłania danych binarnych.

Mam nadzieję, że to pomoże komuś innemu, Jim Klimov

base64 nie jest idealnym rozwiązaniem.W przypadku małych plików działa dobrze, ale w przypadku dużych plików zwiększa czas transferu o jedną trzecią!
Oczywiście nie jest z tego powodu doskonały, ale biorąc pod uwagę, że w celach regeneracyjnych chwytanie wszelkich słomek, które mogą pomóc, jest wystarczająco dobre ... cóż ... :) W każdym razie, jeśli wyślę całą partycję na eksport w ten sposób,Nie obchodzi mnie, czy trwa to godzinę vs półtorej, o ile niezawodnie wykonuje pracę.Ponadto, jak niektórzy udokumentowali, wariant adb.exe dla systemu Windows skutecznie zawsze wyświetla tekst oddzielony CRLF, wydaje się, że niewiele możemy zrobić, ale nadużywać go przy użyciu przyjaznej dla ASCII enkapsulacji.Alternatywnie, rozwiązaniem może być „adb exec-out” - ale z jakiegoś powodu nie działa dobrze dla mnie.
Nae
2019-02-27 17:46:49 UTC
view on stackexchange narkive permalink

Używam skryptu wsadowego ( extract-db-from-emulator.bat ) poniżej, aby wyciągnąć lokalną bazę danych do hosta:

  @@ echo offSET 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_filep % "% adb_path% adb.exe pull% pullable_filepath%% host_directory%  
Display Name
2015-06-09 12:05:25 UTC
view on stackexchange narkive permalink

Niekoniecznie będzie to jednowierszowe, ale możesz spróbować wykonać następujące czynności:

  • (z powłoką adb, su) Skopiuj pliki do tymczasowo dostępnej lokalizacji na urządzeniu (na przykład / sdcard lub zewnętrzna karta SD)
  • (z adb pull) Skopiuj te pliki z tymczasowej lokalizacji na swój komputer
  • Usuń tymczasowe copy

Możliwa wada: między pierwszym a ostatnim krokiem złośliwa aplikacja, jeśli zdarzy ci się jej "używać", może odczytywać i / lub modyfikować pliki w tymczasowym publicznie dostępnym katalogu. W praktyce jest to mało prawdopodobne.

hannes ach
2020-05-10 12:46:58 UTC
view on stackexchange narkive permalink

Widzę błąd z

  adb shell "su -c '<your command>'"  

su: invalid uid / gid ' -c '

Rozwiązanie jest w Linuksie

  adb shell su 0' <your command> ' 


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...