Package modules :: Package processing :: Module googleplay
[hide private]
[frames] | no frames]

Source Code for Module modules.processing.googleplay

 1  # Copyright (C) 2010-2013 Claudio Guarnieri. 
 2  # Copyright (C) 2014-2016 Cuckoo Foundation. 
 3  # This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org 
 4  # See the file 'docs/LICENSE' for copying permission. 
 5  # Originally contributed by Check Point Software Technologies, Ltd. 
 6   
 7  import logging 
 8  import os 
 9  from zipfile import BadZipfile 
10   
11  from lib.cuckoo.common.objects import File 
12  from lib.cuckoo.common.abstracts import Processing 
13  from lib.cuckoo.common.exceptions import CuckooProcessingError 
14   
15  try: 
16      from androguard.core.bytecodes.apk import APK 
17      HAVE_ANDROGUARD = True 
18  except ImportError: 
19      HAVE_ANDROGUARD = False 
20   
21  try: 
22      from lib.api.googleplay.googleplay import GooglePlayAPI 
23      HAVE_GOOGLEPLAY = True 
24  except ImportError: 
25      HAVE_GOOGLEPLAY = False 
26   
27  log = logging.getLogger(__name__) 
28   
29 -class GooglePlay(Processing):
30 """Google Play information about the analysis session""" 31
32 - def run(self):
33 """Run Google play unofficial python api the get the google play information 34 @return: list of google play features 35 """ 36 self.key = "googleplay" 37 googleplay = {} 38 39 if not HAVE_GOOGLEPLAY: 40 log.error("Unable to import the GooglePlay library, has it been " 41 "installed properly?") 42 return 43 44 if not HAVE_ANDROGUARD: 45 log.error("Could not find the Androguard library, please install " 46 "it. (`pip install androguard`)") 47 48 if ("file" not in self.task["category"]): 49 return 50 51 f = File(self.task["target"]) 52 if f.get_name().endswith((".zip", ".apk")) or "zip" in f.get_type(): 53 if not os.path.exists(self.file_path): 54 raise CuckooProcessingError("Sample file doesn't exist: \"%s\"" % self.file_path) 55 56 android_id = self.options.get("android_id") 57 google_login = self.options.get("google_login") 58 google_password = self.options.get("google_password") 59 # auth_token = self.options.get("auth_token", None) 60 61 if not android_id and not google_login and not google_password: 62 raise CuckooProcessingError("Google Play Credentials not configured, skip") 63 64 try: 65 a = APK(self.file_path) 66 if a.is_valid_APK(): 67 package = a.get_package() 68 # Connect 69 api = GooglePlayAPI(android_id) 70 api.login(google_login, google_password, None) 71 72 # Get the version code and the offer type from the app details 73 app_data = api.details(package) 74 app_detail = app_data.docV2.details.appDetails 75 76 if not app_detail.installationSize: 77 return googleplay 78 79 googleplay["title"] = app_detail.title 80 googleplay["app_category"] = app_detail.appCategory._values 81 googleplay["version_code"] = app_detail.versionCode 82 googleplay["app_type"] = app_detail.appType 83 googleplay["content_rating"] = app_detail.contentRating 84 googleplay["developer_email"] = app_detail.developerEmail 85 googleplay["developer_name"] = app_detail.developerName 86 googleplay["developer_website"] = app_detail.developerWebsite 87 googleplay["installation_size"] = app_detail.installationSize 88 googleplay["num_downloads"] = app_detail.numDownloads 89 googleplay["upload_date"] = app_detail.uploadDate 90 googleplay["permissions"] = app_detail.permission._values 91 except (IOError, OSError, BadZipfile) as e: 92 raise CuckooProcessingError("Error opening file %s" % e) 93 94 return googleplay
95