From cef0c7fb4aab4595c5650f4bfe6a1586fc62f661 Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:41:37 -0300 Subject: [PATCH 1/7] Update malware_analysis.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionar .env para guardar dados de autenticação vírus total --- malware_analysis.py | 136 ++++++++++++++++++++++++++++++-------------- 1 file changed, 94 insertions(+), 42 deletions(-) diff --git a/malware_analysis.py b/malware_analysis.py index 340d433..24b3c49 100644 --- a/malware_analysis.py +++ b/malware_analysis.py @@ -1,4 +1,4 @@ -pip install requests pefile +# -*- coding: utf-8 -*- import requests import hashlib @@ -6,75 +6,127 @@ import sys import os -# Insira sua chave de API do VirusTotal aqui -VIRUSTOTAL_API_KEY = 'SUA_CHAVE_DE_API' +# --- INÍCIO DA CONFIGURAÇÃO --- + +# 1. Pega a chave da API a partir de uma variável de ambiente para mais segurança. +VIRUSTOTAL_API_KEY = os.getenv('VIRUSTOTAL_API_KEY') + +# --- FIM DA CONFIGURAÇÃO --- + +def check_api_key(): + """Verifica se a chave da API foi carregada corretamente.""" + if not VIRUSTOTAL_API_KEY: + print("\n[ERRO] A variável de ambiente 'VIRUSTOTAL_API_KEY' não foi definida.") + print("Instruções:") + print(" - Windows (CMD): set VIRUSTOTAL_API_KEY=\"sua_chave_aqui\"") + print(" - Windows (PowerShell): $env:VIRUSTOTAL_API_KEY=\"sua_chave_aqui\"") + print(" - Linux/macOS: export VIRUSTOTAL_API_KEY=\"sua_chave_aqui\"") + sys.exit(1) # Encerra o script com um código de erro -# Função para calcular o hash SHA-256 de um arquivo def calculate_sha256(file_path): + """Calcula o hash SHA-256 de um arquivo de forma eficiente.""" sha256_hash = hashlib.sha256() - with open(file_path, "rb") as f: - for byte_block in iter(lambda: f.read(4096), b""): - sha256_hash.update(byte_block) - return sha256_hash.hexdigest() + try: + with open(file_path, "rb") as f: + for byte_block in iter(lambda: f.read(4096), b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + except IOError as e: + print(f"Erro ao ler o arquivo: {e}") + return None -# Função para verificar o hash no VirusTotal def check_virustotal(file_hash): + """Verifica o hash no VirusTotal com tratamento de erros robusto.""" + print("\n--- Verificando no VirusTotal ---") url = f"https://www.virustotal.com/api/v3/files/{file_hash}" - headers = { - "x-apikey": VIRUSTOTAL_API_KEY - } - response = requests.get(url, headers=headers) - if response.status_code == 200: + headers = {"x-apikey": VIRUSTOTAL_API_KEY} + + try: + # Adiciona um timeout de 15 segundos para evitar que o script trave + response = requests.get(url, headers=headers, timeout=15) + + # O VirusTotal retorna 404 para hashes que nunca viu. Tratamos isso como "não encontrado". + if response.status_code == 404: + print("Hash não encontrado no banco de dados do VirusTotal.") + return None, None + + # Lança uma exceção para outros erros HTTP (ex: 401 Unauthorized, 429 Rate Limit) + response.raise_for_status() + json_response = response.json() - positives = json_response["data"]["attributes"]["last_analysis_stats"]["malicious"] - total = json_response["data"]["attributes"]["last_analysis_stats"]["total"] + + # Usamos .get() para evitar erros caso a estrutura da resposta mude + stats = json_response.get("data", {}).get("attributes", {}).get("last_analysis_stats", {}) + + if not stats: + print("Nenhuma análise encontrada para este hash.") + return 0, 0 + + positives = stats.get("malicious", 0) + total = sum(stats.values()) return positives, total - else: - print("Erro ao consultar o VirusTotal:", response.status_code) + + except requests.exceptions.RequestException as e: + print(f"Erro de rede ao consultar o VirusTotal: {e}") + return None, None + except Exception as e: + print(f"Ocorreu um erro inesperado ao processar a resposta do VirusTotal: {e}") return None, None -# Função para realizar análise estática em um executável PE def analyze_pe_file(file_path): + """Realiza análise estática em um executável PE, extraindo mais informações.""" + print("\n--- Análise Estática do Arquivo PE ---") try: pe = pefile.PE(file_path) - print("\n--- Informações do Executável PE ---") - print("Número de seções:", len(pe.sections)) - for section in pe.sections: - print(f"Seção: {section.Name.decode().strip()}, Tamanho: {section.SizeOfRawData}") - print("Entrypoint:", hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)) - print("Imagem Base:", hex(pe.OPTIONAL_HEADER.ImageBase)) + + print(f"EntryPoint: {hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)}") + print(f"ImageBase: {hex(pe.OPTIONAL_HEADER.ImageBase)}") + print(f"Número de Seções: {len(pe.sections)}") + + # Extrai as DLLs importadas, um forte indicador de funcionalidade + print("\n[+] DLLs Importadas:") + if hasattr(pe, 'DIRECTORY_ENTRY_IMPORT'): + for entry in pe.DIRECTORY_ENTRY_IMPORT: + # Usamos .decode com 'errors=ignore' para evitar problemas com nomes de DLL malformados + print(f" - {entry.dll.decode('utf-8', errors='ignore')}") + else: + print(" Nenhuma DLL importada encontrada (o arquivo pode ser 'packed').") + except pefile.PEFormatError: - print("O arquivo não é um executável PE válido.") + print("Erro: O arquivo não parece ser um executável PE válido.") + except Exception as e: + print(f"Ocorreu um erro inesperado durante a análise do PE: {e}") -# Função principal para realizar a análise de malware def analyze_file(file_path): + """Função principal que orquestra a análise completa do arquivo.""" if not os.path.isfile(file_path): - print("Arquivo não encontrado.") + print(f"Erro: Arquivo não encontrado em '{file_path}'") return - print("Iniciando análise de:", file_path) + print(f"Iniciando análise de: {os.path.basename(file_path)}") - # Calcula o hash SHA-256 do arquivo file_hash = calculate_sha256(file_path) - print("Hash SHA-256:", file_hash) + if not file_hash: + return # Encerra se não foi possível calcular o hash + + print(f"Hash SHA-256: {file_hash}") - # Verifica o hash no VirusTotal positives, total = check_virustotal(file_hash) if positives is not None: - print(f"Detecções no VirusTotal: {positives}/{total}") - else: - print("Não foi possível verificar o hash no VirusTotal.") + print(f"Resultado: {positives}/{total} detecções maliciosas.") + if positives > 0: + print("[ALERTA] O arquivo foi identificado como malicioso por um ou mais antivírus.") - # Realiza análise estática no caso de executáveis PE - if file_path.endswith(('.exe', '.dll')): + if file_path.lower().endswith(('.exe', '.dll', '.sys')): analyze_pe_file(file_path) else: - print("Análise estática disponível apenas para arquivos PE (EXE/DLL).") + print("\nAnálise estática de PE não aplicável (apenas para .exe, .dll, .sys).") -# Uso do script: python script.py if __name__ == "__main__": + check_api_key() # Primeiro, verifica se a chave existe + if len(sys.argv) != 2: - print("Uso: python script.py ") + print("\nUso: python seu_script.py ") else: - file_path = sys.argv[1] - analyze_file(file_path) + file_to_analyze = sys.argv[1] + analyze_file(file_to_analyze) From 1132390cf3b18eddccc789e1456236eaf853769b Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:46:25 -0300 Subject: [PATCH 2/7] Update README.md --- README.md | 65 +++++++++++++++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 94f2981..9996ba4 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,56 @@ -# Analisador de Malware - +Analisador de Malware Este script realiza uma análise básica de arquivos suspeitos, verificando seu hash no VirusTotal e extraindo informações estáticas de executáveis PE (Portable Executable - EXE/DLL). -# Funcionalidades - +## Funcionalidades Calcula o hash SHA-256 do arquivo. Verifica se o hash já foi analisado no VirusTotal. -Exibe a quantidade de detecções de malware no VirusTotal. - -Para arquivos PE (EXE/DLL), exibe informações das seções e do header PE. - -# Requisitos - -Certifique-se de ter o Python 3 instalado. Instale as dependências executando: - -pip install requests pefile - -# Uso - -Execute o script passando o caminho do arquivo como argumento: +Exibe a quantidade de detecções de malware. -python script.py +Para arquivos PE (EXE/DLL), exibe informações do header e das DLLs importadas. -# Exemplo de execução: +## Requisitos +Python 3.x +Uma chave de API gratuita do VirusTotal. -python script.py exemplo.exe +## Instalação e Configuração +Siga os passos abaixo para preparar o ambiente. -# 🔑 Configuração da API do VirusTotal +### 1. Instale as Dependências +Certifique-se de ter o Python 3 e o Pip instalados. Em seguida, execute o comando abaixo no seu terminal para instalar as bibliotecas necessárias: pip install requests pefile -Para utilizar a verificação no VirusTotal, insira sua chave de API na variável VIRUSTOTAL_API_KEY dentro do script: +### 2. Configure a Chave da API do VirusTotal +Por segurança, a chave de API deve ser configurada como uma variável de ambiente e não diretamente no código. -VIRUSTOTAL_API_KEY = 'SUA_CHAVE_DE_API' +No Windows (PowerShell): -Você pode obter uma chave gratuita criando uma conta no VirusTotal. +PowerShell -# Como Funciona +$env:VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" +No Windows (CMD tradicional): DOS +set VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" -O script calcula o SHA-256 do arquivo. +No Linux ou macOS: export VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" +Importante: Substitua SUA_CHAVE_DE_API_AQUI pela sua chave real. Você pode obter uma chave gratuita criando uma conta no site do VirusTotal. -Verifica se o hash está presente no VirusTotal. +## Como Usar +Com as dependências instaladas e a variável de ambiente configurada, execute o script passando o caminho do arquivo como argumento: python script.py -Se for um executável PE (EXE/DLL), exibe informações das seções e do EntryPoint. +Exemplo de execução: python script.py exemplo.exe +## Como Funciona +O script calcula o hash SHA-256 do arquivo fornecido. -# Aviso +Ele envia este hash para a API do VirusTotal para verificar se já existe uma análise. -O script não executa o arquivo; ele apenas analisa estáticamente. +Se for um executável PE (EXE/DLL), ele utiliza a biblioteca pefile para analisar sua estrutura interna, exibindo o EntryPoint e as DLLs importadas. -Ele não substitui uma solução antivírus completa. +## Aviso +Este script não executa o arquivo; a análise é puramente estática e segura. -Certifique-se de não compartilhar sua chave de API publicamente. +A ferramenta serve para uma triagem inicial e não substitui uma solução antivírus completa. -# Licença +Nunca compartilhe sua chave de API publicamente. +## Licença Este projeto é distribuído sob a licença MIT. Sinta-se à vontade para modificá-lo e distribuí-lo conforme necessário. From 667f288f9cc66e28830d2d57d5c826a198867d6c Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:46:40 -0300 Subject: [PATCH 3/7] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9996ba4..9e64774 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -Analisador de Malware +## Analisador de Malware + Este script realiza uma análise básica de arquivos suspeitos, verificando seu hash no VirusTotal e extraindo informações estáticas de executáveis PE (Portable Executable - EXE/DLL). ## Funcionalidades From a342691401d98fdd996a4ae40bfb8bef83111493 Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:48:43 -0300 Subject: [PATCH 4/7] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9e64774..1cc033d 100644 --- a/README.md +++ b/README.md @@ -24,15 +24,15 @@ Certifique-se de ter o Python 3 e o Pip instalados. Em seguida, execute o comand ### 2. Configure a Chave da API do VirusTotal Por segurança, a chave de API deve ser configurada como uma variável de ambiente e não diretamente no código. -No Windows (PowerShell): - -PowerShell - +No Windows (PowerShell): PowerShell $env:VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" + No Windows (CMD tradicional): DOS set VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" -No Linux ou macOS: export VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" +No Linux ou macOS: Terminal +export VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" + Importante: Substitua SUA_CHAVE_DE_API_AQUI pela sua chave real. Você pode obter uma chave gratuita criando uma conta no site do VirusTotal. ## Como Usar From 0bf931e5d7494bae9011b88c1fd99e66a1f4ff21 Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:49:04 -0300 Subject: [PATCH 5/7] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1cc033d..2ee433b 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Para arquivos PE (EXE/DLL), exibe informações do header e das DLLs importadas. ## Requisitos Python 3.x + Uma chave de API gratuita do VirusTotal. ## Instalação e Configuração From b087d06bc16a259d764765fa89bf472df2c8e090 Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 20:50:04 -0300 Subject: [PATCH 6/7] Update README.md --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ee433b..7a483dc 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,16 @@ Certifique-se de ter o Python 3 e o Pip instalados. Em seguida, execute o comand ### 2. Configure a Chave da API do VirusTotal Por segurança, a chave de API deve ser configurada como uma variável de ambiente e não diretamente no código. -No Windows (PowerShell): PowerShell +No Windows (PowerShell): + $env:VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" -No Windows (CMD tradicional): DOS +No Windows (CMD tradicional): + set VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" -No Linux ou macOS: Terminal +No Linux ou macOS (Terminal): + export VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" Importante: Substitua SUA_CHAVE_DE_API_AQUI pela sua chave real. Você pode obter uma chave gratuita criando uma conta no site do VirusTotal. From 3ab595625a6a70e7c1fa33135847261f876dca72 Mon Sep 17 00:00:00 2001 From: Maguin <40328128+Null-bin@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:03:41 -0300 Subject: [PATCH 7/7] Update README.md --- README.md | 69 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 7a483dc..83181eb 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,74 @@ -## Analisador de Malware +### Analisador de Malware com Python +Este é um conjunto de scripts de segurança para realizar análises rápidas (triagem) em arquivos e URLs suspeitas. -Este script realiza uma análise básica de arquivos suspeitos, verificando seu hash no VirusTotal e extraindo informações estáticas de executáveis PE (Portable Executable - EXE/DLL). +## Ferramentas Incluídas +Analisador de Arquivos (analisador.py): Verifica o hash de um arquivo no VirusTotal e extrai informações estáticas de executáveis (.exe/.dll). -## Funcionalidades -Calcula o hash SHA-256 do arquivo. +Verificador de URL (verificar_url.py): Consulta a reputação de uma URL ou domínio na API do VirusTotal. -Verifica se o hash já foi analisado no VirusTotal. +Extrator de Metadados (extrator_exif.py): Exibe dados EXIF ocultos em arquivos de imagem. -Exibe a quantidade de detecções de malware. +Monitor de Rede (monitor_rede.py): Lista as conexões de rede ativas e os processos associados. -Para arquivos PE (EXE/DLL), exibe informações do header e das DLLs importadas. - -## Requisitos -Python 3.x +## Requisitos Gerais +Python 3.6+ Uma chave de API gratuita do VirusTotal. ## Instalação e Configuração -Siga os passos abaixo para preparar o ambiente. - ### 1. Instale as Dependências -Certifique-se de ter o Python 3 e o Pip instalados. Em seguida, execute o comando abaixo no seu terminal para instalar as bibliotecas necessárias: pip install requests pefile +Cada script pode ter dependências específicas. Para instalar todas de uma vez, execute: + +pip install requests pefile Pillow psutil ### 2. Configure a Chave da API do VirusTotal -Por segurança, a chave de API deve ser configurada como uma variável de ambiente e não diretamente no código. +Para os scripts que usam o VirusTotal, a chave de API deve ser configurada como uma variável de ambiente para maior segurança. No Windows (PowerShell): $env:VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" - No Windows (CMD tradicional): set VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" - No Linux ou macOS (Terminal): export VIRUSTOTAL_API_KEY="SUA_CHAVE_DE_API_AQUI" +Importante: Substitua SUA_CHAVE_DE_API_AQUI pela sua chave real. + +## Como Usar os Scripts +Execute cada script a partir do terminal, passando os argumentos necessários. + +### Analisador de Arquivos + +python analisador.py + +Exemplo: +python analisador.py "C:\Users\Downloads\programa.exe" + +### Verificador de URL + +python verificar_url.py + +Exemplo: +python verificar_url.py "http://site-suspeito.com/login.php" + +### Extrator de Metadados -Importante: Substitua SUA_CHAVE_DE_API_AQUI pela sua chave real. Você pode obter uma chave gratuita criando uma conta no site do VirusTotal. +python extrator_exif.py -## Como Usar -Com as dependências instaladas e a variável de ambiente configurada, execute o script passando o caminho do arquivo como argumento: python script.py +Exemplo: +python extrator_exif.py "C:\Fotos\minha_foto.jpg" -Exemplo de execução: python script.py exemplo.exe -## Como Funciona -O script calcula o hash SHA-256 do arquivo fornecido. +### Monitor de Rede -Ele envia este hash para a API do VirusTotal para verificar se já existe uma análise. +python monitor_rede.py -Se for um executável PE (EXE/DLL), ele utiliza a biblioteca pefile para analisar sua estrutura interna, exibindo o EntryPoint e as DLLs importadas. +Dica: Para melhores resultados, execute este script como administrador (ou com sudo no Linux/macOS). -## Aviso -Este script não executa o arquivo; a análise é puramente estática e segura. +## ⚠️ Aviso +Estas ferramentas realizam análises estáticas e de reputação, elas não executam nenhum arquivo. -A ferramenta serve para uma triagem inicial e não substitui uma solução antivírus completa. +Elas servem como uma primeira camada de análise e não substituem uma solução corporativa completa. Nunca compartilhe sua chave de API publicamente.