-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathappDisassemblerandFEatureExtractor.py
145 lines (114 loc) · 4.88 KB
/
appDisassemblerandFEatureExtractor.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import os
cwd = os.getcwd()
dirs = os.listdir(cwd + "/goodware")
aldirs = os.listdir(cwd + "/goodwareF")
import shutil
#apktool d -s -o goodwareF/Whatsapp goodware/WhatsApp\ Messenger_v2.18.156_apkpure.com.apk
def csv_write(file_, lst, index):
if index < len(lst):
file_.write(str(lst[index]) + "\t")
else:
file_.write("\t")
for i in dirs:
a = ""
for j in i:
if j != " ":
a = a + j
else:
a = a + "_"
os.rename("goodware/" + i, "goodware/" + a)
x = 1
for z in dirs:
if (z[:-4] + ".tsv") in aldirs:
print "YOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
x = x + 1
print x
continue
print x
x = x+1
script = "apktool d -s -o " + "goodwareF/" + z[:-4] + " goodware/" + z
print('decompiling ' + z + " .......")
os.popen(script)
print(z + " is sucsessfully extracted")
i = "goodwareF/" + z[:-4] + "/AndroidManifest.xml"
j = "goodwareF/" + z[:-4] + ".tsv"
try:
a = open(i, 'r')
except:
continue
a.close()
csvf = open(j, "w")
print(z[:-4]+".tsv" + " is created")
actions = [] #done
permissions = []
uses_permissions = []
uses_features = []
categories = []
activities = []
activity_aliases = []
datas = []
meta_datas = []
providers = []
recievers = []
services = []
import xml.etree.ElementTree as ET
tree = ET.parse(i)
root = tree.getroot()
for action in root.iter('action'):#done
#print action.attrib.values()[0]
actions.append(action.attrib.values()[0])
for activity in root.iter('activity'):#done
#print activity.attrib.values()
activities.append(dict(zip([key[44:] for key in activity.attrib.keys()], activity.attrib.values())))
for cate in root.iter('category'):#done
#print cate.attrib.values()[0]
categories.append(cate.attrib.values()[0])
for uses_permission in root.iter('uses-permission'):#done
#print uses_permission.attrib.values()[0]
uses_permissions.append(uses_permission.attrib.values()[0])
for uses_feature in root.iter('uses-feature'):#done
#print uses_feature.attrib.values()
uses_features.append(dict(zip([key[44:] for key in uses_feature.attrib.keys()], uses_feature.attrib.values())))
for permission in root.iter('permission'):#done
#print permission.attrib.values()[1]
permissions.append(dict(zip([key[44:] for key in permission.attrib.keys()], permission.attrib.values())))
for activity_alias in root.iter('activity-alias'):
#print activity_alias.attrib.values()
activity_aliases.append(dict(zip([key[44:] for key in activity_alias.attrib.keys()], activity_alias.attrib.values())))
for data in root.iter('data'):
#print data.attrib
datas.append(dict(zip([key[44:] for key in data.attrib.keys()], data.attrib.values())))
for meta_data in root.iter("meta-data"):
#print meta_data.attrib.values()
meta_datas.append(dict(zip([key[44:] for key in meta_data.attrib.keys()], meta_data.attrib.values())))
for provider in root.iter("provider"):
#print provider.attrib
providers.append(dict(zip([key[44:] for key in provider.attrib.keys()], provider.attrib.values())))
for receiver in root.iter("receiver"):
#print receiver.attrib
recievers.append(dict(zip([key[44:] for key in receiver.attrib.keys()], receiver.attrib.values())))
for service in root.iter("service"):
#print service.attrib
services.append(dict(zip([key[44:] for key in service.attrib.keys()], service.attrib.values())))
csvf.write("Permissions\t Categories\t Activities\t Activity Aliases\t Uses Permissions\t Uses Features\t datas\t Meta Datas\t Providers\t Receivers\t Services\t Actions \n")
maxi = max(len(recievers), len(services), len(activity_aliases), len(meta_datas),len(providers), len(datas),len(permissions), len(actions), len(uses_permissions), len(uses_features),len(categories), len(activities))
for i in range(maxi):
csv_write(csvf, permissions, i,)
csv_write(csvf, categories, i,)
csv_write(csvf, activities, i,)
csv_write(csvf, activity_aliases, i,)
csv_write(csvf, uses_permissions, i,)
csv_write(csvf, uses_features, i,)
csv_write(csvf, datas, i,)
csv_write(csvf, meta_datas, i,)
csv_write(csvf, providers, i,)
csv_write(csvf, recievers, i,)
csv_write(csvf, services, i,)
if i < len(actions):#done
csvf.write(actions[i] + "\n")
else:
csvf.write("\n")
csvf.close()
shutil.rmtree("goodwareF/" + z[:-4])
print("goodwareF/" + z[:-4] + " is deleted")
print("***************************************************")