def is_AWSSDK(self, pkgid): asset = Assets() apkfinal_path = os.path.join("./apk/") + pkgid + '.apk' if re.search(b'(?i)aws-android-sdk', open(apkfinal_path,"rb").read()): if asset.exist(pkgid) == False: asset.add(pkgid, "", 0, "") asset.exist_sdk(pkgid, True) return True
class getInstalledApps: def __init__(self): self.client = AdbClient(host="127.0.0.1", port=5037) self.adb_device = self.client.devices()[0] self.applist = [] self.apppath = [] self.asset = Assets() def get_Applist(self): self.ltemp = self.adb_device.shell("pm list packages ") # if search_keword is none, print all lists out. temp = self.ltemp.split("\n") del temp[len(temp)-1] self.applist = [x.split(":")[1] for x in temp] #print (self.applist) return self.applist def get_Path(self, pkgid): path_temp = self.adb_device.shell("pm path " + pkgid) path = path_temp.split(":")[1].strip() return path def get_app(self, pkgid): path = self.get_Path(pkgid) tmp_path = os.path.join("./tmp/") + pkgid + '.apk' data = self.adb_device.pull(path, tmp_path) if self.asset.exist(pkgid) == False: self.asset.add(pkgid, "", 0, "") def get_SDKApps(self, pkgid): apkpath = str(self.get_Path(pkgid)) apkfinal_path = str("tmp/" + pkgid + ".apk") self.adb_device.pull(apkpath.strip("\n"), apkfinal_path) cprint('[+] Checking AWS_SDK', 'blue') s = os.popen('/usr/bin/grep -i "aws-android-sdk" {0}'.format(apkfinal_path)).read() if 'matches' in s: cprint ("[!] This Application use AWS_SDK", 'blue') pass else: cprint ("[!] NO AWS_SDK FOUND", 'blue') os.remove(apkfinal_path) def is_AWSSDK(self, pkgid): apkfinal_path = os.path.join("./tmp/") + pkgid + '.apk' if re.search(b'(?i)aws-android-sdk', open(apkfinal_path,"rb").read()): self.asset.exist_sdk(pkgid, True) return True else: self.asset.exist_sdk(pkgid, False) return False
class Downloader: def __init__(self): self.gid = "" self.gwd = "" self.authSubToken = "" self.options = Options() self.options.headless = False self.chrome_driver = "./chromedriver" if platform.system() == "Windows": self.chrome_driver = "./chromedriver.exe" self.request_url = "https://accounts.google.com/b/0/DisplayUnlockCaptcha" self.apkfile_path = os.path.join("./tmp/") if os.path.exists(self.apkfile_path) == False: os.mkdir(self.apkfile_path) self.server = GooglePlayAPI('ko_KR', 'Asia/Seoul') self.devices_codenames = GooglePlayAPI.getDevicesCodenames() self.devices_codenames.reverse() # LOGIN def firstlogin(self, gid, gpw): self.gid = gid self.gpw = gpw #print(self.gid+" "+self.gpw) try: print('\nLogging in with email and password\n') self.server.login(self.gid, self.gpw, None, None) self.gsfId = self.server.gsfId self.authSubToken = self.server.authSubToken return self.secondlogin() except: #traceback.print_exc() return False def secondlogin(self): print( '\nNow trying secondary login with ac2dm token and gsfId saved\n') self.server = GooglePlayAPI('ko_KR', 'Asia/Seoul') self.server.login(None, None, self.gsfId, self.authSubToken) # call DOWNLOAD self.startdownload() return True def download_packages(self, package_list, logger=""): for package in package_list: self.startdownload(package, logger) logger.info(json.dumps({"step": "complete"})) def startdownload(self, pkgid="", logger=""): self.pkgid = pkgid if self.pkgid == "": return self.asset = Assets() self.asset.update_status(self.pkgid, "downloading") print('\nAttempting to download %s\n' % self.pkgid) logger.info(json.dumps({"step": "start", "package": self.pkgid})) try: fl = "" for codename in self.devices_codenames: self.server = GooglePlayAPI('ko_KR', 'Asia/Seoul', device_codename=codename) self.server.login(None, None, self.gsfId, self.authSubToken) try: fl = self.server.download(self.pkgid) break except Exception as e: continue if fl == "": raise Exception("No Device") with open(self.apkfile_path + self.pkgid + '.apk', 'wb') as apk_file: for chunk in fl.get('file').get('data'): apk_file.write(chunk) print('\n[+] Download successful\n') logger.info(json.dumps({"step": "finish", "package": self.pkgid})) self.asset.update_status(self.pkgid, "downloaded") logger.info(json.dumps({"step": "check", "package": self.pkgid})) self.check_aws_sdk_common(self.pkgid, logger) except: print("Unexpected error:", sys.exc_info()[0]) traceback.print_exc() #time.sleep(3) pass # time.sleep(1) def check_aws_sdk(self, pkgid): print('[+] Checking AWS_SDK') apkfinal_path = self.apkfile_path + pkgid + '.apk' s = os.popen('/usr/bin/grep -i "aws-android-sdk" {0}'.format( apkfinal_path)).read() if 'matches' in s: print("[!] This Application use AWS_SDK") pass else: print("[!] NO AWS_SDK FOUND") os.remove(apkfinal_path) def check_aws_sdk_common(self, pkgid, logger=""): print('[+] Checking AWS_SDK') apkfinal_path = self.apkfile_path + pkgid + '.apk' if re.search(b'(?i)aws-android-sdk', open(apkfinal_path, "rb").read()): print("[!] This Application use AWS_SDK") self.asset.exist_sdk(pkgid, True) logger.info( json.dumps({ "step": "result", "package": self.pkgid, "sdk": True })) pass else: print("[!] NO AWS_SDK FOUND") self.asset.exist_sdk(pkgid, False) logger.info( json.dumps({ "step": "result", "package": self.pkgid, "sdk": False }))
class Downloader: def __init__(self, socketio): self.gid = "" self.gwd = "" self.authSubToken = "" self.options = Options() self.options.headless = False self.chrome_driver = "./chromedriver" if platform.system() == "Windows": self.chrome_driver = "./chromedriver.exe" self.request_url = "https://accounts.google.com/b/0/DisplayUnlockCaptcha" self.apkfile_path = os.path.join("./apk/") if os.path.exists(self.apkfile_path) == False: os.mkdir(self.apkfile_path) self.locale = "en_US" #'ko_KR' self.timezone = None #'Asia/Seoul' self.devices_codenames = GooglePlayAPI.getDevicesCodenames() self.devices_codenames.reverse() self.proxy = {} self.socketio = socketio self.namespace = "/apk_download" def emit(self, t, data): self.socketio.emit(t, data, namespace=self.namespace) def set_locale(self, locale): self.locale = locale def set_proxy(self, proxy): self.proxy = proxy # LOGIN def firstlogin(self, gid, gpw): self.server = GooglePlayAPI(self.locale, self.timezone, proxies_config=self.proxy) self.gid = gid self.gpw = gpw for i in range(10): try: print("try : " + str(i + 1) + "/10") print('\nLogging in with email and password\n') self.server.login(self.gid, self.gpw, None, None) self.gsfId = self.server.gsfId self.authSubToken = self.server.authSubToken return self.secondlogin() except SecurityCheckError: #traceback.print_exc() print("SecurityCheckError") return False except Exception: time.sleep(0.5) pass print("UNKNOWNERROR") return False def secondlogin(self): print( '\nNow trying secondary login with ac2dm token and gsfId saved\n') self.server = GooglePlayAPI(self.locale, self.timezone, proxies_config=self.proxy) self.server.login(None, None, self.gsfId, self.authSubToken) return True def download_packages(self, package_list): for package in package_list: self.startdownload(package) def startdownload(self, pkgid): self.pkgid = pkgid self.asset = Assets() self.asset.update_status(self.pkgid, "downloading") print('\nAttempting to download %s\n' % self.pkgid) self.emit("download_step", {"step": "start", "package": self.pkgid}) try: fl = "" for codename in self.devices_codenames: self.server = GooglePlayAPI(self.locale, self.timezone, device_codename=codename, proxies_config=self.proxy) self.server.login(None, None, self.gsfId, self.authSubToken) try: fl = self.server.download(self.pkgid) if fl == "": raise Exception("No Device") with open(self.apkfile_path + self.pkgid + '.apk', 'wb') as apk_file: for chunk in fl.get('file').get('data'): apk_file.write(chunk) print('\n[+] Download successful\n') self.emit("download_step", { "step": "finish", "package": self.pkgid }) self.asset.update_status(self.pkgid, "downloaded") self.emit("download_step", { "step": "check", "package": self.pkgid }) self.check_aws_sdk_common(self.pkgid) break except requests.exceptions.SSLError: self.emit("download_step", { "step": "error", "msg": "sslerror", "package": self.pkgid }) print("requests.exceptions.SSLError") break except Exception: traceback.print_exc() continue except: print("Unexpected error:", sys.exc_info()[0]) traceback.print_exc() #time.sleep(3) pass # time.sleep(1) def check_aws_sdk(self, pkgid): print('[+] Checking AWS_SDK') apkfinal_path = self.apkfile_path + pkgid + '.apk' s = os.popen('/usr/bin/grep -i "aws-android-sdk" {0}'.format( apkfinal_path)).read() if 'matches' in s: print("[!] This Application use AWS_SDK") pass else: print("[!] NO AWS_SDK FOUND") os.remove(apkfinal_path) def check_aws_sdk_common(self, pkgid): print('[+] Checking AWS_SDK') apkfinal_path = self.apkfile_path + pkgid + '.apk' if re.search(b'(?i)aws-android-sdk', open(apkfinal_path, "rb").read()): print("[!] This Application use AWS_SDK") self.asset.exist_sdk(pkgid, True) self.emit("download_step", { "step": "result", "package": self.pkgid, "sdk": True }) pass else: print("[!] NO AWS_SDK FOUND") self.asset.exist_sdk(pkgid, False) self.emit("download_step", { "step": "result", "package": self.pkgid, "sdk": False })