Compare commits

..
15 Commits
Author SHA1 Message Date
PYDT f4d032e5c7 Add files via upload 2024-02-25 02:17:22 +08:00
PYDT 4114aac6c3 Add files via upload 2024-02-25 01:45:23 +08:00
PYDT 0c43c6bb5f Add files via upload 2024-02-24 23:43:10 +08:00
PYDT 7b3c965b88 Add files via upload 2024-02-24 21:55:53 +08:00
PYDT 02a8de4696 Add files via upload 2024-02-23 08:38:55 +08:00
PYDT 22fa3eff71 Add files via upload 2024-02-22 14:32:17 +08:00
PYDT 69361209c3 Add files via upload 2024-02-22 01:08:15 +08:00
PYDT ff0aeaa4ef Add files via upload 2024-02-21 10:21:38 +08:00
PYDT 3c461dfd4b Add files via upload 2024-02-21 10:13:11 +08:00
PYDT c6beda383e Add files via upload 2024-02-21 07:10:15 +08:00
PYDT 3d59f3befd Add files via upload 2024-02-21 00:42:59 +08:00
PYDT e54f0db239 Update README.md 2024-02-20 14:41:04 +08:00
PYDT 0f877f2749 Delete PYAS_Function.vdb 2024-02-20 14:02:47 +08:00
PYDT b69ba165d9 Add files via upload 2024-02-20 14:02:37 +08:00
PYDT 965076fe52 Delete PYAS_Compress.py 2024-02-20 13:43:32 +08:00
7 changed files with 127 additions and 68 deletions

No files matched your search

+39 -33
View File
@@ -3,8 +3,8 @@ import hashlib, pefile, socket, msvcrt
import xml.etree.ElementTree as xmlet
import requests, pyperclip, win32file
import win32gui, win32api, win32con
from PYAS_Engine import ListSimHash
from PYAS_Extension import slist, alist
from PYAS_Compress import ListCompressor
from PYAS_Language import translate_dict
from PYAS_Interface import Ui_MainWindow
from threading import Thread
@@ -19,8 +19,8 @@ class MainWindow_Controller(QMainWindow):
self.setWindowFlags(Qt.FramelessWindowHint)
self.pyas = sys.argv[0].replace("\\", "/")
self.dir = os.path.dirname(self.pyas)
self.pyae_version = "0000-00-00 00:00:00"
self.pyas_version = "3.0.4"
self.pyae_version = "SimHash Engine"
self.pyas_version = "3.0.5"
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.init_show_pyas()
@@ -52,11 +52,10 @@ class MainWindow_Controller(QMainWindow):
def init_data_base(self):
try:
file_path = os.path.join(self.dir, "PYAS_Function.vdb")
file_path = os.path.join(self.dir, "PYAS_Model.json")
if os.path.exists(file_path):
self.pe = ListCompressor()
self.pe = ListSimHash()
self.pe.load_model(file_path)
self.pyae_version = self.pe.get_label()
except Exception as e:
self.bug_event(e)
@@ -628,8 +627,8 @@ class MainWindow_Controller(QMainWindow):
def update_database(self):
try:
if self.question_event("您確定要更新數據庫嗎?"):
file_path = os.path.join(self.dir, "PYAS_Function.vdb")
response = requests.get('http://27.147.30.238:5001/database', params={"version": self.pyae_version}, timeout=5)
file_path = os.path.join(self.dir, "PYAS_Model.json")
response = requests.get('http://27.147.30.238:5001/model', params={"version": self.pyae_version}, timeout=10)
if response.status_code == 200:
with open(file_path, 'wb') as f:
f.write(response.content)
@@ -644,10 +643,10 @@ class MainWindow_Controller(QMainWindow):
def show_menu(self):
self.WindowMenu = QMenu()
Main_Settings = QAction(self.trans("設定"),self)
Main_Update = QAction(self.trans("更新"),self)
#Main_Update = QAction(self.trans("更新"),self)
Main_About = QAction(self.trans("關於"),self)
self.WindowMenu.addAction(Main_Settings)
self.WindowMenu.addAction(Main_Update)
#self.WindowMenu.addAction(Main_Update)
self.WindowMenu.addAction(Main_About)
Qusetion = self.WindowMenu.exec_(self.ui.Menu_Button.mapToGlobal(QPoint(0, 30)))
if Qusetion == Main_About and self.ui.About_widget.isHidden():
@@ -665,8 +664,8 @@ class MainWindow_Controller(QMainWindow):
self.ui.Window_widget.raise_()
self.change_animation_3(self.ui.Setting_widget,0.5)
self.change_animation_5(self.ui.Setting_widget,10,50,831,481)
if Qusetion == Main_Update:
self.update_database()
#if Qusetion == Main_Update:
#self.update_database()
def change_sensitive(self):
sw_state = self.ui.high_sensitivity_switch_Button.text()
@@ -706,7 +705,7 @@ class MainWindow_Controller(QMainWindow):
QApplication.processEvents()
try:
for file in self.virus_list:
self.unlock_file(file)
self.lock_file(file, False)
except:
pass
self.scan_file = True
@@ -733,17 +732,14 @@ class MainWindow_Controller(QMainWindow):
copyPath.triggered.connect(lambda: copyPathFunc())
menu.exec_(self.ui.Virus_Scan_output.mapToGlobal(point))
def lock_file(self, file):
def lock_file(self, file, lock):
try:
self.virus_lock[file] = os.open(file, os.O_RDWR)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
except:
pass
def unlock_file(self, file):
try:
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
os.close(self.virus_lock[file])
if lock:
self.virus_lock[file] = os.open(file, os.O_RDWR)
msvcrt.locking(self.virus_lock[file], msvcrt.LK_NBLCK, 0)
else:
msvcrt.locking(self.virus_lock[file], msvcrt.LK_UNLCK, 0)
os.close(self.virus_lock[file])
except:
pass
@@ -755,10 +751,10 @@ class MainWindow_Controller(QMainWindow):
if self.ui.Virus_Scan_output.findItems(file, Qt.MatchContains)[0].checkState() == Qt.Checked:
self.ui.Virus_Scan_text.setText(self.trans("正在刪除: ")+file)
QApplication.processEvents()
self.unlock_file(file)
self.lock_file(file, False)
os.remove(file)
else:
self.unlock_file(file)
self.lock_file(file, False)
except:
continue
self.virus_lock = {}
@@ -771,7 +767,7 @@ class MainWindow_Controller(QMainWindow):
def write_scan(self, state, file):
try:
self.lock_file(file)
self.lock_file(file, True)
self.virus_list.append(file)
self.virus_list_ui.append(f"[{state}] {file}")
item = QListWidgetItem()
@@ -905,11 +901,11 @@ class MainWindow_Controller(QMainWindow):
fn.append(str(func.name, "utf-8"))
except:
pass
m1, m0 = self.pe.predict(fn)
#print(m1, m0, file)
if self.json["high_sensitive"]:
return self.pe.predict(fn)
elif "_CorExeMain" not in fn:
return self.pe.predict(fn)
return False
return m1 >= m0
return m1 > 0.95 and m1 > m0
except:
return False
@@ -1254,6 +1250,7 @@ class MainWindow_Controller(QMainWindow):
existing_processes = set()
for p in psutil.process_iter():
existing_processes.add(p.pid)
psutil.Process(os.getpid()).nice(256)
while self.proc_protect:
time.sleep(0.01)
for p in psutil.process_iter():
@@ -1261,7 +1258,7 @@ class MainWindow_Controller(QMainWindow):
if p.pid not in existing_processes:
name, file, cmd = p.name(), p.exe().replace("\\", "/"), p.cmdline()
if file != self.pyas and file not in self.whitelist:
psutil.Process(p.pid).suspend()
self.lock_process(p, True)
if "powershell" in name and self.api_scan(cmd[-1].split("'")[-2]):
self.kill_process(p)
file = cmd[-1].split("'")[-2].replace("\\", "/")
@@ -1279,12 +1276,21 @@ class MainWindow_Controller(QMainWindow):
self.send_notify(self.trans("惡意軟體攔截: ")+file)
elif ":/Windows" not in file and self.sign_scan(file):
self.proc = p
psutil.Process(p.pid).resume()
self.lock_process(p, False)
existing_processes.add(p.pid)
elif not psutil.pid_exists(p.pid):
existing_processes.remove(p.pid)
except:
pass
self.lock_process(p, False)
def lock_process(self, p, lock):
try:
if lock:
psutil.Process(p.pid).suspend()
else:
psutil.Process(p.pid).resume()
except:
pass
def kill_process(self, parent):
try:
-31
View File
@@ -1,31 +0,0 @@
import json, hashlib
class ListCompressor:
def __init__(self):
self.model = {}
def save_model(self, file_name):
with open(file_name, 'w') as f:
json.dump(self.model, f)
print(f"\nModel Is Saved In {file_name}")
def load_model(self, model_data):
if isinstance(model_data, str):
with open(model_data, 'r') as f:
model_data = json.load(f)
self.model = model_data
def train_model(self, label, data):
if label not in self.model:
self.model[label] = []
for lst in data:
self.model[label].append(hashlib.md5(''.join(map(str, lst)).encode()).hexdigest()[:8])
def predict(self, new_list):
for label, items in self.model.items():
if label != 'word' and hashlib.md5(''.join(map(str, new_list)).encode()).hexdigest()[:8] in items:
return True
return False
def get_label(self):
return list(self.model.keys())[0]
+83
View File
@@ -0,0 +1,83 @@
import re, time, json, hashlib, numpy
from itertools import groupby
class ListSimHash:
def __init__(self):
self.model = {}
def save_model(self, file_name):
with open(file_name, 'w') as f:
json.dump(self.model, f)
print(f"\nModel Is Saved In {file_name}")
def load_model(self, model_data):
if isinstance(model_data, str):
with open(model_data, 'r') as f:
model_data = json.load(f)
self.model = model_data
def get_model(self, label):
return self.model[label]
def train_model(self, ones, zero, feature=128, batch_size=1000):
self.model["ones"] = []
self.model["zero"] = []
self.model["feature"] = feature
self.model["batch_size"] = batch_size
start = time.time()
print("Convert ones")
for i, x in enumerate(ones, 1):
self.model["ones"].append(self.build_text(x))
used = "{0:.2f}".format(time.time()-start)
self.progress_bar(i, len(ones), prefix=f'{i}/{len(ones)}:', suffix=f'{used}s')
start = time.time()
print("Convert zero")
for i, y in enumerate(zero, 1):
self.model["zero"].append(self.build_text(y))
used = "{0:.2f}".format(time.time()-start)
self.progress_bar(i, len(zero), prefix=f'{i}/{len(zero)}:', suffix=f'{used}s')
def build_text(self, content, width=4):
sums, batch, count = [], [], 0
if isinstance(content, list):
content = ' '.join(content)
elif isinstance(content, bytes):
content = content.decode('utf-8', errors='ignore')
content = ''.join(re.findall(r'[\w\u4e00-\u9fcc]+', content.lower()))
features = [content[i:i + width] for i in range(max(len(content) - width + 1, 1))]
features = {k: sum(1 for _ in g) for k, g in groupby(sorted(features))}
for f, w in features.items():
count += w
h = hashlib.md5(f.encode('utf-8')).digest()
batch.append(h * w)
if len(batch) >= self.model["batch_size"]:
sums.append(self.sum_hashes(batch))
batch = []
if batch:
sums.append(self.sum_hashes(batch))
combined_sums = numpy.sum(sums, 0)
v = numpy.packbits(combined_sums > count / 2).tobytes()
return int.from_bytes(v, 'big')
def sum_hashes(self, digests):
bitarray = numpy.unpackbits(numpy.frombuffer(b''.join(digests), dtype='>B'))
return numpy.sum(numpy.reshape(bitarray, (-1, self.model["feature"])), 0)
def progress_bar(self, iteration, total, prefix='', suffix='', length=50, fill='█'):
percent = min(100.0, max(0.0, 100 * (iteration / float(total))))
end_char = '\n' if percent >= 100 else '\r'
percent_string = "{0:.2f}".format(percent)
filled_length = int(length * iteration // total)
bar = fill * filled_length + ' ' * (length - filled_length)
print(f'\r {prefix: <10} |{bar}| {percent_string}% {suffix}', end=end_char)
def predict(self, query):
query_hash = self.build_text(query)
max_ones = max(self.similar(x, query_hash) for x in self.model["ones"])
max_zero = max(self.similar(y, query_hash) for y in self.model["zero"])
return max_ones, max_zero
def similar(self, x, y):
hamming_distance = bin(x ^ y).count('1')
similarity = 1 - hamming_distance / self.model["feature"]
return similarity
-1
View File
@@ -1 +0,0 @@
{"2024-02-19 09:09:40": ["f8eaca69", "f0f5732f", "1b02d2da", "9b83055e", "fa39258e", "7e7275ce", "ebad499a", "628691a4", "4cbbe367", "f9f96fde", "2e3086b1", "dc2bd521", "62a39640", "7feb71ad", "724103b9", "8b136daa", "5e47ce27", "21bb3aef", "d2668208", "cb9e21ee", "d1ad686f", "ec90753b", "55e78944", "55634643", "bafe8409", "632f4531", "319e2db4", "ecf51f02", "cf04dfb7", "c8756155", "e4753bc3", "57b1794e", "0513868a", "c069d7d5", "776c99fe", "07483ddf", "62a348cf", "55433105", "86f8c21f", "68b4c29f", "221b87e3", "736a55d1", "5dd1e0c9", "1f53d69f", "b2c4204c", "d1e142b8", "00b0d86d", "f1dc8325", "a51343e5", "0e2d378e", "8b6a35fc", "ac0b27eb", "87074aa5", "2bd013a0", "bee130c7", "d90657b4", "c21af82e", "d2528b9e", "e81da5d7", "0ae06db8", "acf0fbaa", "b16889df", "a072f779", "97be1e02", "94c2d42c", "f074f5b4", "e1240e10", "6c48e028", "ee0a9c21", "2beae172", "c969fd9d", "846a7177", "39ae5ad7", "6a0c7324", "9af5a01e", "bdcb5a86", "596a470f", "191f1163", "f30de2e7", "14688765", "0facf2a6", "94691d9a", "e952305f", "20cb7eec", "18b3bf16", "36888e71", "30739d24", "e91746a4", "1a5cb45a", "23191f29", "e26dfd80", "d8261ac3", "94bff605", "94497ba5", "acf3bb61", "ce095672", "aea0475c", "d4da4030", "b6a46047", "f25e7c70", "010bd7e6", "4e552f39", "4c626e62", "cf88078b", "4d57d439", "35eeb9fc", "f1ae2ce5", "3efc231b", "088b5c3d", "234f232b", "be39b5c7", "6d75bcaa", "0157ab1a", "fdf069cb", "a1895d33", "957e7561", "967929f9", "43d61eab", "aebc3614", "fbe63639", "e3e0254f", "0593e9a2", "fa8ceeae", "11b631fb", "71fa160a", "c838e850", "7fe931dd", "30547b8f", "5dea0cda", "05178537", "f1bde64f", "85a4b8a4", "ef2ac9f8", "af0d6ebb", "f242ebc1", "6be2182a", "39d583d4", "a33c2ab4", "e65f4785", "73b78451", "65284f49", "09082309", "cf215013", "f14e284b", "690b5995", "f0949aca", "3c36ae8e", "6be14646", "13102764", "8d8e66bb", "d4afaff6", "a141f55e", "69134125", "7782a5e0", "07687215", "0077b966", "16eb1d17", "19d85999", "295e94f1", "3cbb09cf", "61099a43", "1fe35f2e", "10c1954f", "833b1998", "18b6668e", "d0c36eb5", "dfea1c9a", "b5f2dd11", "15bbc35a", "1e54fc8c", "522ec9f6", "3d19c3b6", "b81c15eb", "2ba7934b", "30ff5635", "23edb694", "4beef072", "2f7ca0b7", "fcaa2063", "8ac3e370", "72646e9e", "be5348af", "b6ed92dc", "c11f9756", "8f74e253", "29a60790", "26dbaaa7", "9542f014", "44349994", "d8efdadd", "ebaa875f", "5dc456d1", "c90d1128", "cea3f4a5", "7bf6f523", "022ab8d8", "5606be13", "839f31ff", "9fe86003", "f45011dd", "c8ee6a44", "72e25499", "d0008616", "d6d13cfd", "d41f3fb7", "7bf71a77", "302c6754", "3bd56a87", "639a51eb", "3025c6b7", "018b8805", "b233ddd9", "9297a1cb", "8d394492", "6399f135", "f516133b", "b71b7a0d", "897e3a5f", "6cc57095", "184ccf63", "a51484ee", "d786ef37", "57d2bb57", "b6ec2abf", "c10f2cf6", "5064bd10", "0abbe6f4", "a0a8dfd1", "cb25c53f", "3e3a904e", "35ebf1ea", "ec883603", "2f3f077c", "e0b6a475", "817d5bcb", "e7e4805a", "1ed5d4af", "a8ac4be7", "5cfe1ec3", "6c3d2e9a", "cd48542a", "3ae3b681", "781b603d", "99e3aca7", "e4e549d2", "d3cb5549", "a2b9d78f", "b47d2a97", "5a34fc94", "eda8c8fd", "5529b024", "068c506c", "35385307", "8c0d1b23", "7c5e3180", "41858343", "861a909a", "96471e95", "97255487", "506d0366", "e1aee43f", "1f4f4ab1", "99ad8db1", "cffd3e92", "cc431464", "ece85b50", "de6d3489", "9425f525", "c9dfa23f", "a97155f3", "d440e8ed", "002e23f2", "96474097", "08798831", "34962f83", "31f03b48", "979532a1", "5b692416", "5c2a1c1e", "6d642743", "4492b29b", "1e62932b", "fb15345a", "c56d5e02", "86a8a864", "bb94e602", "1bf7af93", "4f85c567", "6104f9a3", "971f7f79", "cebe043f", "f1bede8b", "5458e526", "5354fc59", "86a6529d", "8ace816a", "355885b6", "4211942c", "bd2797bd", "4794d596", "7e5013a9", "333b7df1", "aa818d5e", "14238173", "39bae570", "c8476924", "8c919cb4", "59d0bcc8", "55cd1300", "6fec3fac", "62145122", "29a47420", "54224ade", "8ec73106", "e29225d6", "0b95337c", "7abd0227", "9342c1e3", "20879280", "3cbe70c8", "ce494c91", "d722b746", "ec842bbb", "090a5016", "1176c81f", "327018cc", "f60b523e", "b48f6dcc", "4c1e1a2e", "8e108bc2", "9d8ed7e1", "1c623712", "df5292b9", "1aa3b54f", "98ecee4c", "0ac1e588", "0ab6b9b5", "5ef75e18", "5668ab16", "6043426b", "226217c3", "8da2c149", "1250f47d", "43ca2196", "6ff4ce20", "ccdbc95c", "eabebfd0", "c4ca6358", "5694217b", "a69a2aba", "10f2a2b1", "539bc501", "4c44a17c", "5008e44f", "2fd8a8a8", "a828b92d", "ee6b50e6", "1bc9bab0", "9dbfcd08", "640f2927", "e7e38d5e", "a98e1d1d", "7033ad33", "20fcecfd", "19c928b8", "2038f57b", "d578162e", "051020bf", "79f68a23", "23269a41", "1938493f", "34d7276a", "6aa98b23", "47a32506", "43adb03a", "51fe1954", "6a2eaaab", "5b28a176", "4f5a3b25", "136c1369", "ff778b87", "0016c379", "79d85fa6", "15826bb9", "8f737801", "6357bd68", "086c7679", "d9e4a2da", "1d067fed", "44dde6a5", "f8b69084", "1b146d77", "1488771c", "c0d7b8fb", "ef0a1059", "2fe5822d", "6c1c79f2", "f4eb7828", "c605b02a", "95840477", "9ea12215", "5e570d46", "51453f5f", "4ce7e503", "c9f98890", "de09d16e", "f8984bae", "fbca4af8", "0d8e37d4", "8c43a7fe", "65f145c0", "5f213b95", "e425c385", "a470767a", "19c39Line truncated
+1
View File
@@ -0,0 +1 @@
{"ones": [138514579140422510314615591404235408110, 138884061479927293269157399561321625124, 106913533745562494950237068000717194857, 56400517596638244422894049797604820621, 57509758994800025148320631233619478382, 266907975564823269757642468520682218021, 268764573572222081482569414853338147421, 301824928671740406049708617676147983911, 216322613833371885512412681366080352834, 305869899604823982125728318036880769198, 139390375862009821188813492031092843045, 140636369840301821837859972310736757357, 93525514883026399429643965685843744494, 85423552611944120389541188728576853614, 212959202992585676402479957744392065258, 310175323171803986711996189701871919269, 267073946987621142567955636205481517613, 130213060982497483351391950606798445166, 309453635424025901100964431663839207981, 98595718339270037315648519699911042861, 804810740308425468096265735208257617, 308840950453806983092423514217084578476, 322017788596429201866715226549004966766, 96855081274446633945978062387702817317, 309443088174281869980853203902500569645, 145963460354456926129955518358155059877, 100726355023313678737270049805708838766, 163055950804159105041684713458861453642, 139400638929619405534171854486176686629, 314740690747489056417995540920077280813, 309174548517306493765742812127600992824, 42649730517016866640152470265639253071, 266991032348753532132223164567115948653, 310834785753961546009345771577019752617, 138794485055151379651410532066913608701, 131790595577365633473641510877883811372, 333214357055760258309229460312077263456, 266919150567781465017126522717174383268, 309443250354319958579894353439906751021, 314760122553781807187305329030403597869, 309526327094009133336072658832466510380, 140783818610473943253735333316647117357, 266908765191386477077819778373267636908, 141960523677151839211304480019230155437, 236708587517087268685876607084596151010, 147109497140790587393132625769962294828, 98101030488836797416915605797123547821, 309443006965336732125112839751851204645, 163777668652403995261587270005386479850, 96850943187510051473774485962306807341, 314740690747489056417995540920077280813, 266907874033546142647711315245141475885, 128087963732730699244600678440497496745, 122948904762874323200167759687292791479, 144623683762647410432822459404215795881, 175281760716791954210630508746562429745, 98185566304403225600012489980760220205, 312173101091522310981766359248219144333, 165719174729833763978390369816514151589, 130453416906105788293089319006359032458, 309459962424693681697118037040663257637, 312110631309585432258276350165909913633, 266898908365541525694120496365498163769, 301974605256105130746947982559953757414, 46088979409888770325991887802833783310, 98097114716132427630865195752911955500, 98179117726185629973687845690377904685, 128833381668692705604881271753964704076, 288187285762824132116353144464193487405, 440767454710337817086060213441032296, 308755229979748206303057066098374746633, 310789353473439559353693532556983984677, 309443331008521396576751777765001683629, 272224825421632604778319829685274829501, 314740690747489056417995540920077280813, 288162135445850533606754792760600323239, 266908765349823459293196338896727065260, 266919475084642627997330537792153215533, 118095062731544531316068994170817536096, 309460205972074921952248716662523977893, 138980104556989140895595181268125835917, 96753309757095605084115148461573554213, 96783566280022178361451345888136274605, 267006527672619154632784726463056593709, 268325411442133354907118265595969561133, 45423085047571636176304357087088791778, 140693602135645422745421550777944908460, 266908927450643968163503768535437820588, 139317724478784922140315175893335437861, 98075229203956313888405997203836658285, 139307136862901466424877793378792006181, 141949813792938456152307200983465099405, 266887023150038950813539942248450810413, 266907873517942888138024343981564256813, 309527625168214095599527134475951948333, 288176899901775619274666676430489666220, 132687201639749430771754766010675328697, 298809467903569967359434970965896200999, 266909251929602884051145652263806452396, 96856378081010667424655802311172842021, 334364013698977648789398548127408169731, 138478276465840759527093181786120602252, 309517280516176477337549624053815730737, 309532816881431070079891773455787762221, 267006688625182579765726710919333306917, 301342822028899395690309866891238953529, 140889247564697972421510238399255437956, 301704982992736118799149217975167423010, 123342205008290812825969949820881134509, 309444547834874662752143629118327890477, 120368316428277902366824346477250637709, 96608366161759132771693290653207750157, 309258884864988268167108821321512280229, 266887185302388558609052276779780547237, 120204759374330029658546372684809684013, 266750361825108195839408748923433296011, 309541905261615072912890344878225383465, 136838710717061085016646030313491257547, 139400638929619405533018932981569839653, 309535252305417442974606230157044113441, 96865343064503306525844664637493502501, 98091942701683498853848791423305786021, 12268668727495Line truncated
+2 -1
View File
@@ -1,7 +1,8 @@
import pyinstaller_versionfile
pyinstaller_versionfile.create_versionfile(
output_file="versionfile.txt",
version='3.0.4',
version='3.0.5',
company_name="PYAS Security",
file_description="Python Antivirus Software",
internal_name="PYAS",
+2 -2
View File
@@ -6,11 +6,11 @@
PYAS.py -> Main PYAS Program (including animation, scanning, protection functions, etc.)
PYAS_Compress.py -> Conversion Database (used to convert database dict and list to and from each other)
PYAS_Engine.py -> Conversion Database (used to convert database dict and list to and from each other)
PYAS_Extension.py -> File Extension (including scanned file extensions and common file extensions)
PYAS_Function.* -> Virus Database (the virus database must be placed in the same directory)
PYAS_Model.* -> Virus Database (the virus database must be placed in the same directory)
PYAS_Interface.py -> PyQt5 Interface (designed by QT designer, must be matched with the main program)