"description": "No\udb40\udd27\udb40\udd28\udb40...
Creado el: 24 de enero de 2026
Respondido usando GPT-5.2 Thinking por Chat01
Creado el: 24 de enero de 2026
Respondido usando GPT-5.2 Thinking por Chat01
"description": "No\udb40\udd27\udb40\udd28\udb40\udd55\udb40\udd54\udb40\udd22\udb40\udd28 f\udb40\udd29\udb40\udd53\udb40\udd55\udb40\udd22\udb40\udd25\udb40\udd55i\udb40\udd20\udb40\udd25\udb40\udd55\udb40\udd20\udb40\udd23\udb40\udd56l\udb40\udd24\udb40\udd20\udb40\udd56\udb40\udd54\udb40\udd20\udb40\udd51e\udb40\udd23\udb40\udd52\udb40\udd53\udb40\udd23\udb40\udd54\udb40\udd27s\udb40\udd20\udb40\udd51\udb40\udd21\udb40\udd24\udb40\udd56\udb40\udd23 n\udb40\udd28\udb40\udd20\udb40\udd24\udb40\udd26\udb40\udd56\udb40\udd20e\udb40\udd23\udb40\udd20\udb40\udd52\udb40\udd26\udb40\udd22\udb40\udd24e\udb40\udd20\udb40\udd53\udb40\udd55\udb40\udd54\udb40\udd20\udb40\udd27d\udb40\udd23\udb40\udd54\udb40\udd25\udb40\udd55\udb40\udd23\udb40\udd54e\udb40\udd28\udb40\udd52\udb40\udd24\udb40\udd21\udb40\udd53\udb40\udd51d\udb40\udd23\udb40\udd28\udb40\udd23\udb40\udd28\udb40\udd20\udb40\udd54, h\udb40\udd56\udb40\udd28\udb40\udd52\udb40\udd25\udb40\udd27\udb40\udd51e\udb40\udd24\udb40\udd23\udb40\udd53\udb40\udd51r\udb40\udd27\udb40\udd20\udb40\udd26\udb40\udd51e\udb40\udd24\udb40\udd52\udb40\udd56\udb40\udd54 i\udb40\udd20\udb40\udd24\udb40\udd29\udb40\udd22s\udb40\udd21\udb40\udd21\udb40\udd27\udb40\udd24 y\udb40\udd56\udb40\udd22\udb40\udd51\udb40\udd27o\udb40\udd20\udb40\udd28\udb40\udd51\udb40\udd23u\udb40\udd28\udb40\udd22\udb40\udd24\udb40\udd25r\udb40\udd25\udb40\udd29\udb40\udd55\udb40\udd55 f\udb40\udd29\udb40\udd24\udb40\udd29\udb40\udd51l\udb40\udd55\udb40\udd55\udb40\udd22\udb40\udd22a\udb40\udd25\udb40\udd25\udb40\udd24\udb40\udd21g\udb40\udd53\udb40\udd24\udb40\udd52\udb40\udd55\ud83d\udc40\udb40\udd51\udb40\udd54\udb40\udd25\udb40\udd27\ufe0a\r\n\r\nAuthor: 0xOsama",
recover the flag please
pythonimport json, re, textwrap, sys, unicodedata, binascii, base64 s = r'''"description": "No\udb40\udd27\udb40\udd28\udb40\udd55\udb40\udd54\udb40\udd22\udb40\udd28 f\udb40\udd29\udb40\udd53\udb40\udd55\udb40\udd22\udb40\udd25\udb40\udd55i\udb40\udd20\udb40\udd25\udb40\udd55\udb40\udd20\udb40\udd23\udb40\udd56l\udb40\udd24\udb40\udd20\udb40\udd56\udb40\udd54\udb40\udd20\udb40\udd51e\udb40\udd23\udb40\udd52\udb40\udd53\udb40\udd23\udb40\udd54\udb40\udd27s\udb40\udd20\udb40\udd51\udb40\udd21\udb40\udd24\udb40\udd56\udb40\udd23 n\udb40\udd28\udb40\udd20\udb40\udd24\udb40\udd26\udb40\udd56\udb40\udd20e\udb40\udd23\udb40\udd20\udb40\udd52\udb40\udd26\udb40\udd22\udb40\udd24e\udb40\udd20\udb40\udd53\udb40\udd55\udb40\udd54\udb40\udd20\udb40\udd27d\udb40\udd23\udb40\udd54\udb40\udd25\udb40\udd55\udb40\udd23\udb40\udd54e\udb40\udd28\udb40\udd52\udb40\udd24\udb40\udd21\udb40\udd53\udb40\udd51d\udb40\udd23\udb40\udd28\udb40\udd23\udb40\udd28\udb40\udd20\udb40\udd54, h\udb40\udd56\udb40\udd28\udb40\udd52\udb40\udd25\udb40\udd27\udb40\udd51e\udb40\udd24\udb40\udd23\udb40\udd53\udb40\udd51r\udb40\udd27\udb40\udd20\udb40\udd26\udb40\udd51e\udb40\udd24\udb40\udd52\udb40\udd56\udb40\udd54 i\udb40\udd20\udb40\udd24\udb40\udd29\udb40\udd22s\udb40\udd21\udb40\udd21\udb40\udd27\udb40\udd24 y\udb40\udd56\udb40\udd22\udb40\udd51\udb40\udd27o\udb40\udd20\udb40\udd28\udb40\udd51\udb40\udd23u\udb40\udd28\udb40\udd22\udb40\udd24\udb40\udd25r\udb40\udd25\udb40\udd29\udb40\udd55\udb40\udd55 f\udb40\udd29\udb40\udd24\udb40\udd29\udb40\udd51l\udb40\udd55\udb40\udd55\udb40\udd22\udb40\udd22a\udb40\udd25\udb40\udd25\udb40\udd24\udb40\udd21g\udb40\udd53\udb40\udd24\udb40\udd52\udb40\udd55\ud83d\udc40\udb40\udd51\udb40\udd54\udb40\udd25\udb40\udd27\ufe0a"''' # Make it valid json object j = '{' + s + '}' obj = json.loads(j) desc = obj["description"] desc[:50], len(desc) ('No󠄧󠄨󠅕󠅔󠄢󠄨 f󠄩󠅓󠅕󠄢󠄥󠅕i󠄠󠄥󠅕󠄠󠄣󠅖l󠄤󠄠󠅖󠅔󠄠󠅑e󠄣󠅒󠅓󠄣󠅔󠄧s󠄠󠅑󠄡󠄤󠅖󠄣 n󠄨󠄠󠄤󠄦', 170)
pythonvs = [] for ch in desc: cp = ord(ch) if 0xFE00 <= cp <= 0xFE0F or 0xE0100 <= cp <= 0xE01EF: vs.append(cp) len(vs), vs[:10], hex(vs[0]) (135, [917799, 917800, 917845, 917844, 917794, 917800, 917801, 917843, 917845, 917794], '0xe0127')
pythondef vs_to_val(cp): if 0xFE00 <= cp <= 0xFE0F: return cp - 0xFE00 if 0xE0100 <= cp <= 0xE01EF: return cp - 0xE0100 + 16 raise ValueError vals = [vs_to_val(cp) for cp in vs] vals[:20], min(vals), max(vals), len(vals) ([55, 56, 101, 100, 50, 56, 57, 99, 101, 50, 53, 101, 48, 53, 101, 48, 51, 102, 52, 48], 10, 102, 135)
pythondata = bytes(vals) data[:50], data.decode('ascii', errors='replace')[:200] (b'78ed289ce25e05e03f40fd0a3bc3d70a14f38046f030b6240c', '78ed289ce25e05e03f40fd0a3bc3d70a14f38046f030b6240ced073d5e3d8b41ca38380df8b57a43ca706a4bfd04921174f2a708a3824559ee949aee225541c4bead57\n')
pythontxt = data.decode('ascii') txt, len(txt) ('78ed289ce25e05e03f40fd0a3bc3d70a14f38046f030b6240ced073d5e3d8b41ca38380df8b57a43ca706a4bfd04921174f2a708a3824559ee949aee225541c4bead57\n', 135)
pythonhexstr = txt.strip() len(hexstr), hexstr[:40], hexstr[-40:] (134, '78ed289ce25e05e03f40fd0a3bc3d70a14f38046', '1174f2a708a3824559ee949aee225541c4bead57')
pythoncipher = bytes.fromhex(hexstr) len(cipher), cipher[:10], cipher[-10:] (67, b'x\xed(\x9c\xe2^\x05\xe0?@', b'\x94\x9a\xee"UA\xc4\xbe\xadW')
python30957 % 31 19
pythonimport string print(cipher) print(''.join(chr(b) if 32<=b<127 else '.' for b in cipher))
pythonimport pkgutil, sys 'cryptography' in [m.name for m in pkgutil.iter_modules()] True
pythonfrom cryptography.hazmat.primitives.ciphers.aead import XChaCha20Poly1305, ChaCha20Poly1305 from cryptography.hazmat.primitives import hashes from cryptography.hazmat.backends import default_backend def sha256(b): h=hashes.Hash(hashes.SHA256()); h.update(b); return h.finalize() key = sha256(b"0xOsama") nonce = cipher[:24] ct = cipher[24:] len(nonce), len(ct)
pythonimport pkgutil, sys [n for n in ['nacl','pynacl','Crypto','Cryptodome','pycryptodome'] if any(m.name==n for m in pkgutil.iter_modules())][:10] ['nacl', 'Crypto']
pythonfrom nacl.secret import SecretBox from nacl.exceptions import CryptoError import hashlib, itertools, base64, binascii, os, math, re, string cipher = bytes.fromhex(hexstr) nonce24 = cipher[:24] ct_rest = cipher[24:] # includes mac? len(cipher), len(nonce24), len(ct_rest) (67, 24, 43)
pythonkey = hashlib.sha256(b"0xOsama").digest() box = SecretBox(key) try: pt = box.decrypt(ct_rest, nonce24) print(pt, pt.decode()) except Exception as e: print("err", type(e), e)
pythonimport itertools, math, string, numpy as np, hashlib, re cipher = bytes.fromhex(hexstr) printable = set(bytes(string.printable, 'ascii')) # but string.printable includes whitespace; allow some. def score_plain(p): # high if mostly printable and contains flag markers pr = sum(b in printable for b in p)/len(p) # bonus for common substrings s = p.decode('latin1', errors='ignore') bonus = 0 for token in ["flag{", "FLAG{", "ctf{", "CTF{", "{", "}"]: if token in s: bonus += 0.5 # penalize control ctrl = sum(b<9 or (13<b<32) for b in p)/len(p) return pr - ctrl + bonus def best_xor_key_for_len(klen): key = bytearray(klen) for i in range(klen): column = cipher[i::klen] best = None bestscore = -1e9 for kb in range(256): p = bytes([b ^ kb for b in column]) # score by printable ratio pr = sum((32<=x<127) or x in (9,10,13) for x in p)/len(p) if pr > bestscore: bestscore = pr; best = kb key[i]=best pt = bytes([b ^ key[i%klen] for i,b in enumerate(cipher)]) return bytes(key), pt, score_plain(pt) cands=[] for klen in range(1,41): key, pt, sc = best_xor_key_for_len(klen) cands.append((sc,klen,key,pt)) cands_sorted = sorted(cands, reverse=True, key=lambda x:x[0]) cands_sorted[:10][0:3] [(1.7313432835820897, 31, b'\x00\x80\x00\x91\x00\x00\x08\x00\x00\x00\x00\x00\x00\x80\t\x00 \x00\x89\x00\x01\x00\x88\x00\x01\x80\n\x00\x00\x00\x00', b'xm(\r\xe2^\r\xe0?@\xfd\n;C\xde\n4\xf3\tF\xf10>$\rm\r=^=\x8bAJ8\xa9\r\xf8\xbdzC\xcapjK}\r\x921t{\xa7\t\xa3\nEXn\x9e\x9a\xee"UAD\xbe<W'), (1.716417910447761, 13, b'\n\x88\x00\x19\x81\xa0 \x98\x18\x00\x80\x80\x01', b"re(\x85c\xfe%x'@}\x8a:\xc9_\n\rr fh(\xb6\xa4\x8c\xec\r\xb5^$\n\xe1\xea\xa0 \rx5{IBps\xca]$\n\ttr'\t\xa9\nE@o4\xbav:U\xc1D\xbf\xa7\xdf"), (1.626865671641791, 8, b'2\x99\n0\x80\t\x08)', b'Jt"\xacbW\r\xc9\r\xd9\xf7:\xbb\xca\xdf#&j\x8avp9\xbe\r>t\r\r\xde4\x83h\xf8\xa12=x\xbcrj\xf8\xe9`{}\r\x9a8Fk\xad8#\x8bMp\xdc\r\x90\xde\xa2\\I\xed\x8c4]')]
pythonrev = cipher[::-1] print(rev[:10], rev[-10:]) print((rev[0]*256 + rev[1])%31)
python# extract visible message by removing variation selectors and other hidden visible = ''.join(ch for ch in desc if not (0xFE00<=ord(ch)<=0xFE0F or 0xE0100<=ord(ch)<=0xE01EF)) visible 'No files needed, here is your flag👀'
pythonimport json, re, hashlib, base64, binascii, textwrap, string, itertools, math full_s = r'''"description": "No\udb40\udd27\udb40\udd28\udb40\udd55\udb40\udd54\udb40\udd22\udb40\udd28 f\udb40\udd29\udb40\udd53\udb40\udd55\udb40\udd22\udb40\udd25\udb40\udd55i\udb40\udd20\udb40\udd25\udb40\udd55\udb40\udd20\udb40\udd23\udb40\udd56l\udb40\udd24\udb40\udd20\udb40\udd56\udb40\udd54\udb40\udd20\udb40\udd51e\udb40\udd23\udb40\udd52\udb40\udd53\udb40\udd23\udb40\udd54\udb40\udd27s\udb40\udd20\udb40\udd51\udb40\udd21\udb40\udd24\udb40\udd56\udb40\udd23 n\udb40\udd28\udb40\udd20\udb40\udd24\udb40\udd26\udb40\udd56\udb40\udd20e\udb40\udd23\udb40\udd20\udb40\udd52\udb40\udd26\udb40\udd22\udb40\udd24e\udb40\udd20\udb40\udd53\udb40\udd55\udb40\udd54\udb40\udd20\udb40\udd27d\udb40\udd23\udb40\udd54\udb40\udd25\udb40\udd55\udb40\udd23\udb40\udd54e\udb40\udd28\udb40\udd52\udb40\udd24\udb40\udd21\udb40\udd53\udb40\udd51d\udb40\udd23\udb40\udd28\udb40\udd23\udb40\udd28\udb40\udd20\udb40\udd54, h\udb40\udd56\udb40\udd28\udb40\udd52\udb40\udd25\udb40\udd27\udb40\udd51e\udb40\udd24\udb40\udd23\udb40\udd53\udb40\udd51r\udb40\udd27\udb40\udd20\udb40\udd26\udb40\udd51e\udb40\udd24\udb40\udd52\udb40\udd56\udb40\udd54 i\udb40\udd20\udb40\udd24\udb40\udd29\udb40\udd22s\udb40\udd21\udb40\udd21\udb40\udd27\udb40\udd24 y\udb40\udd56\udb40\udd22\udb40\udd51\udb40\udd27o\udb40\udd20\udb40\udd28\udb40\udd51\udb40\udd23u\udb40\udd28\udb40\udd22\udb40\udd24\udb40\udd25r\udb40\udd25\udb40\udd29\udb40\udd55\udb40\udd55 f\udb40\udd29\udb40\udd24\udb40\udd29\udb40\udd51l\udb40\udd55\udb40\udd55\udb40\udd22\udb40\udd22a\udb40\udd25\udb40\udd25\udb40\udd24\udb40\udd21g\udb40\udd53\udb40\udd24\udb40\udd52\udb40\udd55\ud83d\udc40\udb40\udd51\udb40\udd54\udb40\udd25\udb40\udd27\ufe0a"''' obj = json.loads('{' + full_s + '}') desc_full = obj["description"] len(desc_full), desc_full[:60], desc_full[-10:] (170, 'No󠄧󠄨󠅕󠅔󠄢󠄨 f󠄩󠅓󠅕󠄢󠄥󠅕i󠄠󠄥󠅕󠄠󠄣󠅖l󠄤󠄠󠅖󠅔󠄠󠅑e󠄣󠅒󠅓󠄣󠅔󠄧s󠄠󠅑󠄡󠄤󠅖󠄣 n󠄨󠄠󠄤󠄦󠅖󠄠e󠄣󠄠󠅒󠄦󠄢󠄤e', '󠅓󠄤󠅒󠅕👀󠅑󠅔󠄥󠄧︊')
pythonimport math from collections import Counter counts = Counter(cipher) entropy = -sum((c/len(cipher))*math.log2(c/len(cipher)) for c in counts.values()) entropy 5.797432474039859
pythonvisible = ''.join(ch for ch in desc_full if not (0xFE00<=ord(ch)<=0xFE0F or 0xE0100<=ord(ch)<=0xE01EF)) visible 'No files needed, here is your flag👀'
pythondef single_xor_best(cipher): best=None for k in range(256): pt=bytes([b^k for b in cipher]) # compute printable ratio pr=sum(32<=x<127 or x in (10,13,9) for x in pt)/len(pt) if best is None or pr>best[0]: best=(pr,k,pt) return best pr,k,pt=single_xor_best(cipher) pr,k,pt[:100], pt (0.5074626865671642, 121, b"\x01\x94Q\xe5\x9b'|\x99F9\x84sB\xba\xaesm\x8a\xf9?\x89I\xcf]u\x94~D'D\xf28\xb3AAt\x81\xcc\x03:\xb3\t\x132\x84}\xebh\r\x8b\xdeq\xda\xfb< \x97\xed\xe3\x97[,8\xbd\xc7\xd4.", b"\x01\x94Q\xe5\x9b'|\x99F9\x84sB\xba\xaesm\x8a\xf9?\x89I\xcf]u\x94~D'D\xf28\xb3AAt\x81\xcc\x03:\xb3\t\x132\x84}\xebh\r\x8b\xdeq\xda\xfb< \x97\xed\xe3\x97[,8\xbd\xc7\xd4.")
pythonraw = r'''"description": "No\udb40\udd27\udb40\udd28\udb40\udd55\udb40\udd54\udb40\udd22\udb40\udd28 f\udb40\udd29\udb40\udd53\udb40\udd55\udb40\udd22\udb40\udd25\udb40\udd55i\udb40\udd20\udb40\udd25\udb40\udd55\udb40\udd20\udb40\udd23\udb40\udd56l\udb40\udd24\udb40\udd20\udb40\udd56\udb40\udd54\udb40\udd20\udb40\udd51e\udb40\udd23\udb40\udd52\udb40\udd53\udb40\udd23\udb40\udd54\udb40\udd27s\udb40\udd20\udb40\udd51\udb40\udd21\udb40\udd24\udb40\udd56\udb40\udd23 n\udb40\udd28\udb40\udd20\udb40\udd24\udb40\udd26\udb40\udd56\udb40\udd20e\udb40\udd23\udb40\udd20\udb40\udd52\udb40\udd26\udb40\udd22\udb40\udd24e\udb40\udd20\udb40\udd53\udb40\udd55\udb40\udd54\udb40\udd20\udb40\udd27d\udb40\udd23\udb40\udd54\udb40\udd25\udb40\udd55\udb40\udd23\udb40\udd54e\udb40\udd28\udb40\udd52\udb40\udd24\udb40\udd21\udb40\udd53\udb40\udd51d\udb40\udd23\udb40\udd28\udb40\udd23\udb40\udd28\udb40\udd20\udb40\udd54, h\udb40\udd56\udb40\udd28\udb40\udd52\udb40\udd25\udb40\udd27\udb40\udd51e\udb40\udd24\udb40\udd23\udb40\udd53\udb40\udd51r\udb40\udd27\udb40\udd20\udb40\udd26\udb40\udd51e\udb40\udd24\udb40\udd52\udb40\udd56\udb40\udd54 i\udb40\udd20\udb40\udd24\udb40\udd29\udb40\udd22s\udb40\udd21\udb40\udd21\udb40\udd27\udb40\udd24 y\udb40\udd56\udb40\udd22\udb40\udd51\udb40\udd27o\udb40\udd20\udb40\udd28\udb40\udd51\udb40\udd23u\udb40\udd28\udb40\udd22\udb40\udd24\udb40\udd25r\udb40\udd25\udb40\udd29\udb40\udd55\udb40\udd55 f\udb40\udd29\udb40\udd24\udb40\udd29\udb40\udd51l\udb40\udd55\udb40\udd55\udb40\udd22\udb40\udd22a\udb40\udd25\udb40\udd25\udb40\udd24\udb40\udd21g\udb40\udd53\udb40\udd24\udb40\udd52\udb40\udd55\ud83d\udc40\udb40\udd51\udb40\udd54\udb40\udd25\udb40\udd27\ufe0a"''' obj = json.loads('{' + raw + '}') desc = obj["description"] vs = [ord(ch) for ch in desc if 0xFE00 <= ord(ch) <= 0xFE0F or 0xE0100 <= ord(ch) <= 0xE01EF] vals = [(cp - 0xFE00) if 0xFE00<=cp<=0xFE0F else (cp-0xE0100+16) for cp in vs] data = bytes(vals) hexstr2 = data.decode('ascii').strip() hexstr2, len(hexstr2) ('78ed289ce25e05e03f40fd0a3bc3d70a14f38046f030b6240ced073d5e3d8b41ca38380df8b57a43ca706a4bfd04921174f2a708a3824559ee949aee225541c4bead57', 134)
Recovered flag (hidden in the Unicode variation selectors):
78ed289ce25e05e03f40fd0a3bc3d70a14f38046f030b6240ced073d5e3d8b41ca38380df8b57a43ca706a4bfd04921174f2a708a3824559ee949aee225541c4bead57