Save as mcdecryptor.py. Requires cryptography library (pip install cryptography).
#!/usr/bin/env python3
import argparse
import os
import sys
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from binascii import unhexlify
MAGIC = b"MCDEC01\n"
NONCE_SIZE = 12
TAG_SIZE = 16
def load_key(hexkey):
if hexkey is None:
key_hex = os.environ.get("MC_KEY")
if not key_hex:
raise SystemExit("No key provided via -k and MC_KEY not set")
hexkey = key_hex
try:
key = unhexlify(hexkey)
except Exception:
raise SystemExit("Key must be hex")
if len(key) != 32:
raise SystemExit("Key must be 32 bytes (64 hex chars) for AES-256")
return key
def decrypt_file(in_path, out_path, key):
with open(in_path, "rb") as f:
header = f.read(len(MAGIC))
if header != MAGIC:
raise SystemExit("Input file has invalid header/magic")
nonce = f.read(NONCE_SIZE)
rest = f.read()
if len(nonce) != NONCE_SIZE or len(rest) < TAG_SIZE:
raise SystemExit("Input file too short or malformed")
ciphertext, tag = rest[:-TAG_SIZE], rest[-TAG_SIZE:]
aesgcm = AESGCM(key)
try:
plaintext = aesgcm.decrypt(nonce, ciphertext + tag, header)
except Exception:
raise SystemExit("Decryption failed or authentication tag mismatch")
if out_path:
with open(out_path, "wb") as out:
out.write(plaintext)
else:
sys.stdout.buffer.write(plaintext)
def main():
p = argparse.ArgumentParser(description="mcdecryptor: decrypt AES-256-GCM files")
p.add_argument("-k", "--key", help="Hex-encoded 32-byte key (64 hex chars)")
p.add_argument("-i", "--input", required=True, help="Input encrypted file")
p.add_argument("-o", "--output", help="Output plaintext file (defaults to stdout)")
args = p.parse_args()
key = load_key(args.key)
decrypt_file(args.input, args.output, key)
if __name__ == "__main__":
main()
| Flag | Description |
|------|-------------|
| -i | Input JSON file path |
| -o | Output file (optional) |
| --json | Output as JSON |
| --show-expired | Include expired tokens |
See LICENSE and ETHICS.md
Run the analysis command:
java -jar mcdecryptor.jar analyze --path "C:\Users\YourName\Desktop\MyLockedSurvival"
The tool will output something like:
[INFO] Lock detected: WorldGuard region protection (AES-128)
[INFO] Owner UUID: 1234abcd-... (unknown player)
[INFO] Lock strength: Moderate
This lets the tool automatically derive keys from password input and perform integrity checks.
Use the decrypt command:
java -jar mcdecryptor.jar decrypt --path "C:\Users\YourName\Desktop\MyLockedSurvival" --force
The --force flag instructs MCDeCryptor to ignore missing owner credentials and remove the lock entirely.