Ir ao conteúdo
  • Cadastre-se

Python Por que os .bat não aparecem nos processos(Codigo python)?


Ir à solução Resolvido por bngomes,

Posts recomendados

Estou desenvolvendo um antivírus em Python e, ao realizar a verificação em tempo real, me deparei com uma questão interessante. Parece que, embora os arquivos .bat sejam executados, eles não aparecem na lista de processos. Meu programa calcula os hashes dos processos para compará-los com os armazenados no MongoDB, que representam hashes de vírus. Para testar essa funcionalidade, incluí o hash de um arquivo .bat. Se preferir, dê uma olhada na imagem para uma visão mais simplificada do que eu preciso.

meu codigo em python: 

f75c3058-3f5a-4a20-9dc4-b14f98946c4e.thumb.png.61b7708b83571512490c237aa2ff9d96.png

import psutil 

import hashlib 

import pymongo 

import os 

import sys 

import pyuac 

 

def is_admin(): 

    try: 

        return pyuac.isUserAdmin() 

    except: 

        return False 

 

def run_as_admin(): 

    pyuac.runAsAdmin() 

 

def calculate_hash(file_path): 

    hasher = hashlib.sha256() 

    with open(file_path, 'rb') as afile: 

        buf = afile.read() 

        hasher.update(buf) 

    return hasher.hexdigest() 

 

def main(): 

    # Verifique se o usuário é administrador 

    if not is_admin(): 

        print("Re-launching as admin!") 

        run_as_admin() 

        return 

 

    # Conecte ao MongoDB 

    try: 

        # Sua conexão MongoDB 

        uri = "mongodb+srv://rieidigamer:[email protected]/?retryWrites=true&w=majority" 

        client = pymongo.MongoClient(uri) 

        database = client["antivirus"] 

        collection = database["antivirus1"] 

 

        # Carregue todos os hashes da coleção 

        all_hashes = [doc.get("hash", "") for doc in collection.find({}, {"hash": 1})] 

 

        # Obtenha a lista de processos 

        for proc in psutil.process_iter(['pid', 'name', 'exe', 'cmdline', 'parent']): 

            # Verifique se o processo pai é o cmd.exe 

            if proc.info['parent'] and 'cmd.exe' in proc.info['parent']['name'].lower(): 

                # Calcule o hash sha-256 do executável ou do arquivo .bat do processo 

                process_hash = None 

                if proc.info['exe'] is not None and os.path.exists(proc.info['exe']): 

                    process_hash = calculate_hash(proc.info['exe']) 

                elif proc.info['cmdline'] is not None and any(arg.endswith('.bat') for arg in proc.info['cmdline']): 

                    hasher = hashlib.sha256() 

                    for arg in proc.info['cmdline']: 

                        hasher.update(arg.encode('utf-8')) 

                    process_hash = hasher.hexdigest() 

 

                # Compare o hash com os hashes carregados do MongoDB 

                if process_hash and process_hash not in all_hashes: 

                    # Nenhum hash correspondente encontrado, matar o processo 

                    p = psutil.Process(proc.info['pid']) 

                    p.terminate() 

                    print(f"Processo {proc.info['pid']} terminado.") 

                elif process_hash: 

                    # Hash correspondente encontrado, manter o processo 

                    print(f"Processo {proc.info['pid']} é válido.") 

 

    except pymongo.errors.ConnectionFailure as e: 

        print(f"Erro ao conectar ao MongoDB: {e}") 

 

    finally: 

        # Fechar a conexão com o MongoDB 

        client.close() 

 

if __name__ == "__main__": 

    main() 

 

Link para o comentário
Compartilhar em outros sites

Um arquivo BAT por si só é apenas um arquivo texto.. ele não é um executável.. o conteúdo dentro dele que é..  

Ele na pratica um script...

 

Então dentro da bat pode ter a chamada a um ou vários comandos (do sistema como um DIR, ou executável com explorer.exe) ou até não executar na pratica arquivo nenhum, tipo ter só um "PATH=" por exemplo.. o que iria para os processos seriam os executáveis dentro dele.. ai seu antivírus pegava eles...

 

 

 

Link para o comentário
Compartilhar em outros sites

@bngomes Tipo isso? 

import psutil
import hashlib
import pymongo
import os

def is_admin():
    try:
        return os.getuid() == 0
    except AttributeError:
        return False

def run_as_admin():
    # Coloque aqui a lógica para executar como administrador no seu sistema operacional
    pass

def calculate_hash(file_path):
    hasher = hashlib.sha256()
    with open(file_path, 'rb') as afile:
        buf = afile.read()
        hasher.update(buf)
    return hasher.hexdigest()

def get_executables_from_bat(file_path):
    executables = []
    with open(file_path, 'r') as bat_file:
        for line in bat_file:
            line = line.strip()
            if line and not line.startswith('rem'):
                # Aqui você pode adicionar lógica adicional para extrair executáveis ou comandos
                executables.append(line)
    return executables

def main():
    if not is_admin():
        print("Re-launching as admin!")
        run_as_admin()
        return

    try:
        uri = "mongodb+srv://rieidigamer:[email protected]/?retryWrites=true&w=majority"
        client = pymongo.MongoClient(uri)
        database = client["antivirus"]
        collection = database["antivirus1"]

        all_hashes = [doc.get("hash", "") for doc in collection.find({}, {"hash": 1})]

        for proc in psutil.process_iter(['pid', 'name', 'exe', 'cmdline', 'parent']):
            if proc.info['name'].lower() == 'cmd.exe' and proc.info['cmdline']:
                cmdline = " ".join(proc.info['cmdline']).lower()
                if 'c:\\windows\\system32\\cmd.exe' in cmdline:
                    for arg in proc.info['cmdline']:
                        if arg.endswith('.bat') and os.path.exists(arg):
                            print(f"Detectado arquivo .bat: {arg}")
                            executables = get_executables_from_bat(arg)
                            for executable in executables:
                                print(f"Detectado comando ou executável: {executable}")
                                # Aqui você pode adicionar lógica para comparar hashes e agir conforme necessário
                                # ...
    except pymongo.errors.ConnectionFailure as e:
        print(f"Erro ao conectar ao MongoDB: {e}")

    finally:
        client.close()

if __name__ == "__main__":
    main()

 

Link para o comentário
Compartilhar em outros sites

17 minutos atrás, rieidi_gamer disse:
def get_executables_from_bat(file_path):
    executables = []
    with open(file_path, 'r') as bat_file:
        for line in bat_file:
            line = line.strip()
            if line and not line.startswith('rem'):
                # Aqui você pode adicionar lógica adicional para extrair executáveis ou comandos
                executables.append(line)
    return executables

voce tá falando desse trecho? conhece a estrurura de um arquivo BAT?

Vou dar um exemplo simples

REM esse codigo chama um executaveis externos
C:\WINDOWS\EXPLORER.EXE
C:\GAMES\CS\cs.exe

REM esse pedaço chama um comando do sistema (executa comando do proprio sistema operacional)
copy c:*.* d:
del *.*

REM esse trecho na pratica não exibe nada.. só seta o path
PATH = c:\windows\;c:\games\

REM Esse comando aqui abre outra bat
start c:\xxx.bat

Esse é um arquivo BAT todos esses comando dentro do mesmo arquivo... na pratica só os dois primeiros comandos vão aparecer no gerenciador de tarefas.. por que são os "verdadeiros executaveis" , os comando copy e del se não me engano aparcem como o processo "SYSTEM"..

 

pelo que entendi o que voce quer fazer, o BAT em si não seria um arquivo ESCANEADO pelo antivirus.

Link para o comentário
Compartilhar em outros sites

  • Solução
14 horas atrás, rieidi_gamer disse:

E possível ver o script que o cmd está executando certo? E existe algum tipo de forma de conseguir o diretorio do .Bat pelo cmd que esta sendo executado?(acredito que não)

Não entendi.. como assim diretorio?

 

9 horas atrás, rieidi_gamer disse:

tenho outra duvida e com .vbs seria a mesma coisa?

Exatamente.,.. isso um arquivo de script como BAT.. só que ainda mais complexo... 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!