120 lines
3.1 KiB
Bash
Executable file
120 lines
3.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# COLOURS
|
|
red='\033[0;31m'
|
|
green='\033[0;32m'
|
|
yellow='\033[1;33m'
|
|
blue='\033[0;34m'
|
|
cyan='\033[0;36m'
|
|
nc='\033[0m'
|
|
|
|
# LOGGING
|
|
log_info() { printf "${blue}[info]${nc} %s\n" "$1"; }
|
|
log_success() { printf "${green}[ok]${nc} %s\n" "$1"; }
|
|
log_warn() { printf "${yellow}[warn]${nc} %s\n" "$1"; }
|
|
log_err() { printf "${red}[err]${nc} %s\n" "$1"; }
|
|
|
|
# ENVIRONMENT
|
|
check_deps() {
|
|
local tools=(adb fastboot apktool uber-apk-signer fzf)
|
|
for t in "${tools[@]}"; do
|
|
if ! command -v "$t" &>/dev/null; then
|
|
log_warn "$t missing"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# DEVICE MANAGEMENT
|
|
cmd_info() {
|
|
printf "${cyan}DEVICE INFORMATION${nc}\n"
|
|
printf "model: %s\n" "$(adb shell getprop ro.product.model)"
|
|
printf "android: %s\n" "$(adb shell getprop ro.build.version.release)"
|
|
|
|
local bat=$(adb shell dumpsys battery | grep level | cut -d: -f2 | tr -d ' ')
|
|
local stat=$(adb shell dumpsys battery | grep 'AC powered' | cut -d: -f2 | tr -d ' ')
|
|
[[ "$stat" == "true" ]] && charge="charging" || charge="discharging"
|
|
|
|
printf "battery: %s%% (%s)\n" "$bat" "$charge"
|
|
|
|
if adb shell su -c "echo 'rooted'" &>/dev/null; then
|
|
printf "root: ${green}yes${nc}\n"
|
|
else
|
|
printf "root: ${red}no${nc}\n"
|
|
fi
|
|
}
|
|
|
|
cmd_wifi() {
|
|
local port=${1:-5555}
|
|
local ip=$(adb shell ip addr show wlan0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)
|
|
if [ -z "$ip" ]; then
|
|
log_err "wifi ip not detected"
|
|
return 1
|
|
fi
|
|
adb tcpip $port
|
|
sleep 2
|
|
adb connect "$ip:$port"
|
|
log_success "connected to $ip:$port"
|
|
}
|
|
|
|
# PACKAGE MANAGEMENT
|
|
cmd_nuke() {
|
|
local pkg=$(adb shell pm list packages | cut -d: -f2 | fzf --prompt="nuke > " --height=40%)
|
|
if [ -n "$pkg" ]; then
|
|
read -p "confirm nuke $pkg? (y/n): " confirm
|
|
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
|
adb shell pm uninstall -k --user 0 "$pkg"
|
|
log_success "nuked $pkg"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# APK ENGINEERING
|
|
cmd_pull() {
|
|
local pkg=${1:-$(adb shell pm list packages | cut -d: -f2 | fzf --prompt="pull > ")}
|
|
[ -z "$pkg" ] && return
|
|
local path=$(adb shell pm path "$pkg" | head -n 1 | cut -d: -f2 | tr -d '\r')
|
|
log_info "pulling $pkg..."
|
|
adb pull "$path" "./$pkg.apk"
|
|
}
|
|
|
|
cmd_scrot() {
|
|
local file="scrot_$(date +%Y%m%d_%H%M%S).png"
|
|
adb shell screencap -p /sdcard/temp.png
|
|
adb pull /sdcard/temp.png "./$file" >/dev/null
|
|
adb shell rm /sdcard/temp.png
|
|
log_success "saved: $file"
|
|
}
|
|
|
|
# MAIN ROUTER
|
|
usage() {
|
|
printf "${cyan}ARCH-DROID TOOL (ADBX)${nc}\n"
|
|
printf "usage: adbx <command> [args]\n\n"
|
|
printf "DEVICE\n"
|
|
printf " check verify tools\n"
|
|
printf " list list devices\n"
|
|
printf " info show battery/root\n"
|
|
printf " wifi wireless adb\n\n"
|
|
printf "PACKAGES\n"
|
|
printf " nuke interactive uninstall\n"
|
|
printf " freeze disable app\n"
|
|
printf " melt enable app\n\n"
|
|
printf "FILES\n"
|
|
printf " pull extract apk\n"
|
|
printf " sign sign apk\n"
|
|
printf " scrot screenshot\n"
|
|
exit 1
|
|
}
|
|
|
|
case "$1" in
|
|
check) check_deps ;;
|
|
list)
|
|
adb devices -l
|
|
fastboot devices
|
|
;;
|
|
info) cmd_info ;;
|
|
wifi) cmd_wifi "$2" ;;
|
|
nuke) cmd_nuke ;;
|
|
pull) cmd_pull "$2" ;;
|
|
scrot) cmd_scrot ;;
|
|
*) usage ;;
|
|
esac
|