hacktricks/mobile-pentesting/android-app-pentesting/adb-commands.md
2023-06-03 01:46:23 +00:00

419 lines
12 KiB
Markdown

**Adb suele estar ubicado en:**
```bash
#Windows
C:\Users\<username>\AppData\Local\Android\sdk\platform-tools\adb.exe
#MacOS
/Users/<username>/Library/Android/sdk/platform-tools/adb
```
# Conexión
## Connect to a device over Wi-Fi
## Conectar a un dispositivo a través de Wi-Fi
1. Connect the device to the same Wi-Fi network as your computer.
2. Connect the device to your computer with a USB cable.
3. Open a terminal and type:
```
adb tcpip 5555
```
4. Disconnect the USB cable from the device.
5. Find the IP address of the device. For example, on the device, you can go to Settings > About phone > Status > IP address.
6. Connect to the device using the IP address:
```
adb connect <IP_ADDRESS>
```
For example:
```
adb connect 192.168.1.10
```
7. You should now be connected to the device over Wi-Fi.
1. Conecte el dispositivo a la misma red Wi-Fi que su computadora.
2. Conecte el dispositivo a su computadora con un cable USB.
3. Abra una terminal y escriba:
```
adb tcpip 5555
```
4. Desconecte el cable USB del dispositivo.
5. Encuentre la dirección IP del dispositivo. Por ejemplo, en el dispositivo, puede ir a Configuración> Acerca del teléfono> Estado> Dirección IP.
6. Conéctese al dispositivo usando la dirección IP:
```
adb connect <DIRECCIÓN_IP>
```
Por ejemplo:
```
adb connect 192.168.1.10
```
7. Ahora debería estar conectado al dispositivo a través de Wi-Fi.
```
adb devices
```
Esto listará los dispositivos conectados; si aparece "_**no autorizado**_", esto significa que tienes que **desbloquear** tu **móvil** y **aceptar** la conexión.
Esto indica al dispositivo que debe iniciar un servidor adb en el puerto 5555:
```
adb tcpip 5555
```
Conéctese a esa dirección IP y ese puerto:
```
adb connect <IP>:<PORT>
```
Si obtienes un error como el siguiente en un software de Android virtual (como Genymotion):
```
adb server version (41) doesn't match this client (36); killing...
```
Es porque estás intentando conectarte a un servidor ADB con una versión diferente. Solo intenta encontrar el binario adb que está utilizando el software (ve a `C:\Program Files\Genymobile\Genymotion` y busca adb.exe)
## Varios dispositivos
Cuando encuentres **varios dispositivos conectados a tu máquina**, necesitarás **especificar en cuál** quieres ejecutar el comando adb.
```bash
adb devices
List of devices attached
10.10.10.247:42135 offline
127.0.0.1:5555 device
```
```bash
adb -s 127.0.0.1:5555 shell
x86_64:/ # whoami
root
```
## Tunelización de Puertos
En caso de que el **puerto adb** solo sea **accesible** desde **localhost** en el dispositivo Android pero **tienes acceso a través de SSH**, puedes **reenviar el puerto 5555** y conectarte a través de adb:
```bash
ssh -i ssh_key username@10.10.10.10 -L 5555:127.0.0.1:5555 -p 2222
adb connect 127.0.0.1:5555
```
# Gestor de paquetes
## Instalar/Desinstalar
### adb install \[opción] \<ruta>
```
adb install test.apk
```
```
adb install -l test.apk forward lock application
```
```
adb install -r test.apk replace existing application
```
```
adb install -t test.apk allow test packages
```
```
adb install -s test.apk install application on sdcard
```
```
adb install -d test.apk allow version code downgrade
```
```
adb install -p test.apk partial application install
```
### adb uninstall \[opciones] \<PAQUETE>
```
adb uninstall com.test.app
```
```
adb uninstall -k com.test.app Keep the data and cache directories around after package removal.
```
## Paquetes
Muestra todos los paquetes, opcionalmente solo aquellos cuyo nombre de paquete contiene el texto en \<FILTER>.
### adb shell pm list packages \[opciones] \<FILTER-STR>
```
adb shell pm list packages <FILTER-STR>
```
```
adb shell pm list packages -f <FILTER-STR> #See their associated file.
```
```
adb shell pm list packages -d <FILTER-STR> #Filter to only show disabled packages.
```
```
adb shell pm list packages -e <FILTER-STR> #Filter to only show enabled packages.
```
```
adb shell pm list packages -s <FILTER-STR> #Filter to only show system packages.
```
```
adb shell pm list packages -3 <FILTER-STR> #Filter to only show third party packages.
```
```
adb shell pm list packages -i <FILTER-STR> #See the installer for the packages.
```
```
adb shell pm list packages -u <FILTER-STR> #Also include uninstalled packages.
```
```
adb shell pm list packages --user <USER_ID> <FILTER-STR> #The user space to query.
```
### adb shell pm path \<PAQUETE>
Imprime la ruta al APK del paquete dado.
```
adb shell pm path com.android.phone
```
### adb shell pm clear \<PAQUETE>
Elimina todos los datos asociados con un paquete.
```
adb shell pm clear com.test.abc
```
# Administrador de archivos
### adb pull \<remoto> \[local]
Descarga un archivo especificado desde un emulador/dispositivo a tu computadora.
```
adb pull /sdcard/demo.mp4 ./
```
### adb push \<local> \<remote>
Sube un archivo especificado desde tu computadora a un emulador/dispositivo.
```
adb push test.apk /sdcard
```
# Captura de pantalla/Grabación de pantalla
### adb shell screencap \<nombre_archivo>
Tomando una captura de pantalla de la pantalla del dispositivo.
```
adb shell screencap /sdcard/screen.png
```
### adb shell screenrecord \[opciones] \<nombre_archivo>
Graba la pantalla de dispositivos que ejecutan Android 4.4 (nivel de API 19) o superior.
```
adb shell screenrecord /sdcard/demo.mp4
adb shell screenrecord --size <WIDTHxHEIGHT>
adb shell screenrecord --bit-rate <RATE>
adb shell screenrecord --time-limit <TIME> #Sets the maximum recording time, in seconds. The default and maximum value is 180 (3 minutes).
adb shell screenrecord --rotate # Rotates 90 degrees
adb shell screenrecord --verbose
```
(presione Ctrl-C para detener la grabación)
**Puede descargar los archivos (imágenes y videos) usando** _**adb pull**_
# Shell
### adb shell
Obtener una shell dentro del dispositivo
```
adb shell
```
### adb shell \<CMD>
Ejecuta un comando dentro del dispositivo.
```
adb shell ls
```
## pm
Los siguientes comandos se ejecutan dentro de una shell.
```bash
pm list packages #List installed packages
pm path <package name> #Get the path to the apk file of tha package
am start [<options>] #Start an activity. Whiout options you can see the help menu
am startservice [<options>] #Start a service. Whiout options you can see the help menu
am broadcast [<options>] #Send a broadcast. Whiout options you can see the help menu
input [text|keyevent] #Send keystrokes to device
```
# Procesos
Si deseas obtener el PID del proceso de tu aplicación, puedes ejecutar:
```
adb shell ps
```
Y busca tu aplicación
O puedes hacer
```
adb shell pidof com.your.application
```
Y esto imprimirá el PID de la aplicación.
```
adb root
```
Reinicia el demonio adbd con permisos de root. Luego, debes conectarte nuevamente al servidor ADB y serás root (si está disponible).
```
adb sideload <update.zip>
```
Actualización/Restauración de paquetes Android update.zip.
# Registros
## Logcat
Para **filtrar los mensajes de solo una aplicación**, obtenga el PID de la aplicación y use grep (linux/macos) o findstr (windows) para filtrar la salida de logcat:
```
adb logcat | grep 4526
adb logcat | findstr 4526
```
### adb logcat \[opción] \[especificaciones-de-filtro]
```
adb logcat
```
Notas: presiona Ctrl-C para detener el monitor
```
adb logcat *:V lowest priority, filter to only show Verbose level
```
```
adb logcat *:D filter to only show Debug level
```
```
adb logcat *:I filter to only show Info level
```
```
adb logcat *:W filter to only show Warning level
```
```
adb logcat *:E filter to only show Error level
```
```
adb logcat *:F filter to only show Fatal level
```
```
adb logcat *:S Silent, highest priority, on which nothing is ever printed
```
### adb logcat -b \<Buffer>
Muestra los registros del búfer especificado. Los búferes disponibles son:
- `main` : el búfer principal del sistema.
- `radio` : el búfer de radio.
- `events` : el búfer de eventos.
- `system` : el búfer del sistema.
- `crash` : el búfer de fallos.
Para ver los registros del búfer principal, simplemente ejecute `adb logcat`. Si desea ver los registros de otro búfer, use el parámetro `-b` seguido del nombre del búfer. Por ejemplo, para ver los registros del búfer de radio, ejecute `adb logcat -b radio`.
```
adb logcat -b radio View the buffer that contains radio/telephony related messages.
```
```
adb logcat -b event View the buffer containing events-related messages.
```
```
adb logcat -b main default
```
```
adb logcat -c Clears the entire log and exits.
```
```
adb logcat -d Dumps the log to the screen and exits.
```
```
adb logcat -f test.logs Writes log message output to test.logs .
```
```
adb logcat -g Prints the size of the specified log buffer and exits.
```
```
adb logcat -n <count> Sets the maximum number of rotated logs to <count>.
```
## dumpsys
dumps datos del sistema
### adb shell dumpsys \[opciones]
```
adb shell dumpsys
```
# adb shell dumpsys meminfo
Muestra información detallada sobre el uso de memoria de la aplicación. Esto incluye información sobre la memoria utilizada por la aplicación, la memoria compartida, la memoria asignada, la memoria libre, la memoria privada y la memoria gráfica. Esta información puede ser útil para identificar posibles fugas de memoria y optimizar el rendimiento de la aplicación.
```
adb shell dumpsys battery
```
Notas: Un dispositivo móvil con las Opciones de desarrollador habilitadas que ejecute Android 5.0 o superior.
```
adb shell dumpsys batterystats collects battery data from your device
```
Notas: [Battery Historian](https://github.com/google/battery-historian) convierte esos datos en una visualización HTML. **PASO 1** _adb shell dumpsys batterystats > batterystats.txt_ **PASO 2** _python historian.py batterystats.txt > batterystats.html_
```
adb shell dumpsys batterystats --reset erases old collection data
```
adb shell dumpsys activity
# Copia de seguridad
Realiza una copia de seguridad de un dispositivo Android desde adb.
```bash
adb backup [-apk] [-shared] [-system] [-all] -f file.backup
# -apk -- Include APK from Third partie's applications
# -shared -- Include removable storage
# -system -- Include system Applciations
# -all -- Include all the applications
adb shell pm list packages -f -3 #List packages
adb backup -f myapp_backup.ab -apk com.myapp # backup on one device
adb restore myapp_backup.ab # restore to the same or any other device
```
Si deseas inspeccionar el contenido de la copia de seguridad:
```bash
( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 myapp_backup.ab ) | tar xfvz -
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PRs al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>