Challenge / GamePwn

CubeMadness1

CubeMadness1 is a sanitized challenge note from the local HTB archive, organized for quick review by category, difficulty, evidence flow, and reusable operator

Very EasyPublished 2024-07-19Sanitized local writeup

Scenario

CubeMadness1 attack path

CubeMadness1 is a sanitized challenge note from the local HTB archive, organized for quick review by category, difficulty, evidence flow, and reusable operator

Objective

Challenge walkthrough focused on GamePwn evidence, validation, and reusable operator lessons.

CubeMadness1 sanitized attack graph

Walkthrough flow

01

Extract Unity Texture2D / Sprite objects from...

02

OCR exported textures; CubeMadness1 contains the...

03

Store the raw proof only in loot/proof.txt; redact...

Source coverage

High source coverage

Status: complete. This article is generated from 6 sanitized Markdown sources and keeps raw flags, credentials, keys, cookies, and reusable secrets out of the rendered blog.

100% coverage
Evidence verdict

High confidence: the page is reconstructed from a primary walkthrough plus multiple supporting notes or evidence sources. Treat the chain as source-backed, while still checking the listed source files for sensitive values.

  • GamePwn/CubeMadness1/writeup.md
  • htb-challenge/GamePwn/CubeMadness1/notes.md
  • htb-challenge/GamePwn/CubeMadness1/memory-summary.md
  • htb-challenge/GamePwn/CubeMadness1/hypothesis-board.md
  • HTB/_knowledge/exports/ctf-lightrag-latest-203412/documents/challenge__GamePwn__CubeMadness1__memory-summary.md.4e1284d4ea.md
  • HTB/_knowledge/exports/ctf-lightrag-latest-203412/documents/challenge__GamePwn__CubeMadness1__notes.md.e3921f9bc0.md

Technical Walkthrough

Writeup

Challenge

  • Name: CubeMadness1
  • Category: GamePwn
  • Difficulty: Very Easy
  • Mode: file

Summary

The completed path is a Unity asset extraction, not the earlier live-memory branch. Runtime work proved the game launches and that the visible cube counter can be patched, but that only changed UI text and did not trigger the win condition.

The decisive step was to extract Unity textures from sharedassets0.assets. Two large black textures contained the flag rendered as green text. The final solver exports textures with UnityPy, OCRs them with Tesseract, writes the recovered raw flag only to loot/flag.txt, and leaves OCR transcripts redacted under analysis/.

Artifact Inventory

Reference analysis/artifact-inventory.json and summarize the relevant files or remote surface.

Analysis

  • Public challenge-specific research had already suggested that CubeMadness1 is solved by editing a live cube counter rather than by recovering a flag purely from static IL2CPP artifacts.
  • Runtime validation on the Pwnbox confirmed that the Windows Unity build can be launched under Wine/Xvfb without adding new tooling. See <local workspace> and <local workspace>.
  • The first launch created <local workspace> CubeMadness1/Player.log and a game-specific registry key at Software\\HackTheBox\\HackTheBox CubeMadness1, which confirms that the live runtime path is real and not just a static theory.
  • The first persisted-state review showed only display/session values in that registry key, so there is no verified cheap PlayerPrefs-only shortcut yet. See <local workspace>.
  • Focused scene-string extraction proved that the scene contains cubeCounter and the UI text Cubes: 0 / 20, which validates the likely win threshold as 20. See <local workspace>.
  • Asset correlation also confirmed challenge-specific classes CubeCounter and FlagCheck in Assembly-CSharp.dll metadata context, supporting the live counter/win-gate theory. See <local workspace> and <local workspace>.
  • Live process-memory probing against the actual HackTheBox CubeMadness1.exe process then surfaced writable runtime occurrences of Cubes: 0 / 20, CubeCounter, and FlagCheck. See <local workspace>.
  • A bounded runtime mutation successfully rewrote the live counter text buffers to Cubes: 20 / 20, and a post-patch screenshot was captured back into the workspace. See <local workspace>, <local workspace>, and <local workspace>.
  • OCR of the post-patch screenshot did not produce a flag-shaped value, so the validated live patch appears to affect the UI/runtime-string layer rather than the underlying gameplay counter.
  • After revisiting static assets, solve/extract_flag_texture.py used UnityPy to export 85 Unity textures from the extracted game assets.
  • The exported textures analysis/texture-export/sharedassets0_35.png and analysis/texture-export/sharedassets0_120.png contain the same flag rendered as green text on a black background.
  • The solver uses Tesseract OCR to recover the flag-shaped value, writes the raw flag only to loot/flag.txt, and redacts OCR transcripts in analysis/texture-export/ocr/.

Solve

Run:

bash
cd <local workspace>
.venv/bin/python solve/extract_flag_texture.py

The script:

  1. Loads the Unity asset files from files/extracted/gamepwn_cubemadness1.
  2. Exports Texture2D and Sprite objects into analysis/texture-export/.
  3. OCRs exported textures with Tesseract.
  4. Writes the recovered raw flag to loot/flag.txt.
  5. Keeps OCR artifacts redacted outside loot/.

Flag

Captured through the harness. Raw flag is stored in loot/flag.txt only.

Lessons

  • Runtime memory edits can prove a theory, but they are not always the shortest route.
  • For Unity GamePwn challenges, asset extraction should run before deeper live-memory mutation if textures are present.
  • Raw flags must stay in loot/; OCR and other analysis outputs should be redacted.

Source-Backed Dossier

The sections below are merged from companion Markdown notes for the same case. They are rendered after sanitization so the article stays precise without publishing raw flags, credentials, or target-specific secrets.

Notes

Scope

  • Challenge: CubeMadness1
  • Category: GamePwn
  • Difficulty: Very Easy
  • Mode: file
  • Remote instance: none
  • Start time: 2026-06-07T12:52:32Z
  • Operator: harness
  • State file: challenge-state.json

Harness Status

  • Current phase: see challenge-state.json
  • Next allowed actions: see next-action.json
  • Raw flags and sensitive material stay in loot/ only. Do not paste them here.

Artifact Inventory

FileSizeSHA256TypeNotes
files/a12c7365-d876-403c-9f84-7b447eadc52e.zip21574149<hash redacted>Zip archive data, at least v1.0 to extract, compression method=storezip entries: 52 shown in artifact inventory JSON
files/extracted/gamepwn_cubemadness1/GameAssembly.dll14764544<hash redacted>PE32+ executable (DLL) (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1.exe653824<hash redacted>PE32+ executable (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/Resources/unity default resources4844872<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/Resources/unity_builtin_extra390644<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/RuntimeInitializeOnLoads.json1146<hash redacted>JSON data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/ScriptingAssemblies.json3052<hash redacted>JSON data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/app.info34<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/boot.config86<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers61868<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers.assets118948<hash redacted>DIY-Thermocam raw data (Lepton 3.x), scale 0-0, spot sensor temperature 0.000000, unit celsius, color scheme 0, calibration: offset 0.000000, slope 8.000000
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers.assets.resS5748736<hash redacted>International EBCDIC text, with very long lines (65536), with no line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/Metadata/global-metadata.dat3206324<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/Resources/mscorlib.dll-resources.dat337563<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/machine.config29116<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/web.config11686<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/machine.config33648<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/web.config18848<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/machine.config34106<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/web.config18857<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/browscap.ini311984<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/config3276<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/mconfig/config.xml25817<hash redacted>XML 1.0 document text, ASCII text, with very long lines (334)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/level040100<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/sharedassets0.assets1244732<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/sharedassets0.assets.resS14648832<hash redacted>data
files/extracted/gamepwn_cubemadness1/UnityCrashHandler64.exe1232984<hash redacted>PE32+ executable (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/UnityPlayer.dll28219992<hash redacted>PE32+ executable (DLL) (console) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/baselib.dll498776<hash redacted>PE32+ executable (DLL) (console) x86-64, for MS Windows

Evidence Ledger

TimeActionOutput/FileFindingConfidenceNext
2026-06-07T12:52:32Zharness initchallenge-state.jsonWorkspace initialized with deterministic state fileHighInventory artifacts
2026-06-07T12:52:54Zartifact inventoryanalysis/artifact-inventory.json38 artifact(s) inventoriedHighBuild or update hypotheses
2026-06-07T12:52:54Zhypothesis recordedhypothesis-board.mdUnity IL2CPP game challenge: recover or bypass the collection/win condition by analyzing GameAssembly.dll with global-metadata.dat and Unity assets.MediumRun strings/file triage, inspect Unity metadata/assets, then locate code or assets around cube collection and flag/win condition.
2026-06-07T12:53:17Zresearch taskanalysis/research/task-20260607T125317563142Z-adbd4093.mdResearch task created for advisory investigationMediumRecord research output
2026-06-07T12:53:17Zcheckpoint recordedanalysis/checkpoint-hypothesis_ready-20260607T125317564671Z-9d66af51.mdCheckpoint for <secret redacted>HighUse checkpoint to drive next decision
2026-06-07T12:56:26Zresearch taskanalysis/research/task-20260607T125626478811Z-c44436d7.mdResearch task created for advisory investigationMediumRecord research output
2026-06-07T12:57:01Zlocal memory recordanalysis/local-memory-records.mdPrior local notes reviewed as fallback/advisory contextMediumValidate against current evidence
2026-06-07T13:09:48Zresearch recordanalysis/research/research-records.mdResearch tagged MATCHEDMediumValidate against current evidence
2026-06-07T13:10:27Zcheckpoint recordedanalysis/checkpoint-analysis-20260607T131027937772Z-7b19ce16.mdCheckpoint for ANALYSISHighUse checkpoint to drive next decision
2026-06-07T13:33:10Zevaluatoranalysis/evaluator-20260607T133310863524Z-d95534af.mdProceedHighRun the staged game under xvfb plus Wine on the Pwnbox and inspect generated state artifacts.
2026-06-07T23:40:00Zruntime preflightanalysis/runtime/runtime-preflight-20260607T234000Z.mdPwnbox already had wine, xvfb-run, regedit, gdb, xwininfo, xwd/convert, and the extracted game was restaged without modifying originals.HighUse isolated Wine prefix for bounded runtime validation.
2026-06-07T23:42:24Zfirst Wine launchanalysis/runtime/pwnbox-first-run.txtGame created LocalLow/HackTheBox/HackTheBox CubeMadness1/Player.log and a game-specific Wine registry key; launch succeeded far enough to initialize Unity under Wine.HighPull prefix snapshot and inspect registry/file-backed state.
2026-06-07T23:43:00Zprefix snapshot reviewanalysis/runtime/pwnbox-prefix-snapshot/user.regThe game-specific registry key only held screen/session values after first launch; no obvious persisted cube counter or flag value appeared there.HighPivot back toward live-memory or scene-object validation.
2026-06-07T23:45:00Zscene string correlationanalysis/static/scene-string-context.txtlevel0 contains UI text Cubes: 0 / 20, confirming the likely win threshold is 20 and cubeCounter is a real scene object backed by CubeCounter in Assembly-CSharp.dll; FlagCheck is also present.HighInspect live scene/runtime state rather than broad static speculation.
2026-06-07T23:52:23Zvisual runtime probeanalysis/runtime/pwnbox-screen-probe.txtWine/Xvfb produced a real HackTheBox CubeMadness1 window (1280x720), validating the live runtime path, but repeated capture attempts did not yet yield a reliable readable in-window scene/counter artifact.MediumRefine runtime capture or memory inspection around the live counter.
2026-06-07T23:58:00Zbounded memory probeanalysis/runtime/pwnbox-mem-probe.txtRuntime-specific probing helper was prepared, but the current captured output did not yet surface the live Cubes: 0 / 20 string or a resolved mutable counter location.MediumResume with tighter process-memory targeting or an approved minimal helper if needed.
2026-06-08T00:01:00Zlive process-memory confirmationanalysis/runtime/pwnbox-mem-probe.txtThe actual HackTheBox CubeMadness1.exe process was resolved by GameAssembly.dll mapping and live memory now confirms writable occurrences of Cubes: 0 / 20, CubeCounter, and FlagCheck.HighUse bounded runtime mutation rather than persisted-state editing.
2026-06-08T00:12:00ZWine debugger attach validationanalysis/runtime/pwnbox-winedbg-symbol-probe.txtwinedbg can attach to the live Wine PID and enumerate loaded PE modules (gameassembly, unityplayer, main executable), but deferred module symbols do not directly expose GameAssembly!il2cpp_* for immediate symbol-based invocation.HighContinue with bounded live memory mutation around validated runtime anchors.
2026-06-08T00:21:00Zlive UI counter patchanalysis/runtime/pwnbox-mem-patch-ui20.txtA bounded runtime mutation successfully rewrote the live Cubes: 0 / 20 buffers to Cubes: 20 / 20 in one UTF-8 and two UTF-16 locations inside the real game process.HighVerify whether this reaches gameplay state or only the UI layer.
2026-06-08T00:35:00Zpost-patch captureanalysis/runtime/pwnbox-patch-and-capture.txt, analysis/runtime/cubemadness1-root-postpatch.png, analysis/runtime/cubemadness1-root-postpatch-ocr.txtPost-patch screenshot capture succeeded and OCR confirms the counter text changed, but the artifact did not contain a flag-shaped value, so the current patch likely affects the visible counter/UI layer only.MediumIsolate the underlying gameplay counter or perform a minimal runtime interaction after patching.
2026-06-09T13:54:00ZUnity texture extractionsolve/extract_flag_texture.py, analysis/texture-export-run.txt, analysis/texture-export/sharedassets0_35.pngStatic asset extraction with UnityPy exported 85 textures; OCR of the large black/green flag texture recovered a valid flag-shaped value without needing further runtime mutation.HighCapture through harness and complete.
2026-06-08T00:44:00Zremote connectivity blockerlocal TCP/SSH checkThe Pwnbox SSH service stopped responding (TCP22 timeout), blocking further live mutation, interaction, or harness flag capture in this session.HighResume from the current runtime artifacts once Pwnbox connectivity returns.
2026-06-09T13:55:19Zflag captureloot/flag.txtHTB-format flag captured; raw value kept in loot onlyHighWrite solution and run completion gate
2026-06-09T13:57:39Zcompletion gatechallenge-state.jsonCompletion gate passed; state marked COMPLETEHighOptional sanitized memory summary approval
2026-06-09T13:59:17Zflag captureloot/flag.txtHTB-format flag captured; raw value kept in loot onlyHighWrite solution and run completion gate
2026-06-09T13:59:17Zcompletion gatechallenge-state.jsonCompletion gate passed; state marked COMPLETEHighOptional sanitized memory summary approval

Key Findings

  • The public runtime-edit theory is validated enough to continue: the game launches in an isolated Wine/Xvfb environment on the Pwnbox and exposes a real window.
  • The on-screen objective text is statically confirmed as Cubes: 0 / 20, so the likely win threshold is 20 cubes.
  • Live process-memory probing against the real HackTheBox CubeMadness1.exe process confirmed writable runtime occurrences of Cubes: 0 / 20, CubeCounter, and FlagCheck.
  • A bounded runtime mutation successfully changed the visible live counter text to Cubes: 20 / 20, proving the runtime patch path works, but the post-patch screenshot/OCR did not yet surface a flag, which suggests the current patch is reaching the UI layer rather than the underlying gameplay counter.
  • The initial PlayerPrefs-style registry key only contains screen/session values after first launch, so the cheapest persisted-state shortcut was not confirmed.
  • The remaining blocker in this session is environmental: the Pwnbox SSH port timed out before the next live mutation/interaction step could be completed.

RAG / Advisory Memory

RAG output is advisory only. Record evaluated retrievals with:

bash
scripts/challenge_harness.py rag-record <workspace> --query "..." --tag MATCHED|PARTIAL|MISSING|<secret redacted>|GENERIC --validation "..."

Secrets/Flags

Raw flags and sensitive material stay in loot/ only. Use scripts/challenge_harness.py capture-flag to validate and record flag capture without printing the value.

Memory Summary

Metadata

  • Platform: HackTheBox Challenges
  • Category: GamePwn
  • Challenge: CubeMadness1
  • Difficulty: Very Easy
  • Source workspace: <local workspace>

Validated Solve Chain

Concepts only. Do not include raw flags, reusable credentials, tokens, cookies, private keys, or live secrets.

  1. Extract Unity Texture2D / Sprite objects from globalgamemanagers* and sharedassets0.assets.
  2. OCR exported textures; CubeMadness1 contains the flag rendered as green text on black textures.
  3. Store the raw flag only in loot/flag.txt; redact OCR transcripts and flag-bearing exported images in analysis/.

Reusable Lessons

  • For Unity GamePwn challenges, run asset extraction before spending time on deeper live-memory mutation.
  • A live memory edit that changes UI text may not satisfy the underlying game state or win condition.
  • If OCR is used, redact OCR artifacts outside loot/.

Dead Ends

  • Patching visible Cubes: 0 / 20 strings to Cubes: 20 / 20 proved runtime control but did not trigger flag display.
  • First-launch PlayerPrefs / Wine registry review did not expose a saved counter shortcut.

Tool Quirks

  • UnityPy successfully exported the relevant textures locally.
  • tesseract --psm 6 cleanly read the flag-shaped value from the exported texture.

Evidence Paths

  • solve/extract_flag_texture.py
  • analysis/texture-export-run.txt
  • analysis/texture-export/ocr/
  • loot/flag.txt

Ingestion Decision

  • Proposed for LightRAG: yes
  • Requires user approval before ingestion: yes

Hypothesis Board

Keep no more than 3 active hypotheses on Easy/Medium and 5 on Hard unless the user explicitly asks for breadth.

RankPathEvidenceMissing ProofCheapest ValidationConfidenceStatus
1Launch the Unity game live under Wine/Xvfb on the Pwnbox, identify the CubeCounter / FlagCheck runtime path, and mutate the live cube count until the 20-cube win condition triggers.Runtime launch is validated; level0 contains Cubes: 0 / 20; assets/metadata expose cubeCounter, CubeCounter, and FlagCheck; first-launch registry state does not yet show a trivial persisted counter.Exact live counter storage or mutable memory location still needs to be resolved.Tighten runtime capture or process-memory targeting around the live Cubes: 0 / 20 counter and CubeCounter / FlagCheck objects.HighActive

Closed Branches

BranchEvidence TestedFailure OutputReason ClosedRevisit Condition

Memory Summary

approval_required: true

Sanitized Memory Summary

Metadata

  • Platform: HackTheBox Challenges
  • Category: GamePwn
  • Challenge: CubeMadness1
  • Difficulty: Very Easy
  • Source workspace: <local workspace>

Validated Solve Chain

Concepts only. Do not include raw flags, reusable credentials, tokens, cookies, private keys, or live secrets.

  1. Extract Unity Texture2D / Sprite objects from globalgamemanagers* and sharedassets0.assets.
  2. OCR exported textures; CubeMadness1 contains the flag rendered as green text on black textures.
  3. Store the raw flag only in loot/flag.txt; redact OCR transcripts and flag-bearing exported images in analysis/.

Reusable Lessons

  • For Unity GamePwn challenges, run asset extraction before spending time on deeper live-memory mutation.
  • A live memory edit that changes UI text may not satisfy the underlying game state or win condition.
  • If OCR is used, redact OCR artifacts outside loot/.

Dead Ends

  • Patching visible `Cubes: <REDACTED>
  • First-launch PlayerPrefs / Wine registry review did not expose a saved counter shortcut.

Tool Quirks

  • UnityPy successfully exported the relevant textures locally.
  • tesseract --psm 6 cleanly read the flag-shaped value from the exported texture.

Evidence Paths

  • solve/extract_flag_texture.py
  • analysis/texture-export-run.txt
  • analysis/texture-export/ocr/
  • loot/flag.txt

Ingestion Decision

  • Proposed for LightRAG: yes
  • Requires user approval before ingestion: yes

Notes

Notes

Scope

  • Challenge: CubeMadness1
  • Category: GamePwn
  • Difficulty: Very Easy
  • Mode: file
  • Remote instance: none
  • Start time: 2026-06-07T12:52:32Z
  • Operator: harness
  • State file: challenge-state.json

Harness Status

  • Current phase: see challenge-state.json
  • Next allowed actions: see next-action.json
  • Raw flags and sensitive material stay in loot/ only. Do not paste them here.

Artifact Inventory

FileSizeSHA256TypeNotes
files/a12c7365-d876-403c-9f84-7b447eadc52e.zip21574149<hash redacted>Zip archive data, at least v1.0 to extract, compression method=storezip entries: 52 shown in artifact inventory JSON
files/extracted/gamepwn_cubemadness1/GameAssembly.dll14764544<hash redacted>PE32+ executable (DLL) (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1.exe653824<hash redacted>PE32+ executable (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/Resources/unity default resources4844872<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/Resources/unity_builtin_extra390644<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/RuntimeInitializeOnLoads.json1146<hash redacted>JSON data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/ScriptingAssemblies.json3052<hash redacted>JSON data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/app.info34<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/boot.config86<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers61868<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers.assets118948<hash redacted>DIY-Thermocam raw data (Lepton 3.x), scale 0-0, spot sensor temperature 0.000000, unit celsius, color scheme 0, calibration: offset 0.000000, slope 8.000000
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/globalgamemanagers.assets.resS5748736<hash redacted>International EBCDIC text, with very long lines (65536), with no line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/Metadata/global-metadata.dat3206324<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/Resources/mscorlib.dll-resources.dat337563<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/machine.config29116<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/2.0/web.config11686<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/machine.config33648<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.0/web.config18848<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/Browsers/Compat.browser1605<hash redacted>exported SGML document text, ASCII text, with CRLF, LF line terminators
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx60575<hash redacted>HTML document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/machine.config34106<hash redacted>XML 1.0 document text, ASCII text, with very long lines (541)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/settings.map2622<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/4.5/web.config18857<hash redacted>XML 1.0 document text, ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/browscap.ini311984<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/config3276<hash redacted>ASCII text
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/il2cpp_data/etc/mono/mconfig/config.xml25817<hash redacted>XML 1.0 document text, ASCII text, with very long lines (334)
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/level040100<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/sharedassets0.assets1244732<hash redacted>data
files/extracted/gamepwn_cubemadness1/HackTheBox CubeMadness1_Data/sharedassets0.assets.resS14648832<hash redacted>data
files/extracted/gamepwn_cubemadness1/UnityCrashHandler64.exe1232984<hash redacted>PE32+ executable (GUI) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/UnityPlayer.dll28219992<hash redacted>PE32+ executable (DLL) (console) x86-64, for MS Windows
files/extracted/gamepwn_cubemadness1/baselib.dll498776<hash redacted>PE32+ executable (DLL) (console) x86-64, for MS Windows

Evidence Ledger

TimeActionOutput/FileFindingConfidenceNext
2026-06-07T12:52:32Zharness initchallenge-state.jsonWorkspace initialized with deterministic state fileHighInventory artifacts
2026-06-07T12:52:54Zartifact inventoryanalysis/artifact-inventory.json38 artifact(s) inventoriedHighBuild or update hypotheses
2026-06-07T12: <REDACTED>, inspect Unity metadata/assets, then locate code or assets around cube collection and flag/win condition.
2026-06-07T12:53:17Zresearch taskanalysis/research/task-20260607T125317563142Z-adbd4093.mdResearch task created for advisory investigationMediumRecord research output
2026-06-07T12:53:17Zcheckpoint recordedanalysis/checkpoint-hypothesis_ready-20260607T125317564671Z-9d66af51.mdCheckpoint for <secret redacted>HighUse checkpoint to drive next decision
2026-06-07T12:56:26Zresearch taskanalysis/research/task-20260607T125626478811Z-c44436d7.mdResearch task created for advisory investigationMediumRecord research output
2026-06-07T12:57:01Zlocal memory recordanalysis/local-memory-records.mdPrior local notes reviewed as fallback/advisory contextMediumValidate against current evidence
2026-06-07T13:09:48Zresearch recordanalysis/research/research-records.mdResearch tagged MATCHEDMediumValidate against current evidence
2026-06-07T13:10:27Zcheckpoint recordedanalysis/checkpoint-analysis-20260607T131027937772Z-7b19ce16.mdCheckpoint for ANALYSISHighUse checkpoint to drive next decision
2026-06-07T13:33:10Zevaluatoranalysis/evaluator-20260607T133310863524Z-d95534af.mdProceedHighRun the staged game under xvfb plus Wine on the Pwnbox and inspect generated state artifacts.
2026-06-07T23:40:00Zruntime preflightanalysis/runtime/runtime-preflight-20260607T234000Z.mdPwnbox already had wine, xvfb-run, regedit, gdb, xwininfo, xwd/convert, and the extracted game was restaged without modifying originals.HighUse isolated Wine prefix for bounded runtime validation.
2026-06-07T23:42:24Zfirst Wine launchanalysis/runtime/pwnbox-first-run.txtGame created LocalLow/HackTheBox/HackTheBox CubeMadness1/Player.log and a game-specific Wine registry key; launch succeeded far enough to initialize Unity under Wine.HighPull prefix snapshot and inspect registry/file-backed state.
2026-06-07T23: <REDACTED>
2026-06-07T23:45:00Zscene string correlationanalysis/static/scene-string-context.txtlevel0 contains UI text Cubes: 0 / 20, confirming the likely win threshold is 20 and cubeCounter is a real scene object backed by CubeCounter in Assembly-CSharp.dll; FlagCheck is also present.HighInspect live scene/runtime state rather than broad static speculation.
2026-06-07T23:52:23Zvisual runtime probeanalysis/runtime/pwnbox-screen-probe.txtWine/Xvfb produced a real HackTheBox CubeMadness1 window (1280x720), validating the live runtime path, but repeated capture attempts did not yet yield a reliable readable in-window scene/counter artifact.MediumRefine runtime capture or memory inspection around the live counter.
2026-06-07T23:58:00Zbounded memory probeanalysis/runtime/pwnbox-mem-probe.txtRuntime-specific probing helper was prepared, but the current captured output did not yet surface the live Cubes: 0 / 20 string or a resolved mutable counter location.MediumResume with tighter process-memory targeting or an approved minimal helper if needed.
2026-06-08T00:01:00Zlive process-memory confirmationanalysis/runtime/pwnbox-mem-probe.txtThe actual HackTheBox CubeMadness1.exe process was resolved by GameAssembly.dll mapping and live memory now confirms writable occurrences of Cubes: 0 / 20, CubeCounter, and FlagCheck.HighUse bounded runtime mutation rather than persisted-state editing.
2026-06-08T00:12:00ZWine debugger attach validationanalysis/runtime/pwnbox-winedbg-symbol-probe.txtwinedbg can attach to the live Wine PID and enumerate loaded PE modules (gameassembly, unityplayer, main executable), but deferred module symbols do not directly expose GameAssembly!il2cpp_* for immediate symbol-based invocation.HighContinue with bounded live memory mutation around validated runtime anchors.
2026-06-08T00:21:00Zlive UI counter patchanalysis/runtime/pwnbox-mem-patch-ui20.txtA bounded runtime mutation successfully rewrote the live Cubes: 0 / 20 buffers to Cubes: 20 / 20 in one UTF-8 and two UTF-16 locations inside the real game process.HighVerify whether this reaches gameplay state or only the UI layer.
2026-06-08T00: <REDACTED>, analysis/runtime/cubemadness1-root-postpatch.png, analysis/runtime/cubemadness1-root-postpatch-ocr.txtPost-patch screenshot capture succeeded and OCR confirms the counter text changed, but the artifact did not contain a flag-shaped value, so the current patch likely affects the visible counter/UI layer only.MediumIsolate the underlying gameplay counter or perform a minimal runtime interaction after patching.
2026-06-09T13: <REDACTED>, analysis/texture-export-run.txt, analysis/texture-export/sharedassets0_35.pngStatic asset extraction with UnityPy exported 85 textures; OCR of the large black/green flag texture recovered a valid flag-shaped value without needing further runtime mutation.HighCapture through harness and complete.
2026-06-08T00: <REDACTED>, blocking further live mutation, interaction, or harness flag capture in this session.HighResume from the current runtime artifacts once Pwnbox connectivity returns.
2026-06-09T13: <REDACTED>
2026-06-09T13:57:39Zcompletion gatechallenge-state.jsonCompletion gate passed; state marked COMPLETEHighOptional sanitized memory summary approval
2026-06-09T13: <REDACTED>
2026-06-09T13:59:17Zcompletion gatechallenge-state.jsonCompletion gate passed; state marked COMPLETEHighOptional sanitized memory summary approval

Key Findings

  • The public runtime-edit theory is validated enough to continue: the game launches in an isolated Wine/Xvfb environment on the Pwnbox and exposes a real window.
  • The on-screen objective text is statically confirmed as Cubes: 0 / 20, so the likely win threshold is 20 cubes.
  • Live process-memory probing against the real HackTheBox CubeMadness1.exe process confirmed writable runtime occurrences of Cubes: 0 / 20, CubeCounter, and FlagCheck.
  • A bounded runtime mutation successfully changed the visible live counter text to `Cubes: <REDACTED>, proving the runtime patch path works, but the post-patch screenshot/OCR did not yet surface a flag, which suggests the current patch is reaching the UI layer rather than the underlying gameplay counter.
  • The initial PlayerPrefs-style registry key only contains screen/session values after first launch, so the cheapest persisted-state shortcut was not confirmed.
  • The remaining blocker in this session is environmental: the Pwnbox SSH port timed out before the next live mutation/interaction step could be completed.

RAG / Advisory Memory

RAG output is advisory only. Record evaluated retrievals with:

bash
scripts/challenge_harness.py rag-record <workspace> --query "..." --tag MATCHED|PARTIAL|MISSING|<secret redacted>|GENERIC --validation "..."

Secrets/Flags

Raw flags and sensitive material stay in loot/ only. Use scripts/challenge_harness.py capture-flag to validate and record flag capture without printing the value.

Technical analogy

How to remember this solve

Think of the game like an arcade cabinet with a score counter behind the glass. The solve is finding where the game stores state and reading or changing it at the right moment.

For CubeMadness1, keep the mental model simple: identify the trusted assumption, prove it with the smallest safe test, then automate or repeat only the part that directly leads to the flag.