-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenertal_permissions_vector.py
106 lines (95 loc) · 5.96 KB
/
genertal_permissions_vector.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#/usr/bin/python
#coding=utf-8
import sys,os
from xml.dom import minidom
import MySQLdb
#all permissions
#data source https://developer.android.com/reference/android/Manifest.permission.html
permissions = [
"ACCESS_CHECKIN_PROPERTIES","ACCESS_COARSE_LOCATION","ACCESS_FINE_LOCATION","ACCESS_LOCATION_EXTRA_COMMANDS",
"ACCESS_NETWORK_STATE","ACCESS_NOTIFICATION_POLICY","ACCESS_WIFI_STATE","ACCOUNT_MANAGER","ADD_VOICEMAIL",
"ALLOCATE_AGGRESSIVE","BATTERY_STATS","BIND_ACCESSIBILITY_SERVICE","AccessibilityService","BIND_APPWIDGET","BIND_AUTO_FILL",
"AutoFillService","BIND_CARRIER_MESSAGING_SERVICE","BIND_CARRIER_SERVICES","BIND_CARRIER_SERVICES","BIND_CHOOSER_TARGET_SERVICE",
"ChooserTargetService","BIND_CONDITION_PROVIDER_SERVICE","ConditionProviderService","BIND_DEVICE_ADMIN","BIND_DREAM_SERVICE",
"DreamService","BIND_INCALL_SERVICE","InCallService","BIND_INPUT_METHOD","InputMethodService","BIND_MIDI_DEVICE_SERVICE",
"MidiDeviceService","BIND_NFC_SERVICE","HostApduService","OffHostApduService","BIND_NOTIFICATION_LISTENER_SERVICE",
"NotificationListenerService","BIND_PRINT_SERVICE","PrintService","BIND_QUICK_SETTINGS_TILE","BIND_REMOTEVIEWS","RemoteViewsService",
"BIND_SCREENING_SERVICE","CallScreeningService","BIND_TELECOM_CONNECTION_SERVICE","ConnectionService","BIND_TEXT_SERVICE",
"BIND_TV_INPUT","TvInputService","BIND_VISUAL_VOICEMAIL_SERVICE","VisualVoicemailService","BIND_VOICE_INTERACTION",
"VoiceInteractionService","BIND_VPN_SERVICE","VpnService","BIND_VR_LISTENER_SERVICE","VrListenerService","BIND_WALLPAPER",
"WallpaperService","BLUETOOTH","BLUETOOTH_ADMIN","BLUETOOTH_PRIVILEGED","BODY_SENSORS","BROADCAST_PACKAGE_REMOVED",
"BROADCAST_SMS","BROADCAST_STICKY","BROADCAST_WAP_PUSH","CALL_PHONE","CALL_PRIVILEGED","CAMERA","CAPTURE_AUDIO_OUTPUT",
"CAPTURE_SECURE_VIDEO_OUTPUT","CAPTURE_VIDEO_OUTPUT","CHANGE_COMPONENT_ENABLED_STATE","CHANGE_CONFIGURATION",
"CHANGE_NETWORK_STATE","CHANGE_WIFI_MULTICAST_STATE","CHANGE_WIFI_STATE","CLEAR_APP_CACHE","CONTROL_LOCATION_UPDATES",
"DELETE_CACHE_FILES","DELETE_PACKAGES","DIAGNOSTIC","DISABLE_KEYGUARD","DUMP","EXPAND_STATUS_BAR","FACTORY_TEST",
"GET_ACCOUNTS","GET_ACCOUNTS_PRIVILEGED","GET_PACKAGE_SIZE","GET_TASKS","GLOBAL_SEARCH","INSTALL_LOCATION_PROVIDER",
"INSTALL_PACKAGES","INSTALL_SHORTCUT","INSTANT_APP_FOREGROUND_SERVICE","INTERNET","KILL_BACKGROUND_PROCESSES",
"killBackgroundProcesses(String)","LOCATION_HARDWARE","MANAGE_DOCUMENTS","MANAGE_OWN_CALLS","MASTER_CLEAR",
"MEDIA_CONTENT_CONTROL","MODIFY_AUDIO_SETTINGS","MODIFY_PHONE_STATE","MOUNT_FORMAT_FILESYSTEMS",
"MOUNT_UNMOUNT_FILESYSTEMS","NFC","PACKAGE_USAGE_STATS","PERSISTENT_ACTIVITY","PROCESS_OUTGOING_CALLS","READ_CALENDAR",
"READ_CALL_LOG","READ_CONTACTS","READ_EXTERNAL_STORAGE","READ_FRAME_BUFFER","READ_INPUT_STATE","READ_LOGS",
"READ_PHONE_NUMBER","READ_PHONE_STATE","PhoneAccount","READ_SMS","READ_SYNC_SETTINGS","READ_SYNC_STATS",
"READ_VOICEMAIL","REBOOT","RECEIVE_BOOT_COMPLETED","ACTION_BOOT_COMPLETED","RECEIVE_MMS","RECEIVE_SMS","RECEIVE_WAP_PUSH",
"RECORD_AUDIO","REORDER_TASKS","REQUEST_DELETE_PACKAGES","REQUEST_IGNORE_BATTERY_OPTIMIZATIONS",
"ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS","REQUEST_INSTALL_PACKAGES","RESTART_PACKAGES","RESTRICTED_VR_ACCESS",
"RUN_IN_BACKGROUND","SEND_RESPOND_VIA_MESSAGE","SEND_SMS","SET_ALARM","SET_ALWAYS_FINISH","SET_ANIMATION_SCALE",
"SET_DEBUG_APP","SET_PREFERRED_APPLICATIONS","addPackageToPreferred(String)","SET_PROCESS_LIMIT","SET_TIME","SET_TIME_ZONE",
"SET_WALLPAPER","SET_WALLPAPER_HINTS","SIGNAL_PERSISTENT_PROCESSES","STATUS_BAR","SYSTEM_ALERT_WINDOW",
"TYPE_APPLICATION_OVERLAY","TRANSMIT_IR","UNINSTALL_SHORTCUT","UPDATE_DEVICE_STATS","USE_DATA_IN_BACKGROUND",
"USE_FINGERPRINT","USE_SIP","VIBRATE","WAKE_LOCK","WRITE_APN_SETTINGS","WRITE_CALENDAR","WRITE_CALL_LOG","WRITE_CONTACTS",
"WRITE_EXTERNAL_STORAGE","WRITE_GSERVICES","WRITE_SECURE_SETTINGS","WRITE_SETTINGS","WRITE_SYNC_SETTINGS","WRITE_VOICEMAIL"
];
file_dir = "apk"
permissions_vector = [0]*len(permissions)
#extract permissions from AndroidManifest.xml
AndroidManifest = minidom.parse(file_dir + "/" + "AndroidManifest.xml")
for permission in AndroidManifest.getElementsByTagName("uses-permission"):
temp = permission.attributes["android:name"].value.split(".")[2]
if temp in permissions:
permissions_vector[permissions.index(temp)] = 1
#extract main activity name
MainActivity = ""
for activity in AndroidManifest.getElementsByTagName("activity"):
activity_name = activity.attributes["android:name"].value
if len(activity.getElementsByTagName("action")) > 0:
for temp in activity.getElementsByTagName("action"):
if temp.attributes["android:name"].value=="android.intent.action.MAIN":
MainActivity = activity_name
#extract activity nums
activity_nums = len(AndroidManifest.getElementsByTagName("activity"))
#extract receiver nums
receiver_nums = len(AndroidManifest.getElementsByTagName("receiver"))
#extract service nums
service_nums = len(AndroidManifest.getElementsByTagName("service"))
#print data
print("activity_nums: %d" %(activity_nums))
print("receiver_nums: %d" %(receiver_nums))
print("service_nums: %d" %(service_nums))
permissions_vector_string = ""
for permission in permissions_vector:
permissions_vector_string += str(permission)
permissions_vector_string += ","
permissions_vector_string = permissions_vector_string[0:-1]
print("permissions_vector:%s" %(permissions_vector_string))
#connect MySQL
conn= MySQLdb.connect(
host='localhost',
port = 3306,
user='root',
passwd='root',
db ='Android',
)
cur = conn.cursor()
#is already exist
cur.execute("select count(id) from malware where name='%s'" %(MainActivity))
already_exist = cur.fetchone()
if(already_exist[0]>0):
print("already existed")
exit()
else:
sql = "insert into malware(name,activity_nums,receiver_nums,service_nums,permissions)values('%s','%d','%d','%d','%s')"\
%(MainActivity,activity_nums,receiver_nums,service_nums,permissions_vector_string)
cur.execute(sql)
cur.close()
conn.commit()
conn.close()