Skip to content

Instantly share code, notes, and snippets.

@Areizen
Created June 30, 2022 18:47
Show Gist options
  • Save Areizen/2e30edeb7376177c9c21dce957f781d7 to your computer and use it in GitHub Desktop.
Save Areizen/2e30edeb7376177c9c21dce957f781d7 to your computer and use it in GitHub Desktop.
Dirty download app from playstore
from re import sub
import subprocess
import sys
import re
from bs4 import BeautifulSoup
import time
def dump_layout():
path_out = subprocess.check_output(["adb", "shell", "uiautomator", "dump"])
path_out = path_out.split(b': ')[1]
xml_data = subprocess.check_output(["adb", "shell", "cat", path_out.strip()])
soup = BeautifulSoup(xml_data, features="xml")
node = soup.find("node", attrs={"text" : "Installer"})
regex = r"\[(?P<x_min>\d+),(?P<x_max>\d+)\]\[(?P<y_min>\d+),(?P<y_max>\d+)\]"
bounds = re.match(regex, node["bounds"])
subprocess.check_output(["adb","shell", "input", "tap", str(int(bounds.group("x_min")) + 1), str(int(bounds.group("y_min")) + 1) ])
def install_app(package_name):
subprocess.check_output(["adb", "shell", "am", "start", "-a", "android.intent.action.VIEW", "-d", f"market://details?id={package_name}"])
def uninstall_app(package_name):
subprocess.check_output(["adb", "uninstall", f"{package_name}"])
def dump_app(package_name):
out = subprocess.check_output(["adb", "shell", "pm", "path", package_name])
path = out.strip().split(b':')[1].split(b"\r\n")[0].decode()
print(path)
subprocess.check_output(["adb", "pull", path, f"{package_name}.apk"])
def wait_for_install(package_name):
out = b""
while(package_name.encode() not in out):
out = subprocess.check_output(["adb", "shell", "pm", "list", "packages"])
time.sleep(0.5)
print("Installed !")
if __name__ == '__main__':
if len(sys.argv) != 2:
print(f"Usage : {sys.argv[0]} <package_name>");
exit(-1)
package_name = sys.argv[1]
# dummy call to instantiate adb
subprocess.check_output(["adb", "shell", "ls"])
install_app(package_name)
dump_layout()
wait_for_install(package_name)
dump_app(package_name)
uninstall_app(package_name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment