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()
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
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()
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')
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")
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')
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()
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)
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()
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='.')
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' )
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]
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()
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
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())
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