report-archive
- •
Attribution
- •
Solved by Muhammad Dhafin Ramadhan during the competition. These are rn’s study notes based on the teammate’s documented solve, not an independent rn solve.
- •
- •
What it asked
- •
Recover an archived record omitted from the public index and decode its protected body from the supplied artifacts.
- •
- •
Approach
- •
access_trace.logidentified hidden recordrid=4109;archive_store.jsonsupplied its role, encoding, and ciphertext. - •
The client code defines
key_material = role + ':' + rid + ':journal-rights', hashes it with SHA-256, then repeats the 32-byte digest as an XOR keystream. - •
For ciphertext byte and digest byte , plaintext is .
- •
- •
Solution
- •
import hashlib rid = 4109 role = "reviewer" ct = bytes.fromhex( "81b092e81dedcd3bef60630e3924190c5a41f36384e2ea7f" "f8cdc5c92f266320b88bbeca0ca6df3ef85c680f2a222d0d4e" ) material = f"{role}:{rid}:journal-rights".encode() key = hashlib.sha256(material).digest() print(bytes(c ^ key[i % len(key)] for i, c in enumerate(ct)).decode())
- •
- •
Verification
- •
The supplied values decrypt locally to the recorded flag.
- •
- •
Concepts
- •
Artifact correlation; hidden backend records; repeating-key XOR; SHA-256 key derivation.
- •
- •