Writeups PicoCTFReverse EngineeringKeygenSHA256

KeyGenMe Writeup - PicoGym

Writeup for the KeyGenMe challenge from PicoCTF PicoGym.

Contents

Category: Reverse Engineering

Difficulty: Medium

Points: 30

Description

A trial version of “Arcane Calculator” is provided as a Python script. The full version is locked behind a license key. Reverse-engineering the key validation logic reveals the key.

Overview

Solution

Step 1: Identify the Key Structure

key_part_static1_trial = "picoCTF{1n_7h3_|<3y_of_"
key_part_dynamic1_trial = "xxxxxxxx"   # 8 unknown characters
key_part_static2_trial = "}"

Step 2: Read the Validation Logic

if key[i] != hashlib.sha256(username_trial).hexdigest()[4]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[5]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[3]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[6]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[2]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[7]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[1]: return False
if key[i] != hashlib.sha256(username_trial).hexdigest()[8]: return False

Step 3: Reconstruct the Key

import hashlib

h = hashlib.sha256(b"GOUGH").hexdigest()
indices = [4, 5, 3, 6, 2, 7, 1, 8]
dynamic = "".join(h[i] for i in indices)
key = "picoCTF{1n_7h3_|<3y_of_" + dynamic + "}"
print(key)

Step 4: Decrypt the Full Version

Why This Works

← Back to Blog