feat: update accurency formula

This commit is contained in:
sangge-redmi 2024-06-04 20:31:09 +08:00
parent fc4e0e3b30
commit 81cbc88e9b

View File

@ -3,6 +3,7 @@ import unittest
import shutil import shutil
import os import os
import threading import threading
import re
from detection.utils import read_file_content from detection.utils import read_file_content
from .final_tests_util import ( from .final_tests_util import (
@ -11,6 +12,7 @@ from .final_tests_util import (
inject_pickle_backdoor, inject_pickle_backdoor,
inject_random_backdoor, inject_random_backdoor,
inject_pyc_backdoor, inject_pyc_backdoor,
backdoors,
) )
from detection.Regexdetection import find_dangerous_functions from detection.Regexdetection import find_dangerous_functions
from detection.GPTdetection import detectGPT from detection.GPTdetection import detectGPT
@ -102,11 +104,22 @@ class TestFinalTests(unittest.TestCase):
# test injected code # test injected code
with open(self.path + "output.txt", "r") as f: with open(self.path + "output.txt", "r") as f:
lines = f.readlines() lines = f.readlines()
injected_detectedNum = 0 injected_detected_num = 0
injected_correct_num = 0
pattern = r"\w+\.py: Line \d+: (.+)"
for line in lines: for line in lines:
if "py:" in line: if "py:" in line:
injected_detectedNum += 1 injected_detected_num += 1
injected_accurency = injected_detectedNum / self.injectedNum match = re.search(pattern, line)
command = ""
if match:
command = match.group(1)
for backdoor in backdoors:
if command in backdoor:
injected_correct_num += 1
break
injected_accurency = injected_detected_num / self.py_files_num
print(f"injected files accurency: {injected_accurency}") print(f"injected files accurency: {injected_accurency}")
try: try:
GPTresult = GPTdetectFileList(possibly_dangerous_file) GPTresult = GPTdetectFileList(possibly_dangerous_file)
@ -122,21 +135,28 @@ class TestFinalTests(unittest.TestCase):
# test pickle files # test pickle files
with open(self.path + "output.txt", "r") as f: with open(self.path + "output.txt", "r") as f:
lines = f.readlines() lines = f.readlines()
pickle_detectedNum = 0 pickle_detected_num = 0
pickle_correct_num = 0
for line in lines: for line in lines:
if "pickle" in line: if "pickle" in line:
pickle_detectedNum += 1 pickle_detected_num += 1
pickle_accurency = pickle_detectedNum / self.pickle_files_num if re.search(r"backdoor\d*\.pickle", line):
pickle_correct_num += 1
pickle_accurency = pickle_detected_num / self.pickle_true_num
print(f"pickle files accurency: {pickle_accurency}") print(f"pickle files accurency: {pickle_accurency}")
# test pyc files # test pyc files
with open(self.path + "output.txt", "r") as f: with open(self.path + "output.txt", "r") as f:
lines = f.readlines() lines = f.readlines()
pyc_detectedNum = 0 pyc_detected_num = 0
pyc_correct_num = 0
for line in lines: for line in lines:
if "pyc" in line: if "pyc" in line:
pyc_detectedNum += 1 pyc_detected_num += 1
pyc_accurency = pyc_detectedNum / self.pyc_files_num if re.search(r"backdoor\d*\.pyc", line):
pyc_correct_num += 1
pyc_accurency = pyc_detected_num / self.pyc_true_num
print(f"pyc files accurency: {pyc_accurency}") print(f"pyc files accurency: {pyc_accurency}")