예제 #1
0
 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
예제 #2
0
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
예제 #3
0
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
                }))
예제 #4
0
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
            })