示例#1
0
def test():
    apk_path = "/home/sym/Downloads/share/11/davm/app/com.thecarousell.Carousell.apk"
    #apk_path = "/home/sym/Downloads/share/11/davm/app/com.tmob.AveaOIM.apk"
    apkf = APK(apk_path)
    # print apkf.cert_text
    # print apkf.file_md5
    # print apkf.cert_md5
    print apkf.file_size
    # print apkf.androidversion
    print apkf.package
    # print apkf.get_android_manifest_xml()
    # print apkf.get_android_manifest_axml()
    print apkf.is_valid_APK()
    # print apkf.get_filename()
    # print apkf.get_package()
    # print apkf.get_androidversion_code()
    print apkf.get_androidversion_name()
    # print apkf.get_max_sdk_version()
    # print apkf.get_min_sdk_version()
    # print apkf.get_target_sdk_version()
    print apkf.get_libraries()
    #print apkf.get_files()
    # # pip install python-magic
    # print apkf.get_files_types()
    # # print apkf.get_dex()
    print apkf.get_main_activity()
示例#2
0
def test():
    apk_path = "/home/tdoly/topitme.apk"
    apkf = APK(apk_path)
    print apkf.cert_text
    print apkf.file_md5
    print apkf.cert_md5
    print apkf.file_size
    print apkf.androidversion
    print apkf.get_min_sdk_version()
    print apkf.package
示例#3
0
def test():
    apk_path = "/home/tdoly/topitme.apk"
    apkf = APK(apk_path)
    print apkf.cert_text
    print apkf.file_md5
    print apkf.cert_md5
    print apkf.file_size
    print apkf.androidversion
    print apkf.get_min_sdk_version()
    print apkf.package
示例#4
0
def test():
    apk_path = "00ea77eb6f076fe87adb3cd9d39bcb3e8e487529faed7c8853c5a821be801e0a.apk"
    apkf = APK(apk_path)
    #print apkf.cert_text
    print apkf.file_md5
    #print apkf.cert_md5
    #print apkf.file_size
    #print apkf.androidversion
    #print apkf.package
    #print apkf.get_android_manifest_xml()
    #print apkf.get_android_manifest_axml()
    #print apkf.is_valid_APK()
    #print apkf.get_filename()
    #print apkf.get_package()
    #print apkf.get_androidversion_code()
    #print apkf.get_androidversion_name()
    #print apkf.get_max_sdk_version()
    #print apkf.get_min_sdk_version()
    #print apkf.get_target_sdk_version()
    #print apkf.get_libraries()
    #print apkf.get_files()
    # pip install python-magic
    #print apkf.get_files_types()
    #print apkf.get_dex()
    #print apkf.get_main_activity()
    print apkf.get_activities()
    print apkf.get_services()
    print apkf.get_receivers()
示例#5
0
def clearlog(args):
    pkg = APK(args.apk).get_package()
    devices = args.serialnos.split(',')
    DEVICE_LOG = DEVICE_LOG_BASE + pkg + '.log'
    for d in devices:
        subprocess.check_call(['adb', '-s', d, 'shell', 'rm', DEVICE_LOG])
    print('done')
示例#6
0
def test():
    apk_path = "../test.apk"
    #apk_path = "/home/sym/Downloads/share/11/davm/app/com.tmob.AveaOIM.apk"
    apkf = APK(apk_path)
    
    print(f"{apkf.get_app_name()= }\n")
    print(f"{apkf.androidversion= }\n")
    print(f"{apkf.filename= }\n")
    print(f"{apkf.get_activities()= }\n")
    print(f"{apkf.get_androidversion_code()= }\n")
    print(f"{apkf.get_androidversion_name()= }\n")
    print(f"{apkf.get_declared_permissions()= }\n")
    print(f"{apkf.get_declared_permissions_details()= }\n")
    print(f"{apkf.get_details_permissions()= }\n")
    print(f"{apkf.get_effective_target_sdk_version()= }\n")
    print(f"{apkf.get_libraries()= }\n")
    print(f"{apkf.get_main_activities()= }\n")
    print(f"{apkf.get_main_activity()= }\n")
    print(f"{apkf.get_max_sdk_version()= }\n")
    print(f"{apkf.get_min_sdk_version()= }\n")
    print(f"{apkf.get_package()= }\n")
    print(f"{apkf.get_providers()= }\n")
    print(f"{apkf.get_receivers()= }\n")
    print(f"{apkf.get_requested_aosp_permissions()= }\n")
    print(f"{apkf.get_requested_aosp_permissions_details()= }\n")
    print(f"{apkf.get_requested_permissions()= }\n")
    print(f"{apkf.get_requested_third_party_permissions()= }\n")
    print(f"{apkf.get_services()= }\n")
    print(f"{apkf.get_uses_implied_permission_list()= }\n")
    print(f"{apkf.is_signed()= }\n")
    print(f"{apkf.is_valid_APK()= }\n")
    print(f"{apkf.is_wearable()= }\n")
示例#7
0
def install(args):
    pkg = APK(args.apk).get_package()
    serialnos = args.serialnos.split(',')
    print(
        'This command is not useful for MIUI devices; please click on the installation popup dialog and manually grant WRITE_EXTERNAL_STROAGE permission'
    )
    print('1. install processed APK')
    for d in serialnos:
        subprocess.check_call(['adb', '-s', d, 'uninstall', pkg])
        subprocess.check_call(['adb', '-s', d, 'install',
                               args.apk])  # Note: Xiaomi will pop up a dialog
    print('APK installed')

    print('2. grant permissions for logging')
    for d in serialnos:
        grantWrite = [
            'adb', '-s', d, 'shell', 'pm', 'grant', pkg,
            'android.permission.WRITE_EXTERNAL_STORAGE'
        ]
        print(" ".join(grantWrite))
        subprocess.check_call([
            'adb', '-s', d, 'shell', 'pm', 'grant', pkg,
            'android.permission.WRITE_EXTERNAL_STORAGE'
        ])
        grantRead = [
            'adb', '-s', d, 'shell', 'pm', 'grant', pkg,
            'android.permission.READ_EXTERNAL_STORAGE'
        ]
        print(" ".join(grantRead))
        subprocess.check_call([
            'adb', '-s', d, 'shell', 'pm', 'grant', pkg,
            'android.permission.READ_EXTERNAL_STORAGE'
        ])
    print('permission granted')
示例#8
0
文件: admin.py 项目: jindongh/vps
    def save_model(self, request, obj, form, change):
        zipFile=zipfile.ZipFile(obj.apk)
        #read package and version
        manifest=zipFile.read('AndroidManifest.xml')
        parser = APK(manifest)
        obj.package = parser.getPackage()
        obj.version = parser.getVersion()

        #save
        obj.save()
        
        #save icon
        icon=zipFile.read('res/drawable-hdpi/ic_launcher.png')
        outIcon=os.path.join(os.path.dirname(obj.apk.path), obj.package+'.png')
        fp=open(outIcon, 'w')
        fp.write(icon)
        fp.close()
def test():
    apk_path = 'alleria_1_7_2.apk'
    apkf = APK(apk_path)
    # print apkf.cert_text
    # print apkf.file_md5
    # print apkf.cert_md5
    print apkf.file_size
    print apkf.file_sha1
    # print apkf.androidversion
    # print apkf.package
    # print apkf.get_android_manifest_xml()
    # print apkf.get_android_manifest_axml()
    # print apkf.is_valid_APK()
    # print apkf.get_filename()
    # print apkf.get_package()
    # print apkf.get_androidversion_code()
    print apkf.get_androidversion_name()
示例#10
0
def write_to_csv(apk_paths):

    for file_path in apk_paths:
        obj = APK(file_path)
        obj = APK(read(file_path), raw=True)

        list_of_obtained_permissions = obj.get_permissions()
        #print(list_of_obtained_permissions)

        result = []
        for permission in list_of_permissions:
            if permission in list_of_obtained_permissions:
                result.append(1)
            else:
                result.append(0)

        package_name = obj.get_package()
        result.append(package_name)

        package_size = obj.file_size
        result.append(package_size)

        result.append(1)

        with open("./saurabh_dataset.csv", "a") as f:
            writer = csv.writer(f, dialect='excel')
            writer.writerow(result)
示例#11
0
def test():
    apk_path = "/home/tdoly/com.android.vending_090150.apk"
    apkf = APK(apk_path)
    print apkf.cert_text
    print apkf.file_md5
    print apkf.cert_md5
    print apkf.file_size
    print apkf.androidversion
    print apkf.package
    print apkf.get_android_manifest_xml()
    print apkf.get_android_manifest_axml()
    print apkf.is_valid_APK()
    print apkf.get_filename()
    print apkf.get_package()
    print apkf.get_androidversion_code()
    print apkf.get_androidversion_name()
    print apkf.get_max_sdk_version()
    print apkf.get_min_sdk_version()
    print apkf.get_target_sdk_version()
    print apkf.get_libraries()
    print apkf.get_files()
    # pip install python-magic
    print apkf.get_files_types()
    # print apkf.get_dex()
    print apkf.get_main_activity()
    print apkf.get_activities()
    print apkf.get_services()
    print apkf.get_receivers()
    print apkf.get_providers()
    print apkf.get_permissions()
示例#12
0
def test():
    apk_path = "wan.ke.ji-V1.5-1500.apk"
    apkf = APK(apk_path)
    print apkf.cert_text
    print apkf.file_md5
    print apkf.cert_md5
    print apkf.file_size
    print apkf.androidversion
    print apkf.package
    print apkf.get_android_manifest_xml()
    print apkf.get_android_manifest_axml()
    print apkf.is_valid_APK()
    print apkf.get_filename()
    print apkf.get_package()
    print apkf.get_androidversion_code()
    print apkf.get_androidversion_name()
    print apkf.get_max_sdk_version()
    print apkf.get_min_sdk_version()
    print apkf.get_target_sdk_version()
    print apkf.get_libraries()
    print apkf.get_files()
    # pip install python-magic
    print apkf.get_files_types()
    # print apkf.get_dex()
    print apkf.get_main_activity()
    print apkf.get_activities()
    print apkf.get_services()
    print apkf.get_receivers()
    print apkf.get_providers()
    print apkf.get_permissions()

    print apkf.show()
    apkf.parse_icon(icon_path='.')
示例#13
0
def analyze(args):
    access_token = _load_token()
    if access_token is None:
        print('Please login to AppetizerIO first')
        return 1
    authorization = 'Bearer ' + access_token
    pkg = APK(args.apk).get_package()
    log_zip = pkg + '.log.zip'
    serialnos = args.serialnos.split(',')
    DEVICE_LOG = DEVICE_LOG_BASE + pkg + '.log'
    token = None
    print('0. harvest and compress device logs')
    with zipfile.ZipFile(log_zip, 'w') as myzip:
        for d in serialnos:
            subprocess.check_call(
                ['adb', '-s', d, 'pull', DEVICE_LOG, d + '.log'])
            if args.clear:
                subprocess.check_call(
                    ['adb', '-s', d, 'shell', 'rm', DEVICE_LOG])
            myzip.write(d + '.log')

    print('1. request analysis from the server')
    r = requests.post(API_BASE + 'api/v1/insight/analyze',
                      headers={'Authorization': authorization},
                      data={'pkg_name': pkg},
                      verify=False)
    r_json = r.json()
    print(r_json)
    if r.status_code != 200:
        print(r_json['msg'])
        return 1
    token = r_json['token']
    key = r_json['key']

    print('2. upload log files')
    print('pkg: ' + pkg)
    print('log file: ' + log_zip)
    print('uploading......')
    ret, info = put_file(token, key, log_zip)
    if (ret is None or 'code' not in ret or ret['code'] != 200):
        print('upload error')
        return 1

    print('3. server analyzing')
    r_json = None
    while True:
        r = requests.get(API_BASE + 'api/v1/insight/report',
                         headers={'Authorization': authorization},
                         params={'key': key})
        r_json = r.json()
        if r_json['code'] != 200:
            print(r_json)
            return 1
        if r_json['state'] == 'return_upload_auth' or r_json[
                'state'] == 'upload_finish' or r_json[
                    'state'] == 'server_download':
            print('waiting...... server is downloading log')
        elif r_json['state'] == 'analyzing':
            print('waiting...... server is analyzing')
        elif r_json['state'] == 'analyze_success':
            print('waiting...... server is uploading the report')
        elif r_json['state'] == 'server_upload_success':
            print('server has generated and uploaded the report')
            break
        else:
            print(r_json)
            print('server fails to analyze the logs')
            return 1
        time.sleep(ANXIETY)
    download_url = r_json['download_url']
    print(download_url)

    print('4. download report')
    r = requests.get(download_url)
    if r.status_code != 200:
        print('download failed')
        return 1
    print('download completed')
    with open(args.report_path, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024000):
            f.write(chunk)

    print('5. cleanup')
    os.remove(log_zip)
    for d in serialnos:
        os.remove(d + '.log')

    print('All done! Report file stored at: ' + args.report_path)
    if not args.clear:
        print(
            'Please remember to delete old logs with clearlog command to avoid repeated analysis'
        )
示例#14
0
def process(args):
    access_token = _load_token()
    if access_token is None:
        print('Please login to AppetizerIO first')
        return 1
    authorization = 'Bearer ' + access_token
    original_name = os.path.basename(args.apk)
    pkg = APK(args.apk).get_package()
    token = None
    try:
        subprocess.check_call(['adb', 'version'])
    except:
        print('adb not available')
        return 1
    print('0. request for Appetizer Insights quality monitoring module')
    r = requests.post(API_BASE + 'api/v1/insight/upload',
                      headers={'Authorization': authorization},
                      verify=False)
    r_json = r.json()
    print(r_json)
    if r.status_code != 200:
        print(r_json['msg'])
        return 1
    token = r_json['token']
    key = r_json['key']

    print('1. upload APK file')
    print('apk: ' + args.apk)
    print('pkg: ' + pkg)
    print('upload......')
    ret, info = put_file(token, key, args.apk)
    print(ret)
    if ret is None or 'code' not in ret or ret['code'] != 200:
        print('upload error')
        return 1

    print('2. wait for the APK to be processed')
    r_json = None
    while True:
        r = requests.get(API_BASE + 'api/v1/insight/processed_app',
                         headers={'Authorization': authorization},
                         params={'key': key})
        r_json = r.json()
        if r_json['code'] != 200:
            print(r_json)
            return 1
        if r_json['state'] == 'return_upload_auth' or r_json[
                'state'] == 'upload_finish' or r_json[
                    'state'] == 'server_download':
            print('waiting...... server is downloading the APK')
        elif r_json['state'] == 'rewriting':
            print('waiting...... server is processing the APK')
        elif r_json['state'] == 'rewrite_success':
            print('waiting...... server is uploading the processed APK')
        elif r_json['state'] == 'server_upload_success':
            print('server has completed processing the APK')
            break
        else:
            print(r_json)
            print('server fails to process the APK')
            return 1
        time.sleep(ANXIETY)
    download_url = r_json['download_url']
    print(download_url)

    print('3. download processed APK')
    r = requests.get(download_url)
    if r.status_code != 200:
        print('download failed')
        return 1
    print('download completed')
    with open(args.processed_apk, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024000):
            f.write(chunk)
import pickle
import pprint
import pandas as pd
import numpy
from numpy.random import randint

with open('features_list.txt', 'r') as f:
    features_list = ast.literal_eval(
        f.read()
    )  # features_list is list of 456 features obtained from previous analysis and stored in txt file
count = 0
for filepath in glob.iglob("/home/aman/tsting/*"):
    df = pd.DataFrame(columns=features_list)
    current = []  # list for this particular app's all features
    try:  # try is necessary as some apps through error on calling below functions and remaining apps are not analyzed
        apkf = APK(filepath)
        current = current + apkf.get_activities() + apkf.get_services(
        ) + apkf.get_receivers() + apkf.get_providers() + apkf.get_permissions(
        )
    except:
        continue
    dict = {}
    current = list(set(current))
    for i in features_list:
        dict[i] = 0
    for i in current:
        if i in dict:
            dict[
                i] += 1  # this increments the count of a particular feature in an app
    for i in features_list:
        df.at[count, i] = dict[i]
示例#16
0
def test():
    apk_path = "/users/ozgumusy/AndroidStudioProjects/RijksClient/app/app-release.apk"
    apkf = APK(apk_path)
    print apkf.cert_text
    print apkf.file_md5
    print apkf.cert_md5
    print apkf.file_size
    print apkf.androidversion
    print apkf.package
    print apkf.get_android_manifest_xml()
    print apkf.get_android_manifest_axml()
    print apkf.is_valid_APK()
    print apkf.get_filename()
    print apkf.get_package()
    print apkf.get_androidversion_code()
    print apkf.get_androidversion_name()
    print apkf.get_max_sdk_version()
    print apkf.get_min_sdk_version()
    print apkf.get_target_sdk_version()
    print apkf.get_libraries()
    print apkf.get_files()
    print apkf.get_files_types()
    #print apkf.get_dex()
    print apkf.get_main_activity()
    print apkf.get_activities()
    print apkf.get_services()
    print apkf.get_receivers()
    print apkf.get_providers()
    print apkf.get_permissions()
示例#17
0
try:
    # change the paths to the relevant apps to be compared
    apk1_path = "./app1.apk"
    apk2_path = "./app2.apk"

    app1 = apk1_path.split('/')[-1]
    app2 = apk2_path.split('/')[-1]

    # insert apps into database
    cur.execute("INSERT OR IGNORE INTO APPS VALUES (?,?,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "
                "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "
                "NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)",
                (app1, app2))

    apk1 = APK(apk1_path)
    apk2 = APK(apk2_path)

    # ----------version-------------------
    a_v1 = apk1.get_androidversion_name()
    a_v2 = apk1.get_androidversion_code()

    b_v1 = apk2.get_androidversion_name()
    b_v2 = apk2.get_androidversion_code()

    cur.execute(
        'Update apps set app1_version_name = ?, app1_version_code = ?, app2_version_name = ?, app2_version_code = ? '
        'where app1_name = ? and app2_name = ?', (a_v1, a_v2, b_v1, b_v2, app1, app2))

    # ----------cert-------------------
    a_c = apk1.cert_text
示例#18
0
def test():
    apk_path = r"C:\Users\heguofeng\Downloads\com.tencent.mm_6.7.3_liqucn.com.apk"
    apkf = APK(apk_path)
    print(apkf.cert_text)
    print( apkf.file_md5)
    print( apkf.cert_md5)
    print( apkf.file_size)
    print( apkf.androidversion)
    print( apkf.package)
    print( apkf.get_android_manifest_xml())
    print( apkf.get_android_manifest_axml())
    print( apkf.is_valid_APK())
    print( apkf.get_filename())
    print( apkf.get_package())
    print( apkf.get_androidversion_code())
    print( apkf.get_androidversion_name())
    print( apkf.get_max_sdk_version())
    print( apkf.get_min_sdk_version())
    print( apkf.get_target_sdk_version())
    print( apkf.get_libraries())
    print( apkf.get_files())
    # pip install python-magic
    print( apkf.get_files_types())
    # print( apkf.get_dex()
    print( apkf.get_main_activity())
    print( apkf.get_activities())
    print( apkf.get_services())
    print( apkf.get_receivers())
    print( apkf.get_providers())
    print( apkf.get_permissions())
示例#19
0
for i in joinedlist:
    finaldict[i] = [0, 0]
    gooddict[i] = 0
    maldict[i] = 0

count = 0
good_count = 0
for filepath in glob.iglob(
        '/home/aman/ANDROID_GOODWARE/*'
):  # copy all goodware apps to Documents/apks and then run this
    # print filepath

    currentlist = []
    apk_path = filepath
    try:
        apkf = APK(apk_path)
        currentlist = apkf.get_main_activity()
        if (isinstance(currentlist, basestring)):
            currentlist = [str(currentlist)]
        currentlist = list(set(currentlist))

        for i in currentlist:
            key = i
            if key in gooddict:
                gooddict[key] += 1

        good_count += 1
        print good_count
    except:
        continue
    # now for intents