Estrategias para bloquear eficazmente la generación de subprocesos de procesos y revocar permisos (Python)

programación


¿Existe alguna forma eficaz de evitar que un proceso genere hijos y revoque sus permisos? Estoy buscando un enfoque sólido para bloquear por completo la capacidad de un proceso para generar subprocesos y, si es posible, restringir sus permisos y finalizarlo junto con sus hijos. ¿Tiene alguna sugerencia o estrategia que pueda ser efectiva para este propósito?

Lo que he probado:

import psutil
import sys
import ctypes
import time<

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except Exception as e:
        print(f'Error checking admin privileges: {e}')
        return False

def run_as_admin():
    try:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
    except Exception as e:
        print(f'Error restarting as administrator: {e}')
        sys.exit(1)

def block_child_creation(process_name):
    try:
        for process in psutil.process_iter(['pid', 'name']):
            if process.info['name'].lower() == process_name.lower():
                # Suspend the process
                process.suspend()
                print(f'The process with PID {process.pid} has been suspended.')

                # Terminate the process and its children
                for child in process.children(recursive=True):
                    child.kill()
                psutil.wait_procs(process.children(), timeout=5)
                process.kill()
                process.wait(5)
                print(f'The process with PID {process.pid} and its children have been terminated.')

                break  # No need to continue searching after blocking the process

        # Verificar novamente se o processo foi encerrado
        for process in psutil.process_iter(['pid', 'name']):
            if process.info['name'].lower() == process_name.lower():
                print(f'The process {process_name} is still running.')
            else:
                print(f'No process with the name {process_name}.')
                break
    except psutil.NoSuchProcess:
        print(f'No process with the name {process_name} found.')
    except Exception as e:
        print(f'An unexpected error occurred: {e}')

def main():
    try:
        if not is_admin():
            print("Restarting as administrator!")
            run_as_admin()

        global nome_processo
        nome_processo = input("Enter the name of the process you want to block and terminate with child creation: ")

        block_child_creation(nome_processo)

    except KeyboardInterrupt:
        print("\nTermination process interrupted by the user.")
    except Exception as e:
        print(f'An unexpected error occurred: {e}')

if __name__ == "__main__":
    main()

Solución 1

Idea no respuesta

Si intenta bloquear la creación de un proceso, puede intentar eliminar todos sus subprocesos repetidamente.
nota: agregue un retraso para que la computadora del usuario no tenga un bsod (pantalla azul de la muerte).

Si eso no funciona o aún desea que queden algunos procesos/subprocesos, intente:
Tratando de averiguar cosas, espere cuando termine esta respuesta o tal vez algo así…

コメント

タイトルとURLをコピーしました