-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathmain.py
77 lines (62 loc) · 1.99 KB
/
main.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
import webbrowser
from threading import Timer
import os
from flask import *
from antivirus import *
import pickle
import joblib
from tkinter import Tk
from tkinter.filedialog import askopenfilename
import os
path = os.getcwd()
UPLOAD_FOLDER = os.path.join(path, 'uploads')
ALLOWED_EXTENSIONS = {'exe'}
if not os.path.isdir(UPLOAD_FOLDER):
os.mkdir(UPLOAD_FOLDER)
dir = UPLOAD_FOLDER
for f in os.listdir(dir):
os.remove(os.path.join(dir, f))
app = Flask(__name__)
app.secret_key = 'nouman'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def upload():
return render_template("index.html")
@app.route('/result', methods=['POST'])
def upload1():
print('Detect malicious files')
root=Tk()
root.attributes('-topmost', 1)
Tk().withdraw()
filename = askopenfilename()
print(filename)
target = filename
root.destroy()
# Load classifier
clf = joblib.load(os.path.join(
os.path.dirname(os.path.realpath(__file__)),
'classifier/classifier.pkl'
))
print(clf)
features = pickle.loads(open(os.path.join(
os.path.dirname(os.path.realpath(__file__)),
'classifier/features.pkl'),
'rb').read()
)
print(features)
data = extract_infos(filename)
pe_features = list(map(lambda x: data[x], features))
res = clf.predict([pe_features])[0]
print('The file %s is %s' % (
os.path.basename(filename),
['malicious', 'legitimate'][res])
)
return render_template("result.html", disp=os.path.basename(filename), disp1=['malicious', 'legitimate'][res], disp2=clf, disp3=features)
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
def open_browser():
webbrowser.open_new('http://127.0.0.1:2000/')
if __name__ == '__main__':
Timer(1, open_browser).start()
app.run(port=2000, debug=True, threaded=True, use_reloader=False)