Cipher detection + automated decryption via Ciphey, Cyberchef recipes, hashcat hash-ID, format conversion, common encoding chains.
62
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
Fix and improve this skill with Tessl
tessl review fix ./packages/decepticon/decepticon/skills/standard/exploit/crypto/SKILL.mdWhen you have unknown ciphertext (CTF flag, leaked DB field, captured token, encoded payload), the right tool depends on the cipher class.
# Ciphey — original (Python, slowed maintenance)
ciphey -t "$CIPHERTEXT"
# Ares — Rust rewrite (faster, current)
ares -t "$CIPHERTEXT"A*-search across 16+ decoders (base64, base85, hex, Caesar, ROT-N, Atbash, Vigenere, XOR-known-plaintext, URL encoding, binary, morse, brainfuck, esolang, leetspeak, etc.) + BERT plaintext detector to know when to stop.
hashid -m '$2a$12$....' # bcrypt 12 rounds
hashid -m '5f4dcc3b5aa765d61d8327deb882cf99' # MD5
hash-identifier# JWT
echo $TOKEN | cut -d. -f1-2 | tr '_-' '/+' | base64 -d 2>/dev/null
# Hex → bytes
echo "$HEX" | xxd -r -p
# Base64 → bytes (handle URL-safe)
echo "$B64" | tr '_-' '/+' | base64 -d 2>/dev/null
# Multi-encoded (unwind layers)
echo "$BLOB" | base64 -d | base64 -d | xxd -r -p| Cipher | Signature |
|---|---|
| Base64 | [A-Za-z0-9+/=]+, len multiple of 4 |
| Base32 | [A-Z2-7=]+ |
| Hex | [0-9a-fA-F]+, even length |
| Caesar/ROT | only A-Z + spaces, freq-attack ready |
| Vigenere | A-Z, multiple-of-key-length repeating bigrams |
| Substitution | A-Z, IC ≈ 0.066 (English) |
| Vernam/OTP | random-looking bytes, no statistical signal |
| XOR fixed-key | bytes w/ printable XOR'd against pattern (file headers leak) |
| Hill | small block size, matrix-based |
CyberChef (gchq.github.io/CyberChef) is the GUI workhorse but recipes can be exported as JSON and chained programmatically:
# Common chains
"From Base64 / Magic / To Hex"
"From Hex / XOR (Brute) / Magic"
"AES Decrypt(KEY) / From Hex / Strings"CLI version: cyberchef-cli (community port).
| Mode | Hash type |
|---|---|
| 0 | MD5 |
| 100 | SHA-1 |
| 1400 | SHA-256 |
| 1700 | SHA-512 |
| 1000 | NTLM |
| 13100 | Kerberos TGS-REP (etype 23) |
| 19700 | Kerberos TGS-REP (etype 18) |
| 18200 | Kerberos AS-REP |
| 16500 | JWT (HS256) |
| 3200 | bcrypt |
| 7400 | sha256crypt $5$ |
| 1800 | sha512crypt $6$ |
| 22000 | WPA-EAPOL+PMKID |
| 7100 | macOS v10.8+ (PBKDF2-SHA512) |
| 8200 | 1Password Cloud Keychain |
hashcat -m <mode> hashes.txt rockyou.txt -r best64.rule
john --format=<format> hashes.txt --wordlist=rockyou.txtFor a mystery token captured in HTTP traffic:
1. ciphey/ares → reveal base layer
2. If structured (JSON / proto3 / msgpack) → parse
3. If still encoded → repeat step 1
4. Look for HMAC / signature suffix → identify symmetric key candidates
5. If symmetric encryption suspected → try AES-CBC/GCM w/ common keys
(app-name, "secret", env vars exposed elsewhere)Wrap as MCP tool:
# decepticon/tools/crypto/decode.py — skeleton
def crypto_decode(ciphertext: str, hint: str = None, timeout: int = 30) -> dict:
"""Try ares first (fast), fallback to ciphey, return best decode."""
import subprocess
cmd = ["ares", "-t", ciphertext]
if hint:
cmd += ["--language", hint]
r = subprocess.run(cmd, timeout=timeout, capture_output=True, text=True)
return {
"tool": "ares",
"output": r.stdout,
"confidence": _parse_ares_confidence(r.stdout),
}Promote to KG when classification succeeds:
kg_add_node(kind="artifact", label=f"decoded:{hash}",
props={"plaintext": result, "encoding_chain": chain})| Decoded content | Severity |
|---|---|
| Plaintext password | Critical (depends on user role) |
| API key / private key | Critical |
| Internal hostname / IP | Medium |
| Session token | High-Critical |
| Encryption key | Critical |
skills/exploit/web/jwt/SKILL.mdskills/ad/dcsync/SKILL.mde34afba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.