Stratégies pour bloquer efficacement la génération de sous-processus de processus et révoquer les autorisations (Python)

la programmation


Existe-t-il un moyen efficace d’empêcher un processus de générer des enfants et de révoquer ses autorisations ? Je recherche une approche robuste pour bloquer entièrement la capacité d’un processus à générer des sous-processus et, si possible, restreindre ses autorisations et le terminer avec ses enfants. Avez-vous des suggestions ou des stratégies qui pourraient être efficaces à cet effet ?

Ce que j’ai essayé :

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()

Solution 1

L’idée ne répond pas

en essayant d’empêcher la création d’un processus, vous pouvez soit essayer de tuer tous ses sous-processus à plusieurs reprises.
remarque : ajoutez un délai pour que l’ordinateur de l’utilisateur n’ait pas de bsod (écran bleu de la mort).

si cela ne fonctionne pas ou si vous souhaitez toujours conserver certains processus/sous-processus, essayez :
J’essaie de découvrir des choses, veuillez attendre lorsque cette réponse sera terminée ou peut-être quelque chose…

コメント

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