Skip to content

MASTG-TECH-0002: Transferência de Dados entre Host e Dispositivo

Usando adb

Você pode copiar arquivos de e para um dispositivo usando os comandos adb adb pull <remoto> <local> e adb push <local> <remoto> comandos. Seu uso é bastante direto. Por exemplo, o seguinte comando copiará foo.txt do seu diretório atual (local) para a pasta sdcard (remoto):

adb push foo.txt /sdcard/foo.txt

Essa abordagem é comumente usada quando você sabe exatamente o que quer copiar e de/para onde, e também suporta transferência de arquivos em massa, por exemplo, você pode puxar (copiar) um diretório inteiro do dispositivo Android para seu computador host.

$ adb pull /sdcard
/sdcard/: 1190 arquivos copiados. 14.1 MB/s (304526427 bytes em 20.566s)

Usando o Device File Explorer do Android Studio

O Android Studio possui um Device File Explorer integrado que você pode abrir indo em View -> Tool Windows -> Device File Explorer.

Se você estiver usando um dispositivo com root, agora pode começar a explorar todo o sistema de arquivos. No entanto, ao usar um dispositivo sem root, o acesso às sandboxes de aplicativos não funcionará, a menos que o aplicativo seja depurável, e mesmo assim você ficará "preso" dentro da sandbox do aplicativo.

Usando objection

Essa opção é útil quando você está trabalhando em um aplicativo específico e deseja copiar arquivos que possa encontrar dentro de sua sandbox (note que você terá acesso apenas aos arquivos aos quais o aplicativo alvo tem acesso). Essa abordagem funciona sem ter que definir o aplicativo como depurável, o que seria necessário ao usar o Device File Explorer do Android Studio.

Primeiro, conecte-se ao aplicativo com o Objection conforme explicado em objection. Em seguida, use ls e cd como você normalmente faria no terminal para explorar os arquivos disponíveis:

$ frida-ps -U | grep -i owasp
21228  sg.vp.owasp_mobile.omtg_android

$ objection -g sg.vp.owasp_mobile.omtg_android explore

...g.vp.owasp_mobile.omtg_android on (google: 8.1.0) [usb] # cd ..
/data/user/0/sg.vp.owasp_mobile.omtg_android

...g.vp.owasp_mobile.omtg_android on (google: 8.1.0)  [usb] # ls
Type       ...  Name
---------  ...  -------------------
Directory  ...  cache
Directory  ...  code_cache
Directory  ...  lib
Directory  ...  shared_prefs
Directory  ...  files
Directory  ...  app_ACRA-approved
Directory  ...  app_ACRA-unapproved
Directory  ...  databases

Readable: True  Writable: True

Quando você tiver um arquivo que deseja baixar, basta executar file download <algum_arquivo>. Isso fará o download desse arquivo para seu diretório de trabalho. Da mesma forma, você pode fazer upload de arquivos usando file upload.

...[usb] # ls
Type    ...  Name
------  ...  -----------------------------------------------
File    ...  sg.vp.owasp_mobile.omtg_android_preferences.xml

Readable: True  Writable: True
...[usb] # file download sg.vp.owasp_mobile.omtg_android_preferences.xml
Downloading ...
Streaming file from device...
Writing bytes to destination...
Successfully downloaded ... to sg.vp.owasp_mobile.omtg_android_preferences.xml

A desvantagem é que, no momento desta escrita, o objection ainda não suporta transferência de arquivos em massa, então você está limitado a copiar arquivos individuais. Ainda assim, isso pode ser útil em alguns cenários onde você já está explorando o aplicativo usando o objection de qualquer forma e encontra algum arquivo interessante. Em vez de, por exemplo, anotar o caminho completo desse arquivo e usar adb pull <caminho_para_algum_arquivo> a partir de um terminal separado, você pode simplesmente fazer file download <algum_arquivo> diretamente.