HI Cyber Con CTF 2026. Blockchain.
Pruned Ledger
The operator wiped the case file from contract storage. The lab rebuilt all four fields from 400 archived transactions.
Published 2 November 2026. Challenge by Hidden Investigations.
The brief
A settlement-ledger system was decommissioned, and the operator cleared selected fields from current contract storage. The complete chain archive remains available. Reconstruct the pruned case file for case 0xca5ef11e.
- pruned-ledger.zip, 67 KB
In short
A Ledger contract had its case file pruned from storage, but every value it ever held was still in the chain archive. The lab decoded 400 transactions, followed the case tag to the right contract and undid two keccak masks to rebuild all four fields.
A case file wiped from storage
A settlement Ledger was shut down and its operator pruned the case file for case 0xca5ef11e from contract storage. What was left was an offline archive of 400 signed transactions and three contract sources.
26 contracts out of 400 transactions
The lab decoded every raw transaction itself and recovered each sender from its signature. From sender and nonce it derived all 26 contract addresses, 18 relays, 6 clearing accounts and 2 Ledgers.
The case tag picks the Ledger
Each relay carries a four byte case tag and forwards funds to a fixed next hop. Four relays tagged ca5ef11e pass 4.75 ETH to the Ledger with case reference pruned_storage. The tag ca5ef00d ends at a decoy.
Pruning keeps the calldata
The operator set the working record at transactions 100, 111 and 123, sealed it at 136 and pruned it at 325. Pruning zeroes storage, but every argument stays in history. The record at the seal was calldata.
Two masks, both undone
The sealed entry was masked with a keccak hash of the Ledger and that record, so it unmasks to never. The note was masked with its caller. Of 70 known addresses, only the one behind a failed unlock gives clean text, forgets.
The case file, whole again
In contract order the four fields read pruned_storage, calldata, never and forgets. The case reference, the record, the archive entry and the note together form the flag.
The insight
Pruning zeroed the storage, but the record, the sealed value and every mask input were sent as public calldata, so the archive alone rebuilds the file.
The flag
hiCTF{pruned_storage_calldata_never_forgets}