def extractPermissions(extractedDir, selectedApks): # open csv file resultFile = open(OUTPUT,'wb') error = open("permission_extraction_log.txt",'wb') wr = csv.writer(resultFile, delimiter=',') #os.chdir("pulled-apks") for filename in selectedApks: #reading and parsing apk file # print (join(extractedDir, filename)) try: #print extractedDir, filename ap = apk.APK(join(extractedDir, filename)) package = ap.get_package().encode("utf-8") androidversion_name = ap.get_androidversion_name().encode("utf-8") except: error.write(filename) error.write('\n') else: permissions= ap.get_permissions() PCount = len(permissions) wr.writerow(permissions + [filename,package,androidversion_name,PCount]) resultFile.close() error.close()
def do_add(apkfile): ap = apk.APK(apkfile) pkg_name = ap.get_package() version_name = ap.get_androidversion_name() version_code = ap.get_androidversion_code() mcpe_path = None with zipfile.ZipFile(apkfile, 'r') as z: for name in z.namelist(): if name.startswith("lib/") and name.endswith("/libminecraftpe.so"): arch = name[4:-18] mcpe_path = os.getcwd() + "/libminecraftpe.so" src = z.open(name) dest = open(mcpe_path, "wb") with src, dest: shutil.copyfileobj(src, dest) if mcpe_path == None: raise Exception("Invalid .apk specified") return so_info = mcpeinfocheck.get_so_info(mcpe_path) print(apkfile, so_info) versions = versiondb.VersionList(".") versions.add_version(version_code, version_name, so_info["is_beta"], so_info["protocol_ver"]) versions.save() os.remove(mcpe_path)
def handle_add_apk_job(job_source, job_uuid, job_desc, job_dir, job_logger): apks = [(f["name"], os.path.join(job_dir, f["path"])) for f in job_desc["apks"]] main_apk_path = next((path for (name, path) in apks if name == "main")) main_apk = apk.APK(main_apk_path) version_code = int(main_apk.get_androidversion_code()) version_name = main_apk.get_androidversion_name() job_logger.info( f"Processing APK archive set for version: {version_name} ({version_code})" ) assert version_code == job_desc["versionCode"] job_logger.info("Archiving APK archive set") archive_base_name = os.path.join( re.match("\d+\.\d+", version_name).group(0) + "x", version_name) for (name, path) in apks: archive_file( os.path.join(archive_base_name, name + "_" + str(version_code) + ".apk"), path, "apk") job_logger.info("Executing IDA for all required files") for (apk_name, apk_path) in apks: with zipfile.ZipFile(apk_path, 'r') as z: for name in z.namelist(): if name.startswith("lib/") and name.endswith( "/libminecraftpe.so"): arch_name = name[4:-len("/libminecraftpe.so")] so_filename = "libminecraftpe_" + str( version_code) + "_" + arch_name extract_path = os.path.join(job_dir, so_filename + ".so") job_logger.info( f"Extracting native library: {extract_path} from {apk_name}:{name}" ) with z.open(name) as src, open(extract_path, "wb") as dest: shutil.copyfileobj(src, dest) job_logger.info("Creating IDA job") is_64_bit = arch_name == "arm64-v8a" or arch_name == "x86_64" archive_path = os.path.join( archive_base_name, so_filename + (".i64" if is_64_bit else ".idb") + ".tar.xz") create_ida_job(job_source, extract_path, archive_path, "apk_idb", is_64_bit, True) job_logger.info("Deleting the extracted file") os.remove(extract_path) pass
def print_permission(): f.write( """<table><tr><h1 style="color:red;">Printing the permissions of each app :</h1></tr> <tr> <th>App Names</th> <th>permissions</th> </tr>""") for filename in os.listdir(path): if "apk" in filename: f.write("<tr>") f.write("""<th>""" + filename + """</th>""") perm = apk.APK(path + filename) f.write("""<th>""" + str(perm.get_permissions()) + """</th>""") f.write("</tr>") f.write("""</table>""")
] result = open("apk_result.csv", "w") if len(list_file) == 0: print "HELP: you need to put it inside a directory that contain multiple .apk files" else: print "####################################################################" print "apk_mapper v 1.0: tools to mapping multiple apk manifest file for analysis" print "PLEASE DONT change the name of the python file !" print "CREATED BY: williams" print "####################################################################" writer = csv.writer(result) #put a header in csv writer.writerow(header) for x in list_file: file_ext = magic.from_file(x, mime=True) if file_ext == "application/zip": result = [] app = apk.APK(x) result.append(app.get_package()) #print app name result.append(app.get_androidversion_name()) #print app version result.append(check_backup(app)) result.append(list_permission(app)) #print permission result.append(list_activities(app)) #print activity result.append(list_provider(app)) #print provider result.append(list_service(app)) result.append(list_receiver(app)) writer.writerow(result)
def init(self, filepath, filename): self.apkfilepath = filepath self.fileName = filename self._apk = apk.APK(filepath) return True
#!/usr/bin/env python # -*- coding: utf-8 -*- import axmlparserpy.apk as apk info = apk.APK('./driver-envrelease-release-1.3.0.apk') print(info.get_package()) print(info.get_androidversion_name()) print(info.get_androidversion_code()) print(info.androidversion) print(info.androidversion_name) print(info.androidversion_code)
from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import helpers from googleplay_api.googleplay import GooglePlayAPI import axmlparserpy.apk as apk ap = apk.APK('Apps/temp.apk') request =ap.get_package() # read config from config.py config = GooglePlayAPI.read_config() # connect to GooglePlayStore api = GooglePlayAPI(config['ANDROID_ID']) api.login(config['GOOGLE_LOGIN'], config['GOOGLE_PASSWORD'], config['AUTH_TOKEN']) message = api.search(request, 1, None) helpers.print_header_line() doc = message.doc[0] for c in doc.child: helpers.print_result_line(c)
def read_app(apk_path): read_app_path = apk_path app = apk.APK(read_app_path) return app
ws = wb['DATA'] get_index = {} for i in range(4, ws.max_column): s = str(ws.cell(row=1, column=i).value).upper() get_index[s] = i - 4 X = np.genfromtxt('Training/datasetX.csv', delimiter=',') Y = np.genfromtxt('Training/datasetY.csv', delimiter=',') P = np.genfromtxt('Training/Perdiction.csv', delimiter=',') clf = GaussianNB() clf.fit(X, Y) GaussianNB(priors=None) ap = apk.APK('Apps/jio.apk') per = ap.get_permissions() permissions = [] for line in per: s = '' for i in reversed(line): if i != '.': s += i else: break s = s[::-1] permissions.append(s) for i in permissions: if get_index.get(i) != None: P[get_index.get(i)] = 1.0
#!/usr/bin/env python2.7 #coding:utf-8 import axmlparserpy.apk as apk ap = apk.APK('_PATH_TO_APK') print ap.get_package() print ap.get_androidversion_name()
import os, sys import axmlparserpy.apk as apk diretorio = str(sys.argv[1]) #diretorio = "/home/pulgatti/Dropbox/Doutorado/Materias/CI1030-ERE2-CienciaDeDados/APK/" # Lista o conteúdo do diretório dirs = os.listdir(diretorio) lista_apk = [] # loop que lê o diretório informado e para todas as .apk presentes cria uma lista das propriedades # a lista possui o nome do APK e uma lista com as permissões for file in dirs: if (file[-4:] == '.apk'): ap = apk.APK(diretorio + "/" + file) lista_apk.append([ap.get_package(), ap.get_permissions(), '']) #Caso se queira recuperar o arquivo AndroidManifest.xml em um formato legível de dentro do APK #from axmlparserpy import axmlprinter #from xml.dom import minidom #def main(): #ap = axmlprinter.AXMLPrinter(open('dirs = os.listdir( diretorio + "/" + AndroidManifest.xml', 'rb').read()) #buff = minidom.parseString(ap.getBuff()).toxml() #print(buff) # Permissões que todos as apks possuem # inicializa com a lista do primeiro apk, como é uma intersecção esta lista só diminui perm_glo = lista_apk[0][1:2][0] print('=================')