Cần đẩy và kéo adb shell một dòng để truy cập / dữ liệu từ tệp bó Windows


8

Tôi đã vật lộn trong hai ngày. Hy vọng giúp đỡ ở đây.

Tôi đã viết một tệp bó Windows thay thế quảng cáo trên màn hình khóa của Amazon bằng hình ảnh người dùng trên root kindle fire hd 7 ", 2013 (kfsowi). Tôi vừa học được các lệnh adb vì tôi đang chạy" adb insecure "nên đã nhận được quyền truy cập mà không cần viết vào các lệnh adb.

Những gì tôi cần: Để chạy trong tệp bó, tôi cần các lệnh su adb shell một dòng để kéo từ / đẩy đến / dữ liệu trên thiết bị này. (Hoặc tôi có thể sử dụng -> adb -d shell su -c "mount -o remount rw, / data <- trên một dòng theo sau là kéo hoặc đẩy)

Tôi đã sửa một lệnh ls như thế này:

  • cái này hoạt động với adb không an toàn: adb ls "/ data / reservedStorageLocation"
  • cái tôi cần là: adb shell su -c "ls ./data/securedStorageLocation"

Bây giờ tôi cần tương tự cho kéo và đẩy. Vấn đề:
- Với adb không an toàn, điều này hoạt động tốt: adb pull "/ data / bảo mậtStorageLocation" nhiệt độ C: / đích xác
- Không có adb không an toàn tôi nhận được: đối tượng từ xa '/ data / bảo mậtStorageLocation /' không tồn tại

Trên đây xảy ra ngay cả khi tôi chạy lần đầu tiên: adb -d shell su -c "mount -o remount rw, / data

Ai đó có thể cho tôi biết làm thế nào để kéo và đẩy với vỏ adb và su. Tôi đã thử NHIỀU hoán vị và không thể hiểu điều này. Cảm ơn vì đã dành thời gian cho tôi.

EDIT: lệnh root adb không đạt được root trên thiết bị này


Để sử dụng adb pushhoặc adb pullở chế độ gốc, trình nền adb trên thiết bị phải chạy ở chế độ gốc (đó là những gì ADBInsecure làm).
Izzy

@Izzy Làm cách nào tôi có thể vào chế độ root mà không có adb không an toàn nếu> adb root <lệnh không hoạt động? Tôi muốn phân phối này. Có cách nào khác để đẩy và kéo thư mục không? thx
sjoy

Tôi không biết (luôn sử dụng "ADB Insecure", vì tôi cũng không thể adb rootđi làm). Giá trị một câu hỏi riêng biệt, có thể?
Izzy

Câu trả lời:


9

Chà, bạn phải thực hiện một vài lệnh, vì tôi không tin rằng nó sẽ hoạt động trong một lệnh.

Bạn cần phải làm:

  1. adb shell
  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

Điều này làm việc cho tôi mọi lúc.


1
chính xác là shell.shell
Remario

1
@Remario linux.die.net/man/1/chown - có nghĩa là chủ sở hữu. Khi bạn sao chép tệp bằng SU, chủ sở hữu và nhóm sẽ là root.root. Lệnh kéo adb chạy dưới dạng shell.shell và sẽ không thể kéo tệp từ vị trí tạm thời. Thay đổi nó trước khi thực hiện kéo sẽ cho phép bạn cho phép.
Mike N.

2

Cảm ơn cho cuộc thảo luận này. Nó dẫn tôi đến một giải pháp hoạt động đủ tốt cho tôi trong khi sao lưu điện thoại không gắn ext4 bên trong của nó, trước khi tôi làm điều gì đó quyết liệt trong khi cố gắng khắc phục (rõ ràng điều này cần có quyền root).

Lưu ý rằng adb shellthường thiết lập một thiết bị đầu cuối văn bản (vì vậy có thể chuyển đổi các ký tự cuối dòng đơn thành CRLF, xáo trộn dữ liệu nhị phân như hình ảnh phân vùng hoặc lưu trữ TAR). Mặc dù bạn có thể giải quyết vấn đề này trong các phiên bản Unix / Linux của adb (ví dụ: thêm stty rawvào lệnh shell của bạn) hoặc sử dụng một số adb mới hơn với exec-outtùy chọn, trên Windows, nó vẫn ghi CRLF vào đầu ra của nó. Thủ thuật gọn gàng là truyền dữ liệu thông qua mã hóa và giải mã cơ sở64 (nhị phân có sẵn cho Windows en-masse). Cũng lưu ý rằng lỗi hoặc tiết thông điệp được in để stderrcuối cùng vỏ lên trên stdoutcác adb shellchương trình trong hệ thống máy chủ - vì vậy bạn muốn loại bỏ những sau khi thử nghiệm ban đầu không thể tránh khỏi.

Đây là:

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

Windows có thể dễ dàng viết kịch bản để bao quát tất cả các phân vùng (có thể tra cứu danh sách theo ls -la /dev/block/và / hoặc bởi cat /proc/diskstatshoặc cat /proc/partitions), ví dụ:

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

(Lưu ý sử dụng %%Ptrong các tệp bó của CMD hoặc %Ptrong vỏ tương tác).

Đừng quên rằng cũng có các mmcblk0boot[01]phân vùng và mmcblk0tổng thể chứa tất cả các phân vùng đó trong gói GPT, giống như bất kỳ ổ cứng hoặc kẻ mạo danh nào khác của một :)

Để ước tính kích thước phân vùng riêng lẻ, bạn có thể nhìn vào đầu ra của:

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

Thật không may, tôi đã không nhanh chóng và dễ dàng quản lý tar cf - mmcblkp0*và lấy nội dung phân vùng, vì vậy tôi có thể chuyển nó thành ví dụ 7z x -sivà lấy dữ liệu ra dưới dạng nhiều tệp trong một lớp lót di động.

Để tarmột số tệp bạn có thể:

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

CẬP NHẬT: Tìm thấy thêm một số thủ thuật để chuyển dữ liệu nhị phân.

Hy vọng điều này sẽ giúp người khác, Jim Klimov


Base64 không phải là một giải pháp lý tưởng. Đối với các tệp nhỏ, nó hoạt động tốt nhưng đối với các tệp lớn, nó sẽ tăng thời gian chuyển nhượng lên một phần ba!
iBug

Tất nhiên nó không hoàn hảo do điều đó, nhưng cho rằng với mục đích phục hồi, nắm bắt bất kỳ ống hút nào có thể giúp là đủ tốt ... tốt ... :) Trong mọi trường hợp, nếu tôi gửi toàn bộ phân vùng để xuất như thế này, Tôi không thực sự quan tâm nếu phải mất một giờ so với giờ rưỡi, miễn là nó đáng tin cậy thực hiện công việc. Ngoài ra, như, như một số người khác đã ghi lại, biến thể Windows của adb.exe luôn xuất ra văn bản được phân tách bằng CRLF, có vẻ như chúng ta không thể làm gì ngoài việc lạm dụng nó với sự bao bọc thân thiện với ASCII. Thay phiên, adb exec-outcó thể là giải pháp - nhưng vì một số lý do không hoạt động tốt với tôi.
Jim Klimov

1

Tôi sử dụng tập lệnh bó ( extract-db-from-emulator.bat) bên dưới để kéo cơ sở dữ liệu cục bộ ra máy chủ:

@@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%

0

Không nhất thiết phải là một dòng, nhưng bạn có thể thử thực hiện các hành động sau:

  • (với vỏ adb, su) Sao chép các tệp vào một vị trí có thể truy cập tạm thời trên thiết bị của bạn (ví dụ: /sdcardhoặc thẻ SD bên ngoài)
  • (với adb pull) Sao chép các tệp này từ vị trí tạm thời vào máy của bạn
  • Xóa bản sao tạm thời

Hạn chế có thể xảy ra: giữa bước đầu tiên và bước cuối cùng, một ứng dụng độc hại, nếu bạn tình cờ "sử dụng" nó, có thể đọc và / hoặc sửa đổi các tệp trong thư mục có thể truy cập công khai tạm thời. Trong thực tế, điều này rất khó xảy ra.


0

Tôi thấy một lỗi với

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

su: uid / gid không hợp lệ '-c'

Các giải pháp là trên Linux

adb shell su 0 '<your command>'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.