Example #1
0
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)
Example #3
0
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
Example #4
0
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)
Example #6
0
 def init(self, filepath, filename):
     self.apkfilepath = filepath
     self.fileName = filename
     self._apk = apk.APK(filepath)
     return True
Example #7
0
#!/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)
Example #8
0
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) 
Example #9
0
def read_app(apk_path):
    read_app_path = apk_path
    app = apk.APK(read_app_path)
    return app
Example #10
0
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
Example #11
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()
Example #12
0
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('=================')